
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

int __gmpz_si_kronecker(long a,mpz_srcptr b)

{
  uint uVar1;
  byte bVar2;
  int iVar3;
  mp_limb_t a_00;
  uint *puVar4;
  uint uVar5;
  int iVar6;
  uint local_24;
  
  uVar1 = b->_mp_size;
  if (uVar1 == 0) {
    return (uint)((a + 1U & 0xfffffffd) == 0);
  }
  puVar4 = b->_mp_d;
  uVar5 = *puVar4;
  iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);
  local_24 = ((int)(uVar1 & a) >> 0x1f) * -2;
  if ((uVar5 & 1) != 0) {
    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;
    if (a < 0) {
      a = -a;
      if ((a & 1U) != 0) goto joined_r0x0002c00f;
    }
    else {
      if ((a & 1U) != 0) goto joined_r0x0002c00f;
      if (a == 0) {
        return (uint)(uVar5 == 1 && iVar6 == 1);
      }
    }
    iVar3 = 0;
    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {
      iVar3 = iVar3 + 1;
    }
    a = (uint)a >> ((byte)iVar3 & 0x1f);
    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);
    goto joined_r0x0002c00f;
  }
  if ((a & 1U) == 0) {
    return 0;
  }
  if (uVar5 == 0) {
    do {
      puVar4 = puVar4 + 1;
      uVar5 = *puVar4;
      iVar6 = iVar6 + -1;
    } while (uVar5 == 0);
    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;
  }
  else {
LAB_0002bf0b:
    if (uVar5 == 0x80000000) {
      if (iVar6 == 1) {
        return 1 - ((local_24 ^ a ^ a >> 1) & 2);
      }
      uVar5 = puVar4[1] * 2;
    }
    else {
      bVar2 = 0;
      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {
        bVar2 = bVar2 + 1;
      }
      uVar5 = uVar5 >> (bVar2 & 0x1f);
    }
  }
  local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;
  a = (a ^ a >> 0x1f) - (a >> 0x1f);
joined_r0x0002c00f:
  if (a != 1) {
    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {
      __gmpn_cpuvec_init();
    }
    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {
      local_24 = local_24 ^ a;
      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);
    }
    else {
      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);
    }
    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);
    return iVar6;
  }
  return 1 - (local_24 & 2);
}



uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)

{
  int iVar1;
  byte bVar2;
  undefined4 uVar3;
  uint uVar4;
  uint *puVar5;
  int unaff_EBX;
  uint uVar6;
  int iVar7;
  uint unaff_retaddr;
  uint local_28;
  
  entry(param_2,0x2beb9);
  uVar4 = *(uint *)(param_3 + 4);
  if (uVar4 == 0) {
    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);
  }
  puVar5 = *(uint **)(param_3 + 8);
  uVar6 = *puVar5;
  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);
  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;
  if ((uVar6 & 1) != 0) {
    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;
    if ((int)unaff_retaddr < 0) {
      unaff_retaddr = -unaff_retaddr;
      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;
    }
    else {
      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;
      if (unaff_retaddr == 0) {
        return (uint)(uVar6 == 1 && iVar7 == 1);
      }
    }
    iVar1 = 0;
    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {
      iVar1 = iVar1 + 1;
    }
    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);
    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);
    goto joined_r0x0002c00f;
  }
  if ((unaff_retaddr & 1) == 0) {
    return 0;
  }
  if (uVar6 == 0) {
    do {
      puVar5 = puVar5 + 1;
      uVar6 = *puVar5;
      iVar7 = iVar7 + -1;
    } while (uVar6 == 0);
    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;
  }
  else {
LAB_0002bf0b:
    if (uVar6 == 0x80000000) {
      if (iVar7 == 1) {
        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);
      }
      uVar6 = puVar5[1] * 2;
    }
    else {
      bVar2 = 0;
      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {
        bVar2 = bVar2 + 1;
      }
      uVar6 = uVar6 >> (bVar2 & 0x1f);
    }
  }
  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;
  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);
joined_r0x0002c00f:
  if (unaff_retaddr != 1) {
    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {
      __gmpn_cpuvec_init();
    }
    iVar1 = *(int *)(unaff_EBX + 0x6cedb);
    if (iVar7 < *(int *)(iVar1 + 0xa4)) {
      local_28 = local_28 ^ unaff_retaddr;
      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);
    }
    else {
      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);
    }
    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);
    return uVar4;
  }
  return 1 - (local_28 & 2);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x0001c340
ADD EBX,0x6d147
SUB ESP,0x1c
MOV EDX,dword ptr [ESP + 0x34]
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [EDX + 0x4]
TEST ESI,ESI
JZ 0x0002bfd0
MOV EDX,dword ptr [EDX + 0x8]
MOV EDI,ESI
MOV ECX,ESI
SAR ECX,0x1f
AND EDI,EAX
MOV EBP,dword ptr [EDX]
XOR ESI,ECX
SHR EDI,0x1f
SUB ESI,ECX
ADD EDI,EDI
MOV ECX,EAX
TEST EBP,0x1
JNZ 0x0002bf98
AND ECX,0x1
JZ 0x0002bf87
TEST EBP,EBP
JZ 0x0002c048
CMP EBP,0x80000000
JZ 0x0002c080
XOR ECX,ECX
TZCNT ECX,EBP
SHR EBP,CL
MOV ECX,EAX
SAR ECX,0x1e
AND ECX,EBP
AND ECX,0x2
XOR ECX,EDI
MOV dword ptr [ESP + 0x8],ECX
MOV ECX,EAX
SAR ECX,0x1f
XOR EAX,ECX
MOV EDI,EAX
SUB EDI,ECX
CMP EDI,0x1
JZ 0x0002c015
MOV EAX,dword ptr [EBX + 0xfffffd58]
MOV EAX,dword ptr [EAX]
TEST EAX,EAX
JZ 0x0002c068
MOV EAX,dword ptr [EBX + 0xfffffd94]
CMP dword ptr [EAX + 0xa4],ESI
JG 0x0002c030
SUB ESP,0x4
PUSH EDI
PUSH ESI
PUSH EDX
CALL dword ptr [EAX + 0x40]
ADD ESP,0x10
SUB ESP,0x4
AND EBP,EDI
XOR EBP,dword ptr [ESP + 0xc]
PUSH EBP
PUSH EDI
PUSH EAX
CALL 0x0001b780
ADD ESP,0x10
MOV ECX,EAX
ADD ESP,0x1c
MOV EAX,ECX
POP EBX
POP ESI
POP EDI
POP EBP
RET
SAR ECX,0x1e
AND ECX,EBP
AND ECX,0x2
XOR ECX,EDI
MOV EDI,EAX
MOV dword ptr [ESP + 0x8],ECX
TEST EAX,EAX
JS 0x0002bfe8
TEST AL,0x1
JNZ 0x0002bf3a
TEST EAX,EAX
JNZ 0x0002bff6
CMP ESI,0x1
SETZ AL
XOR ECX,ECX
CMP EBP,0x1
SETZ CL
AND ECX,EAX
JMP 0x0002bf87
ADD EAX,0x1
XOR ECX,ECX
AND EAX,0xfffffffd
SETZ CL
ADD ESP,0x1c
POP EBX
MOV EAX,ECX
POP ESI
POP EDI
POP EBP
RET
NEG EDI
TEST EDI,0x1
JNZ 0x0002bf3a
XOR ECX,ECX
MOV EAX,EBP
TZCNT ECX,EDI
SHR EAX,0x1
SHR EDI,CL
XOR EAX,EBP
ADD ECX,ECX
AND ECX,EAX
XOR dword ptr [ESP + 0x8],ECX
CMP EDI,0x1
JNZ 0x0002bf43
MOV EBP,dword ptr [ESP + 0x8]
ADD ESP,0x1c
POP EBX
POP ESI
AND EBP,0x2
SUB EDI,EBP
MOV ECX,EDI
POP EDI
POP EBP
MOV EAX,ECX
RET
XOR dword ptr [ESP + 0x8],EDI
PUSH 0x0
PUSH EDI
PUSH ESI
PUSH EDX
CALL dword ptr [EAX + 0x60]
ADD ESP,0x10
JMP 0x0002bf71
ADD EDX,0x4
MOV EBP,dword ptr [EDX]
SUB ESI,0x1
TEST EBP,EBP
JZ 0x0002c048
TEST EBP,0x1
JNZ 0x0002bf1f
JMP 0x0002bf0b
MOV dword ptr [ESP + 0xc],EDX
CALL 0x0001b6f0
MOV EDX,dword ptr [ESP + 0xc]
JMP 0x0002bf53
CMP ESI,0x1
JZ 0x0002c090
MOV ECX,dword ptr [EDX + 0x4]
LEA EBP,[ECX + ECX*0x1]
JMP 0x0002bf1f
MOV EDX,EAX
SAR EDX,0x1
XOR EAX,EDX
XOR EDI,EAX
AND EDI,0x2
SUB ESI,EDI
MOV ECX,ESI
JMP 0x0002bf87
(translation_unit "uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}\n\n" (function_definition "uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" type_identifier (ERROR "__regparm2" identifier) (function_declarator "__gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint unaff_retaddr;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "entry(param_2,0x2beb9);" (call_expression "entry(param_2,0x2beb9)" identifier (argument_list "(param_2,0x2beb9)" ( identifier , number_literal ))) ;) (expression_statement "uVar4 = *(uint *)(param_3 + 4);" (assignment_expression "uVar4 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" { (return_statement "return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);" return (call_expression "(uint)((unaff_retaddr + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((unaff_retaddr + 1 & 0xfffffffd) == 0)" ( (binary_expression "(unaff_retaddr + 1 & 0xfffffffd) == 0" (parenthesized_expression "(unaff_retaddr + 1 & 0xfffffffd)" ( (binary_expression "unaff_retaddr + 1 & 0xfffffffd" (binary_expression "unaff_retaddr + 1" identifier + number_literal) & number_literal) )) == number_literal) ))) ;) })) (expression_statement "puVar5 = *(uint **)(param_3 + 8);" (assignment_expression "puVar5 = *(uint **)(param_3 + 8)" identifier = (pointer_expression "*(uint **)(param_3 + 8)" * (cast_expression "(uint **)(param_3 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" identifier = (binary_expression "(uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" (parenthesized_expression "(uVar4 ^ (int)uVar4 >> 0x1f)" ( (binary_expression "uVar4 ^ (int)uVar4 >> 0x1f" identifier ^ (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar4 >> 0x1f)" ( (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;" (assignment_expression "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" identifier = (binary_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" (parenthesized_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f)" ( (binary_expression "(int)(uVar4 & unaff_retaddr) >> 0x1f" (cast_expression "(int)(uVar4 & unaff_retaddr)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar4 & unaff_retaddr)" ( (binary_expression "uVar4 & unaff_retaddr" identifier & identifier) ))) >> number_literal) )) * number_literal)) ;) (if_statement "if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" if (parenthesized_expression "((uVar6 & 1) != 0)" ( (binary_expression "(uVar6 & 1) != 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" { (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" identifier = (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (if_statement "if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" if (parenthesized_expression "((int)unaff_retaddr < 0)" ( (binary_expression "(int)unaff_retaddr < 0" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }" { (expression_statement "unaff_retaddr = -unaff_retaddr;" (assignment_expression "unaff_retaddr = -unaff_retaddr" identifier = (unary_expression "-unaff_retaddr" - identifier)) ;) (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((unaff_retaddr & 1) != 0)" ( (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) }) (else_clause "else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" else (compound_statement "{\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" { (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((unaff_retaddr & 1) != 0)" ( (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) (if_statement "if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" if (parenthesized_expression "(unaff_retaddr == 0)" ( (binary_expression "unaff_retaddr == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" { (return_statement "return (uint)(uVar6 == 1 && iVar7 == 1);" return (call_expression "(uint)(uVar6 == 1 && iVar7 == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 == 1 && iVar7 == 1)" ( (binary_expression "uVar6 == 1 && iVar7 == 1" (binary_expression "uVar6 == 1" identifier == number_literal) && (binary_expression "iVar7 == 1" identifier == number_literal)) ))) ;) })) }))) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (for_statement "for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }" for ( (assignment_expression "uVar4 = unaff_retaddr" identifier = identifier) ; (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" identifier = (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar1 = iVar1 + 1;\n    }" { (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (expression_statement "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);" (assignment_expression "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f)" identifier = (binary_expression "unaff_retaddr >> ((byte)iVar1 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar1 & 0x1f)" ( (binary_expression "(byte)iVar1 & 0x1f" (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);" (assignment_expression "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" identifier = (binary_expression "local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" identifier ^ (binary_expression "iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" (binary_expression "iVar1 * 2" identifier * number_literal) & (parenthesized_expression "(uVar6 >> 1 ^ uVar6)" ( (binary_expression "uVar6 >> 1 ^ uVar6" (binary_expression "uVar6 >> 1" identifier >> number_literal) ^ identifier) ))))) ;) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;) })) (if_statement "if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }" if (parenthesized_expression "((unaff_retaddr & 1) == 0)" ( (binary_expression "(unaff_retaddr & 1) == 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }" { (do_statement "do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);" do (compound_statement "{\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    }" { (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) ;) (if_statement "if ((uVar6 & 1) == 0) goto LAB_0002bf0b;" if (parenthesized_expression "((uVar6 & 1) == 0)" ( (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0002bf0b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" else (compound_statement "{\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" { (labeled_statement "LAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" statement_identifier : (if_statement "if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" if (parenthesized_expression "(uVar6 == 0x80000000)" ( (binary_expression "uVar6 == 0x80000000" identifier == number_literal) )) (compound_statement "{\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }" { (if_statement "if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (compound_statement "{\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" { (return_statement "return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);" return (binary_expression "1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" number_literal - (parenthesized_expression "((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" ( (binary_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2" (parenthesized_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1)" ( (binary_expression "local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1" (binary_expression "local_28 ^ unaff_retaddr" identifier ^ identifier) ^ (binary_expression "(int)unaff_retaddr >> 1" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) & number_literal) ))) ;) })) (expression_statement "uVar6 = puVar5[1] * 2;" (assignment_expression "uVar6 = puVar5[1] * 2" identifier = (binary_expression "puVar5[1] * 2" (subscript_expression "puVar5[1]" identifier [ number_literal ]) * number_literal)) ;) }) (else_clause "else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" else (compound_statement "{\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" { (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" identifier = number_literal) ;) (for_statement "for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }" for ( (assignment_expression "uVar4 = uVar6" identifier = identifier) ; (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" identifier = (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n        bVar2 = bVar2 + 1;\n      }" { (expression_statement "bVar2 = bVar2 + 1;" (assignment_expression "bVar2 = bVar2 + 1" identifier = (binary_expression "bVar2 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar6 = uVar6 >> (bVar2 & 0x1f);" (assignment_expression "uVar6 = uVar6 >> (bVar2 & 0x1f)" identifier = (binary_expression "uVar6 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) })))) }))) (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" identifier = (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (expression_statement "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);" (assignment_expression "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" identifier = (binary_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" (parenthesized_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f)" ( (binary_expression "unaff_retaddr ^ (int)unaff_retaddr >> 0x1f" identifier ^ (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)unaff_retaddr >> 0x1f)" ( (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (labeled_statement "joined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" statement_identifier : (if_statement "if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" if (parenthesized_expression "(unaff_retaddr != 1)" ( (binary_expression "unaff_retaddr != 1" identifier != number_literal) )) (compound_statement "{\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" { (if_statement "if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(**(int **)(unaff_EBX + 0x6ce9f) == 0)" ( (binary_expression "**(int **)(unaff_EBX + 0x6ce9f) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x6ce9f)" * (pointer_expression "*(int **)(unaff_EBX + 0x6ce9f)" * (cast_expression "(int **)(unaff_EBX + 0x6ce9f)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EBX + 0x6ce9f)" ( (binary_expression "unaff_EBX + 0x6ce9f" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = *(int *)(unaff_EBX + 0x6cedb);" (assignment_expression "iVar1 = *(int *)(unaff_EBX + 0x6cedb)" identifier = (pointer_expression "*(int *)(unaff_EBX + 0x6cedb)" * (cast_expression "(int *)(unaff_EBX + 0x6cedb)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x6cedb)" ( (binary_expression "unaff_EBX + 0x6cedb" identifier + number_literal) ))))) ;) (if_statement "if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" if (parenthesized_expression "(iVar7 < *(int *)(iVar1 + 0xa4))" ( (binary_expression "iVar7 < *(int *)(iVar1 + 0xa4)" identifier < (pointer_expression "*(int *)(iVar1 + 0xa4)" * (cast_expression "(int *)(iVar1 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xa4)" ( (binary_expression "iVar1 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }" { (expression_statement "local_28 = local_28 ^ unaff_retaddr;" (assignment_expression "local_28 = local_28 ^ unaff_retaddr" identifier = (binary_expression "local_28 ^ unaff_retaddr" identifier ^ identifier)) ;) (expression_statement "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" identifier = (call_expression "(**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" (parenthesized_expression "(**(code **)(iVar1 + 0x60))" ( (pointer_expression "**(code **)(iVar1 + 0x60)" * (pointer_expression "*(code **)(iVar1 + 0x60)" * (cast_expression "(code **)(iVar1 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x60)" ( (binary_expression "iVar1 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar5,iVar7,unaff_retaddr,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" else (compound_statement "{\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" { (expression_statement "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" identifier = (call_expression "(**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" (parenthesized_expression "(**(code **)(iVar1 + 0x40))" ( (pointer_expression "**(code **)(iVar1 + 0x40)" * (pointer_expression "*(code **)(iVar1 + 0x40)" * (cast_expression "(code **)(iVar1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x40)" ( (binary_expression "iVar1 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar5,iVar7,unaff_retaddr)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);" (assignment_expression "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" identifier = (call_expression "__gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" identifier (argument_list "(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" ( identifier , identifier , (binary_expression "uVar6 & unaff_retaddr ^ local_28" (binary_expression "uVar6 & unaff_retaddr" identifier & identifier) ^ identifier) )))) ;) (return_statement "return uVar4;" return identifier ;) }))) (return_statement "return 1 - (local_28 & 2);" return (binary_expression "1 - (local_28 & 2)" number_literal - (parenthesized_expression "(local_28 & 2)" ( (binary_expression "local_28 & 2" identifier & number_literal) ))) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nint __gmpz_si_kronecker(long a,mpz_srcptr b)\n\n{\n  uint uVar1;\n  byte bVar2;\n  int iVar3;\n  mp_limb_t a_00;\n  uint *puVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_24;\n  \n  uVar1 = b->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)((a + 1U & 0xfffffffd) == 0);\n  }\n  puVar4 = b->_mp_d;\n  uVar5 = *puVar4;\n  iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n  local_24 = ((int)(uVar1 & a) >> 0x1f) * -2;\n  if ((uVar5 & 1) != 0) {\n    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n    if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }\n    iVar3 = 0;\n    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }\n    a = (uint)a >> ((byte)iVar3 & 0x1f);\n    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);\n    goto joined_r0x0002c00f;\n  }\n  if ((a & 1U) == 0) {\n    return 0;\n  }\n  if (uVar5 == 0) {\n    do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);\n    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }\n  local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n  a = (a ^ a >> 0x1f) - (a >> 0x1f);\njoined_r0x0002c00f:\n  if (a != 1) {\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }\n  return 1 - (local_24 & 2);\n}\n\n" comment comment (function_definition "int __gmpz_si_kronecker(long a,mpz_srcptr b)\n\n{\n  uint uVar1;\n  byte bVar2;\n  int iVar3;\n  mp_limb_t a_00;\n  uint *puVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_24;\n  \n  uVar1 = b->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)((a + 1U & 0xfffffffd) == 0);\n  }\n  puVar4 = b->_mp_d;\n  uVar5 = *puVar4;\n  iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n  local_24 = ((int)(uVar1 & a) >> 0x1f) * -2;\n  if ((uVar5 & 1) != 0) {\n    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n    if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }\n    iVar3 = 0;\n    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }\n    a = (uint)a >> ((byte)iVar3 & 0x1f);\n    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);\n    goto joined_r0x0002c00f;\n  }\n  if ((a & 1U) == 0) {\n    return 0;\n  }\n  if (uVar5 == 0) {\n    do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);\n    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }\n  local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n  a = (a ^ a >> 0x1f) - (a >> 0x1f);\njoined_r0x0002c00f:\n  if (a != 1) {\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }\n  return 1 - (local_24 & 2);\n}" primitive_type (function_declarator "__gmpz_si_kronecker(long a,mpz_srcptr b)" identifier (parameter_list "(long a,mpz_srcptr b)" ( (parameter_declaration "long a" (sized_type_specifier "long" long) identifier) , (parameter_declaration "mpz_srcptr b" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  byte bVar2;\n  int iVar3;\n  mp_limb_t a_00;\n  uint *puVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_24;\n  \n  uVar1 = b->_mp_size;\n  if (uVar1 == 0) {\n    return (uint)((a + 1U & 0xfffffffd) == 0);\n  }\n  puVar4 = b->_mp_d;\n  uVar5 = *puVar4;\n  iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);\n  local_24 = ((int)(uVar1 & a) >> 0x1f) * -2;\n  if ((uVar5 & 1) != 0) {\n    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n    if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }\n    iVar3 = 0;\n    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }\n    a = (uint)a >> ((byte)iVar3 & 0x1f);\n    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);\n    goto joined_r0x0002c00f;\n  }\n  if ((a & 1U) == 0) {\n    return 0;\n  }\n  if (uVar5 == 0) {\n    do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);\n    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }\n  local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n  a = (a ^ a >> 0x1f) - (a >> 0x1f);\njoined_r0x0002c00f:\n  if (a != 1) {\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }\n  return 1 - (local_24 & 2);\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "mp_limb_t a_00;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (expression_statement "uVar1 = b->_mp_size;" (assignment_expression "uVar1 = b->_mp_size" identifier = (field_expression "b->_mp_size" identifier -> field_identifier)) ;) (if_statement "if (uVar1 == 0) {\n    return (uint)((a + 1U & 0xfffffffd) == 0);\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)((a + 1U & 0xfffffffd) == 0);\n  }" { (return_statement "return (uint)((a + 1U & 0xfffffffd) == 0);" return (call_expression "(uint)((a + 1U & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((a + 1U & 0xfffffffd) == 0)" ( (binary_expression "(a + 1U & 0xfffffffd) == 0" (parenthesized_expression "(a + 1U & 0xfffffffd)" ( (binary_expression "a + 1U & 0xfffffffd" (binary_expression "a + 1U" identifier + number_literal) & number_literal) )) == number_literal) ))) ;) })) (expression_statement "puVar4 = b->_mp_d;" (assignment_expression "puVar4 = b->_mp_d" identifier = (field_expression "b->_mp_d" identifier -> field_identifier)) ;) (expression_statement "uVar5 = *puVar4;" (assignment_expression "uVar5 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f);" (assignment_expression "iVar6 = (uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" identifier = (binary_expression "(uVar1 ^ (int)uVar1 >> 0x1f) - ((int)uVar1 >> 0x1f)" (parenthesized_expression "(uVar1 ^ (int)uVar1 >> 0x1f)" ( (binary_expression "uVar1 ^ (int)uVar1 >> 0x1f" identifier ^ (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar1 >> 0x1f)" ( (binary_expression "(int)uVar1 >> 0x1f" (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "local_24 = ((int)(uVar1 & a) >> 0x1f) * -2;" (assignment_expression "local_24 = ((int)(uVar1 & a) >> 0x1f) * -2" identifier = (binary_expression "((int)(uVar1 & a) >> 0x1f) * -2" (parenthesized_expression "((int)(uVar1 & a) >> 0x1f)" ( (binary_expression "(int)(uVar1 & a) >> 0x1f" (cast_expression "(int)(uVar1 & a)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 & a)" ( (binary_expression "uVar1 & a" identifier & identifier) ))) >> number_literal) )) * number_literal)) ;) (if_statement "if ((uVar5 & 1) != 0) {\n    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n    if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }\n    iVar3 = 0;\n    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }\n    a = (uint)a >> ((byte)iVar3 & 0x1f);\n    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);\n    goto joined_r0x0002c00f;\n  }" if (parenthesized_expression "((uVar5 & 1) != 0)" ( (binary_expression "(uVar5 & 1) != 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;\n    if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }\n    iVar3 = 0;\n    for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }\n    a = (uint)a >> ((byte)iVar3 & 0x1f);\n    local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);\n    goto joined_r0x0002c00f;\n  }" { (expression_statement "local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;" (assignment_expression "local_24 = a >> 0x1e & uVar5 & 2 ^ local_24" identifier = (binary_expression "a >> 0x1e & uVar5 & 2 ^ local_24" (binary_expression "a >> 0x1e & uVar5 & 2" (binary_expression "a >> 0x1e & uVar5" (binary_expression "a >> 0x1e" identifier >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (if_statement "if (a < 0) {\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }" if (parenthesized_expression "(a < 0)" ( (binary_expression "a < 0" identifier < number_literal) )) (compound_statement "{\n      a = -a;\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n    }" { (expression_statement "a = -a;" (assignment_expression "a = -a" identifier = (unary_expression "-a" - identifier)) ;) (if_statement "if ((a & 1U) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((a & 1U) != 0)" ( (binary_expression "(a & 1U) != 0" (parenthesized_expression "(a & 1U)" ( (binary_expression "a & 1U" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) }) (else_clause "else {\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }" else (compound_statement "{\n      if ((a & 1U) != 0) goto joined_r0x0002c00f;\n      if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }\n    }" { (if_statement "if ((a & 1U) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((a & 1U) != 0)" ( (binary_expression "(a & 1U) != 0" (parenthesized_expression "(a & 1U)" ( (binary_expression "a & 1U" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) (if_statement "if (a == 0) {\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }" if (parenthesized_expression "(a == 0)" ( (binary_expression "a == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint)(uVar5 == 1 && iVar6 == 1);\n      }" { (return_statement "return (uint)(uVar5 == 1 && iVar6 == 1);" return (call_expression "(uint)(uVar5 == 1 && iVar6 == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 == 1 && iVar6 == 1)" ( (binary_expression "uVar5 == 1 && iVar6 == 1" (binary_expression "uVar5 == 1" identifier == number_literal) && (binary_expression "iVar6 == 1" identifier == number_literal)) ))) ;) })) }))) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (for_statement "for (uVar1 = a; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n      iVar3 = iVar3 + 1;\n    }" for ( (assignment_expression "uVar1 = a" identifier = identifier) ; (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar1 = uVar1 >> 1 | 0x80000000" identifier = (binary_expression "uVar1 >> 1 | 0x80000000" (binary_expression "uVar1 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar3 = iVar3 + 1;\n    }" { (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "a = (uint)a >> ((byte)iVar3 & 0x1f);" (assignment_expression "a = (uint)a >> ((byte)iVar3 & 0x1f)" identifier = (binary_expression "(uint)a >> ((byte)iVar3 & 0x1f)" (cast_expression "(uint)a" ( (type_descriptor "uint" type_identifier) ) identifier) >> (parenthesized_expression "((byte)iVar3 & 0x1f)" ( (binary_expression "(byte)iVar3 & 0x1f" (cast_expression "(byte)iVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5);" (assignment_expression "local_24 = local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5)" identifier = (binary_expression "local_24 ^ iVar3 * 2 & (uVar5 >> 1 ^ uVar5)" identifier ^ (binary_expression "iVar3 * 2 & (uVar5 >> 1 ^ uVar5)" (binary_expression "iVar3 * 2" identifier * number_literal) & (parenthesized_expression "(uVar5 >> 1 ^ uVar5)" ( (binary_expression "uVar5 >> 1 ^ uVar5" (binary_expression "uVar5 >> 1" identifier >> number_literal) ^ identifier) ))))) ;) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;) })) (if_statement "if ((a & 1U) == 0) {\n    return 0;\n  }" if (parenthesized_expression "((a & 1U) == 0)" ( (binary_expression "(a & 1U) == 0" (parenthesized_expression "(a & 1U)" ( (binary_expression "a & 1U" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar5 == 0) {\n    do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);\n    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);\n    if ((uVar5 & 1) == 0) goto LAB_0002bf0b;\n  }" { (do_statement "do {\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    } while (uVar5 == 0);" do (compound_statement "{\n      puVar4 = puVar4 + 1;\n      uVar5 = *puVar4;\n      iVar6 = iVar6 + -1;\n    }" { (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = *puVar4;" (assignment_expression "uVar5 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) ;) (if_statement "if ((uVar5 & 1) == 0) goto LAB_0002bf0b;" if (parenthesized_expression "((uVar5 & 1) == 0)" ( (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0002bf0b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }" else (compound_statement "{\nLAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }\n  }" { (labeled_statement "LAB_0002bf0b:\n    if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }" statement_identifier : (if_statement "if (uVar5 == 0x80000000) {\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }" if (parenthesized_expression "(uVar5 == 0x80000000)" ( (binary_expression "uVar5 == 0x80000000" identifier == number_literal) )) (compound_statement "{\n      if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }\n      uVar5 = puVar4[1] * 2;\n    }" { (if_statement "if (iVar6 == 1) {\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }" if (parenthesized_expression "(iVar6 == 1)" ( (binary_expression "iVar6 == 1" identifier == number_literal) )) (compound_statement "{\n        return 1 - ((local_24 ^ a ^ a >> 1) & 2);\n      }" { (return_statement "return 1 - ((local_24 ^ a ^ a >> 1) & 2);" return (binary_expression "1 - ((local_24 ^ a ^ a >> 1) & 2)" number_literal - (parenthesized_expression "((local_24 ^ a ^ a >> 1) & 2)" ( (binary_expression "(local_24 ^ a ^ a >> 1) & 2" (parenthesized_expression "(local_24 ^ a ^ a >> 1)" ( (binary_expression "local_24 ^ a ^ a >> 1" (binary_expression "local_24 ^ a" identifier ^ identifier) ^ (binary_expression "a >> 1" identifier >> number_literal)) )) & number_literal) ))) ;) })) (expression_statement "uVar5 = puVar4[1] * 2;" (assignment_expression "uVar5 = puVar4[1] * 2" identifier = (binary_expression "puVar4[1] * 2" (subscript_expression "puVar4[1]" identifier [ number_literal ]) * number_literal)) ;) }) (else_clause "else {\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }" else (compound_statement "{\n      bVar2 = 0;\n      for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar5 = uVar5 >> (bVar2 & 0x1f);\n    }" { (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" identifier = number_literal) ;) (for_statement "for (uVar1 = uVar5; (uVar1 & 1) == 0; uVar1 = uVar1 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }" for ( (assignment_expression "uVar1 = uVar5" identifier = identifier) ; (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar1 = uVar1 >> 1 | 0x80000000" identifier = (binary_expression "uVar1 >> 1 | 0x80000000" (binary_expression "uVar1 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n        bVar2 = bVar2 + 1;\n      }" { (expression_statement "bVar2 = bVar2 + 1;" (assignment_expression "bVar2 = bVar2 + 1" identifier = (binary_expression "bVar2 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar5 = uVar5 >> (bVar2 & 0x1f);" (assignment_expression "uVar5 = uVar5 >> (bVar2 & 0x1f)" identifier = (binary_expression "uVar5 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) })))) }))) (expression_statement "local_24 = a >> 0x1e & uVar5 & 2 ^ local_24;" (assignment_expression "local_24 = a >> 0x1e & uVar5 & 2 ^ local_24" identifier = (binary_expression "a >> 0x1e & uVar5 & 2 ^ local_24" (binary_expression "a >> 0x1e & uVar5 & 2" (binary_expression "a >> 0x1e & uVar5" (binary_expression "a >> 0x1e" identifier >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (expression_statement "a = (a ^ a >> 0x1f) - (a >> 0x1f);" (assignment_expression "a = (a ^ a >> 0x1f) - (a >> 0x1f)" identifier = (binary_expression "(a ^ a >> 0x1f) - (a >> 0x1f)" (parenthesized_expression "(a ^ a >> 0x1f)" ( (binary_expression "a ^ a >> 0x1f" identifier ^ (binary_expression "a >> 0x1f" identifier >> number_literal)) )) - (parenthesized_expression "(a >> 0x1f)" ( (binary_expression "a >> 0x1f" identifier >> number_literal) )))) ;) (labeled_statement "joined_r0x0002c00f:\n  if (a != 1) {\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }" statement_identifier : (if_statement "if (a != 1) {\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }" if (parenthesized_expression "(a != 1)" ( (binary_expression "a != 1" identifier != number_literal) )) (compound_statement "{\n    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }\n    if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }\n    iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);\n    return iVar6;\n  }" { (if_statement "if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0)" ( (binary_expression "*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0" (pointer_expression "*(int *)PTR___gmpn_cpuvec_initialized_00098d58" * (cast_expression "(int *)PTR___gmpn_cpuvec_initialized_00098d58" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if (iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)) {\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }\n    else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }" if (parenthesized_expression "(iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4))" ( (binary_expression "iVar6 < *(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)" identifier < (pointer_expression "*(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)" * (cast_expression "(int *)(PTR___gmpn_cpuvec_00098d94 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0xa4)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      local_24 = local_24 ^ a;\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);\n    }" { (expression_statement "local_24 = local_24 ^ a;" (assignment_expression "local_24 = local_24 ^ a" identifier = (binary_expression "local_24 ^ a" identifier ^ identifier)) ;) (expression_statement "a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0);" (assignment_expression "a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))(puVar4,iVar6,a,0)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x60)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar4,iVar6,a,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }" else (compound_statement "{\n      a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);\n    }" { (expression_statement "a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a);" (assignment_expression "a_00 = (**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a)" identifier = (call_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))(puVar4,iVar6,a)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_00098d94 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_00098d94 + 0x40)" ( (binary_expression "PTR___gmpn_cpuvec_00098d94 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar4,iVar6,a)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24);" (assignment_expression "iVar6 = __gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24)" identifier = (call_expression "__gmpn_jacobi_base(a_00,a,uVar5 & a ^ local_24)" identifier (argument_list "(a_00,a,uVar5 & a ^ local_24)" ( identifier , identifier , (binary_expression "uVar5 & a ^ local_24" (binary_expression "uVar5 & a" identifier & identifier) ^ identifier) )))) ;) (return_statement "return iVar6;" return identifier ;) }))) (return_statement "return 1 - (local_24 & 2);" return (binary_expression "1 - (local_24 & 2)" number_literal - (parenthesized_expression "(local_24 & 2)" ( (binary_expression "local_24 & 2" identifier & number_literal) ))) ;) })))
(translation_unit "uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}\n\n" (function_definition "uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" type_identifier (ERROR "__regparm2" identifier) (function_declarator "__gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint unaff_retaddr;" type_identifier identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (expression_statement "entry(param_2,0x2beb9);" (call_expression "entry(param_2,0x2beb9)" identifier (argument_list "(param_2,0x2beb9)" ( identifier , number_literal ))) ;) (expression_statement "uVar4 = *(uint *)(param_3 + 4);" (assignment_expression "uVar4 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" { (return_statement "return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);" return (call_expression "(uint)((unaff_retaddr + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((unaff_retaddr + 1 & 0xfffffffd) == 0)" ( (binary_expression "(unaff_retaddr + 1 & 0xfffffffd) == 0" (parenthesized_expression "(unaff_retaddr + 1 & 0xfffffffd)" ( (binary_expression "unaff_retaddr + 1 & 0xfffffffd" (binary_expression "unaff_retaddr + 1" identifier + number_literal) & number_literal) )) == number_literal) ))) ;) })) (expression_statement "puVar5 = *(uint **)(param_3 + 8);" (assignment_expression "puVar5 = *(uint **)(param_3 + 8)" identifier = (pointer_expression "*(uint **)(param_3 + 8)" * (cast_expression "(uint **)(param_3 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" identifier = (binary_expression "(uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" (parenthesized_expression "(uVar4 ^ (int)uVar4 >> 0x1f)" ( (binary_expression "uVar4 ^ (int)uVar4 >> 0x1f" identifier ^ (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)uVar4 >> 0x1f)" ( (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;" (assignment_expression "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" identifier = (binary_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" (parenthesized_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f)" ( (binary_expression "(int)(uVar4 & unaff_retaddr) >> 0x1f" (cast_expression "(int)(uVar4 & unaff_retaddr)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar4 & unaff_retaddr)" ( (binary_expression "uVar4 & unaff_retaddr" identifier & identifier) ))) >> number_literal) )) * number_literal)) ;) (if_statement "if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" if (parenthesized_expression "((uVar6 & 1) != 0)" ( (binary_expression "(uVar6 & 1) != 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" { (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" identifier = (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (if_statement "if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" if (parenthesized_expression "((int)unaff_retaddr < 0)" ( (binary_expression "(int)unaff_retaddr < 0" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }" { (expression_statement "unaff_retaddr = -unaff_retaddr;" (assignment_expression "unaff_retaddr = -unaff_retaddr" identifier = (unary_expression "-unaff_retaddr" - identifier)) ;) (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((unaff_retaddr & 1) != 0)" ( (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) }) (else_clause "else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" else (compound_statement "{\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" { (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" if (parenthesized_expression "((unaff_retaddr & 1) != 0)" ( (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) != number_literal) )) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;)) (if_statement "if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" if (parenthesized_expression "(unaff_retaddr == 0)" ( (binary_expression "unaff_retaddr == 0" identifier == number_literal) )) (compound_statement "{\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" { (return_statement "return (uint)(uVar6 == 1 && iVar7 == 1);" return (call_expression "(uint)(uVar6 == 1 && iVar7 == 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 == 1 && iVar7 == 1)" ( (binary_expression "uVar6 == 1 && iVar7 == 1" (binary_expression "uVar6 == 1" identifier == number_literal) && (binary_expression "iVar7 == 1" identifier == number_literal)) ))) ;) })) }))) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" identifier = number_literal) ;) (for_statement "for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }" for ( (assignment_expression "uVar4 = unaff_retaddr" identifier = identifier) ; (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" identifier = (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar1 = iVar1 + 1;\n    }" { (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) })) (expression_statement "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);" (assignment_expression "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f)" identifier = (binary_expression "unaff_retaddr >> ((byte)iVar1 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar1 & 0x1f)" ( (binary_expression "(byte)iVar1 & 0x1f" (cast_expression "(byte)iVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);" (assignment_expression "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" identifier = (binary_expression "local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" identifier ^ (binary_expression "iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" (binary_expression "iVar1 * 2" identifier * number_literal) & (parenthesized_expression "(uVar6 >> 1 ^ uVar6)" ( (binary_expression "uVar6 >> 1 ^ uVar6" (binary_expression "uVar6 >> 1" identifier >> number_literal) ^ identifier) ))))) ;) (goto_statement "goto joined_r0x0002c00f;" goto statement_identifier ;) })) (if_statement "if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }" if (parenthesized_expression "((unaff_retaddr & 1) == 0)" ( (binary_expression "(unaff_retaddr & 1) == 0" (parenthesized_expression "(unaff_retaddr & 1)" ( (binary_expression "unaff_retaddr & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }" { (do_statement "do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);" do (compound_statement "{\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    }" { (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) ;) (if_statement "if ((uVar6 & 1) == 0) goto LAB_0002bf0b;" if (parenthesized_expression "((uVar6 & 1) == 0)" ( (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" ( (binary_expression "uVar6 & 1" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_0002bf0b;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" else (compound_statement "{\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" { (labeled_statement "LAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" statement_identifier : (if_statement "if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" if (parenthesized_expression "(uVar6 == 0x80000000)" ( (binary_expression "uVar6 == 0x80000000" identifier == number_literal) )) (compound_statement "{\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }" { (if_statement "if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (compound_statement "{\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" { (return_statement "return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);" return (binary_expression "1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" number_literal - (parenthesized_expression "((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" ( (binary_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2" (parenthesized_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1)" ( (binary_expression "local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1" (binary_expression "local_28 ^ unaff_retaddr" identifier ^ identifier) ^ (binary_expression "(int)unaff_retaddr >> 1" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) & number_literal) ))) ;) })) (expression_statement "uVar6 = puVar5[1] * 2;" (assignment_expression "uVar6 = puVar5[1] * 2" identifier = (binary_expression "puVar5[1] * 2" (subscript_expression "puVar5[1]" identifier [ number_literal ]) * number_literal)) ;) }) (else_clause "else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" else (compound_statement "{\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" { (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" identifier = number_literal) ;) (for_statement "for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }" for ( (assignment_expression "uVar4 = uVar6" identifier = identifier) ; (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" identifier = (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n        bVar2 = bVar2 + 1;\n      }" { (expression_statement "bVar2 = bVar2 + 1;" (assignment_expression "bVar2 = bVar2 + 1" identifier = (binary_expression "bVar2 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar6 = uVar6 >> (bVar2 & 0x1f);" (assignment_expression "uVar6 = uVar6 >> (bVar2 & 0x1f)" identifier = (binary_expression "uVar6 >> (bVar2 & 0x1f)" identifier >> (parenthesized_expression "(bVar2 & 0x1f)" ( (binary_expression "bVar2 & 0x1f" identifier & number_literal) )))) ;) })))) }))) (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" identifier = (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) & identifier) & number_literal) ^ identifier)) ;) (expression_statement "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);" (assignment_expression "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" identifier = (binary_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" (parenthesized_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f)" ( (binary_expression "unaff_retaddr ^ (int)unaff_retaddr >> 0x1f" identifier ^ (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) )) - (parenthesized_expression "((int)unaff_retaddr >> 0x1f)" ( (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (labeled_statement "joined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" statement_identifier : (if_statement "if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" if (parenthesized_expression "(unaff_retaddr != 1)" ( (binary_expression "unaff_retaddr != 1" identifier != number_literal) )) (compound_statement "{\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" { (if_statement "if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }" if (parenthesized_expression "(**(int **)(unaff_EBX + 0x6ce9f) == 0)" ( (binary_expression "**(int **)(unaff_EBX + 0x6ce9f) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x6ce9f)" * (pointer_expression "*(int **)(unaff_EBX + 0x6ce9f)" * (cast_expression "(int **)(unaff_EBX + 0x6ce9f)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(unaff_EBX + 0x6ce9f)" ( (binary_expression "unaff_EBX + 0x6ce9f" identifier + number_literal) ))))) == number_literal) )) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" { (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = *(int *)(unaff_EBX + 0x6cedb);" (assignment_expression "iVar1 = *(int *)(unaff_EBX + 0x6cedb)" identifier = (pointer_expression "*(int *)(unaff_EBX + 0x6cedb)" * (cast_expression "(int *)(unaff_EBX + 0x6cedb)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x6cedb)" ( (binary_expression "unaff_EBX + 0x6cedb" identifier + number_literal) ))))) ;) (if_statement "if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" if (parenthesized_expression "(iVar7 < *(int *)(iVar1 + 0xa4))" ( (binary_expression "iVar7 < *(int *)(iVar1 + 0xa4)" identifier < (pointer_expression "*(int *)(iVar1 + 0xa4)" * (cast_expression "(int *)(iVar1 + 0xa4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xa4)" ( (binary_expression "iVar1 + 0xa4" identifier + number_literal) ))))) )) (compound_statement "{\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }" { (expression_statement "local_28 = local_28 ^ unaff_retaddr;" (assignment_expression "local_28 = local_28 ^ unaff_retaddr" identifier = (binary_expression "local_28 ^ unaff_retaddr" identifier ^ identifier)) ;) (expression_statement "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" identifier = (call_expression "(**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" (parenthesized_expression "(**(code **)(iVar1 + 0x60))" ( (pointer_expression "**(code **)(iVar1 + 0x60)" * (pointer_expression "*(code **)(iVar1 + 0x60)" * (cast_expression "(code **)(iVar1 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x60)" ( (binary_expression "iVar1 + 0x60" identifier + number_literal) ))))) )) (argument_list "(puVar5,iVar7,unaff_retaddr,0)" ( identifier , identifier , identifier , number_literal )))) ;) }) (else_clause "else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" else (compound_statement "{\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" { (expression_statement "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" identifier = (call_expression "(**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" (parenthesized_expression "(**(code **)(iVar1 + 0x40))" ( (pointer_expression "**(code **)(iVar1 + 0x40)" * (pointer_expression "*(code **)(iVar1 + 0x40)" * (cast_expression "(code **)(iVar1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x40)" ( (binary_expression "iVar1 + 0x40" identifier + number_literal) ))))) )) (argument_list "(puVar5,iVar7,unaff_retaddr)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);" (assignment_expression "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" identifier = (call_expression "__gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" identifier (argument_list "(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" ( identifier , identifier , (binary_expression "uVar6 & unaff_retaddr ^ local_28" (binary_expression "uVar6 & unaff_retaddr" identifier & identifier) ^ identifier) )))) ;) (return_statement "return uVar4;" return identifier ;) }))) (return_statement "return 1 - (local_28 & 2);" return (binary_expression "1 - (local_28 & 2)" number_literal - (parenthesized_expression "(local_28 & 2)" ( (binary_expression "local_28 & 2" identifier & number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )) == LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT & IDENT) ))) >> LIT) )) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) & IDENT) & LIT) ^ IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT == LIT)) ))) ;) })) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (for_statement for ( (assignment_expression IDENT = IDENT) ; (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) | LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (binary_expression (binary_expression IDENT * LIT) & (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) ^ IDENT) ))))) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return (binary_expression LIT - (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT ^ IDENT) ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) & LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (for_statement for ( (assignment_expression IDENT = IDENT) ; (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) | LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) })))) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) & IDENT) & LIT) ^ IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT , LIT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (binary_expression IDENT & IDENT) ^ IDENT) )))) ;) (return_statement return IDENT ;) }))) (return_statement return (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ;) })))
(function_definition "uint __regparm2 __gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" (type_identifier "uint") (ERROR "__regparm2" (identifier "__regparm2")) (function_declarator "__gmpz_si_kronecker(undefined4 param_1,undefined4 param_2,int param_3)" (identifier "__gmpz_si_kronecker") (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  undefined4 uVar3;\n  uint uVar4;\n  uint *puVar5;\n  int unaff_EBX;\n  uint uVar6;\n  int iVar7;\n  uint unaff_retaddr;\n  uint local_28;\n  \n  entry(param_2,0x2beb9);\n  uVar4 = *(uint *)(param_3 + 4);\n  if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }\n  puVar5 = *(uint **)(param_3 + 8);\n  uVar6 = *puVar5;\n  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);\n  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;\n  if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }\n  if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }\n  if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }\n  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);\njoined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }\n  return 1 - (local_28 & 2);\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int unaff_EBX;" (primitive_type "int") (identifier "unaff_EBX") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint unaff_retaddr;" (type_identifier "uint") (identifier "unaff_retaddr") (; ";")) (declaration "uint local_28;" (type_identifier "uint") (identifier "local_28") (; ";")) (expression_statement "entry(param_2,0x2beb9);" (call_expression "entry(param_2,0x2beb9)" (identifier "entry") (argument_list "(param_2,0x2beb9)" (( "(") (identifier "param_2") (, ",") (number_literal "0x2beb9") () ")"))) (; ";")) (expression_statement "uVar4 = *(uint *)(param_3 + 4);" (assignment_expression "uVar4 = *(uint *)(param_3 + 4)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_3 + 4)" (* "*") (cast_expression "(uint *)(param_3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (uVar4 == 0) {\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);\n  }" ({ "{") (return_statement "return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);" (return "return") (call_expression "(uint)((unaff_retaddr + 1 & 0xfffffffd) == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((unaff_retaddr + 1 & 0xfffffffd) == 0)" (( "(") (binary_expression "(unaff_retaddr + 1 & 0xfffffffd) == 0" (parenthesized_expression "(unaff_retaddr + 1 & 0xfffffffd)" (( "(") (binary_expression "unaff_retaddr + 1 & 0xfffffffd" (binary_expression "unaff_retaddr + 1" (identifier "unaff_retaddr") (+ "+") (number_literal "1")) (& "&") (number_literal "0xfffffffd")) () ")")) (== "==") (number_literal "0")) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar5 = *(uint **)(param_3 + 8);" (assignment_expression "puVar5 = *(uint **)(param_3 + 8)" (identifier "puVar5") (= "=") (pointer_expression "*(uint **)(param_3 + 8)" (* "*") (cast_expression "(uint **)(param_3 + 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" (identifier "uVar6") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);" (assignment_expression "iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" (identifier "iVar7") (= "=") (binary_expression "(uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f)" (parenthesized_expression "(uVar4 ^ (int)uVar4 >> 0x1f)" (( "(") (binary_expression "uVar4 ^ (int)uVar4 >> 0x1f" (identifier "uVar4") (^ "^") (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)uVar4 >> 0x1f)" (( "(") (binary_expression "(int)uVar4 >> 0x1f" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;" (assignment_expression "local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" (identifier "local_28") (= "=") (binary_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2" (parenthesized_expression "((int)(uVar4 & unaff_retaddr) >> 0x1f)" (( "(") (binary_expression "(int)(uVar4 & unaff_retaddr) >> 0x1f" (cast_expression "(int)(uVar4 & unaff_retaddr)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar4 & unaff_retaddr)" (( "(") (binary_expression "uVar4 & unaff_retaddr" (identifier "uVar4") (& "&") (identifier "unaff_retaddr")) () ")"))) (>> ">>") (number_literal "0x1f")) () ")")) (* "*") (number_literal "-2"))) (; ";")) (if_statement "if ((uVar6 & 1) != 0) {\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" (if "if") (parenthesized_expression "((uVar6 & 1) != 0)" (( "(") (binary_expression "(uVar6 & 1) != 0" (parenthesized_expression "(uVar6 & 1)" (( "(") (binary_expression "uVar6 & 1" (identifier "uVar6") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;\n    if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }\n    iVar1 = 0;\n    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }\n    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);\n    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);\n    goto joined_r0x0002c00f;\n  }" ({ "{") (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (identifier "local_28") (= "=") (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (>> ">>") (number_literal "0x1e")) (& "&") (identifier "uVar6")) (& "&") (number_literal "2")) (^ "^") (identifier "local_28"))) (; ";")) (if_statement "if ((int)unaff_retaddr < 0) {\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }\n    else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" (if "if") (parenthesized_expression "((int)unaff_retaddr < 0)" (( "(") (binary_expression "(int)unaff_retaddr < 0" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      unaff_retaddr = -unaff_retaddr;\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n    }" ({ "{") (expression_statement "unaff_retaddr = -unaff_retaddr;" (assignment_expression "unaff_retaddr = -unaff_retaddr" (identifier "unaff_retaddr") (= "=") (unary_expression "-unaff_retaddr" (- "-") (identifier "unaff_retaddr"))) (; ";")) (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" (if "if") (parenthesized_expression "((unaff_retaddr & 1) != 0)" (( "(") (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" (( "(") (binary_expression "unaff_retaddr & 1" (identifier "unaff_retaddr") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto joined_r0x0002c00f;" (goto "goto") (statement_identifier "joined_r0x0002c00f") (; ";"))) (} "}")) (else_clause "else {\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" (else "else") (compound_statement "{\n      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;\n      if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }\n    }" ({ "{") (if_statement "if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;" (if "if") (parenthesized_expression "((unaff_retaddr & 1) != 0)" (( "(") (binary_expression "(unaff_retaddr & 1) != 0" (parenthesized_expression "(unaff_retaddr & 1)" (( "(") (binary_expression "unaff_retaddr & 1" (identifier "unaff_retaddr") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto joined_r0x0002c00f;" (goto "goto") (statement_identifier "joined_r0x0002c00f") (; ";"))) (if_statement "if (unaff_retaddr == 0) {\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" (if "if") (parenthesized_expression "(unaff_retaddr == 0)" (( "(") (binary_expression "unaff_retaddr == 0" (identifier "unaff_retaddr") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return (uint)(uVar6 == 1 && iVar7 == 1);\n      }" ({ "{") (return_statement "return (uint)(uVar6 == 1 && iVar7 == 1);" (return "return") (call_expression "(uint)(uVar6 == 1 && iVar7 == 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 == 1 && iVar7 == 1)" (( "(") (binary_expression "uVar6 == 1 && iVar7 == 1" (binary_expression "uVar6 == 1" (identifier "uVar6") (== "==") (number_literal "1")) (&& "&&") (binary_expression "iVar7 == 1" (identifier "iVar7") (== "==") (number_literal "1"))) () ")"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar1 = 0;" (assignment_expression "iVar1 = 0" (identifier "iVar1") (= "=") (number_literal "0")) (; ";")) (for_statement "for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n      iVar1 = iVar1 + 1;\n    }" (for "for") (( "(") (assignment_expression "uVar4 = unaff_retaddr" (identifier "uVar4") (= "=") (identifier "unaff_retaddr")) (; ";") (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" (identifier "uVar4") (= "=") (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" (identifier "uVar4") (>> ">>") (number_literal "1")) (| "|") (number_literal "0x80000000"))) () ")") (compound_statement "{\n      iVar1 = iVar1 + 1;\n    }" ({ "{") (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + 1" (identifier "iVar1") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);" (assignment_expression "unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f)" (identifier "unaff_retaddr") (= "=") (binary_expression "unaff_retaddr >> ((byte)iVar1 & 0x1f)" (identifier "unaff_retaddr") (>> ">>") (parenthesized_expression "((byte)iVar1 & 0x1f)" (( "(") (binary_expression "(byte)iVar1 & 0x1f" (cast_expression "(byte)iVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar1")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);" (assignment_expression "local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" (identifier "local_28") (= "=") (binary_expression "local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" (identifier "local_28") (^ "^") (binary_expression "iVar1 * 2 & (uVar6 >> 1 ^ uVar6)" (binary_expression "iVar1 * 2" (identifier "iVar1") (* "*") (number_literal "2")) (& "&") (parenthesized_expression "(uVar6 >> 1 ^ uVar6)" (( "(") (binary_expression "uVar6 >> 1 ^ uVar6" (binary_expression "uVar6 >> 1" (identifier "uVar6") (>> ">>") (number_literal "1")) (^ "^") (identifier "uVar6")) () ")"))))) (; ";")) (goto_statement "goto joined_r0x0002c00f;" (goto "goto") (statement_identifier "joined_r0x0002c00f") (; ";")) (} "}"))) (if_statement "if ((unaff_retaddr & 1) == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((unaff_retaddr & 1) == 0)" (( "(") (binary_expression "(unaff_retaddr & 1) == 0" (parenthesized_expression "(unaff_retaddr & 1)" (( "(") (binary_expression "unaff_retaddr & 1" (identifier "unaff_retaddr") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (uVar6 == 0) {\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }\n  else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);\n    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;\n  }" ({ "{") (do_statement "do {\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    } while (uVar6 == 0);" (do "do") (compound_statement "{\n      puVar5 = puVar5 + 1;\n      uVar6 = *puVar5;\n      iVar7 = iVar7 + -1;\n    }" ({ "{") (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar6 = *puVar5;" (assignment_expression "uVar6 = *puVar5" (identifier "uVar6") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (; ";")) (if_statement "if ((uVar6 & 1) == 0) goto LAB_0002bf0b;" (if "if") (parenthesized_expression "((uVar6 & 1) == 0)" (( "(") (binary_expression "(uVar6 & 1) == 0" (parenthesized_expression "(uVar6 & 1)" (( "(") (binary_expression "uVar6 & 1" (identifier "uVar6") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0002bf0b;" (goto "goto") (statement_identifier "LAB_0002bf0b") (; ";"))) (} "}")) (else_clause "else {\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" (else "else") (compound_statement "{\nLAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }\n  }" ({ "{") (labeled_statement "LAB_0002bf0b:\n    if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" (statement_identifier "LAB_0002bf0b") (: ":") (if_statement "if (uVar6 == 0x80000000) {\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }\n    else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" (if "if") (parenthesized_expression "(uVar6 == 0x80000000)" (( "(") (binary_expression "uVar6 == 0x80000000" (identifier "uVar6") (== "==") (number_literal "0x80000000")) () ")")) (compound_statement "{\n      if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }\n      uVar6 = puVar5[1] * 2;\n    }" ({ "{") (if_statement "if (iVar7 == 1) {\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" (if "if") (parenthesized_expression "(iVar7 == 1)" (( "(") (binary_expression "iVar7 == 1" (identifier "iVar7") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);\n      }" ({ "{") (return_statement "return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);" (return "return") (binary_expression "1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" (number_literal "1") (- "-") (parenthesized_expression "((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2)" (( "(") (binary_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2" (parenthesized_expression "(local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1)" (( "(") (binary_expression "local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1" (binary_expression "local_28 ^ unaff_retaddr" (identifier "local_28") (^ "^") (identifier "unaff_retaddr")) (^ "^") (binary_expression "(int)unaff_retaddr >> 1" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (>> ">>") (number_literal "1"))) () ")")) (& "&") (number_literal "2")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = puVar5[1] * 2;" (assignment_expression "uVar6 = puVar5[1] * 2" (identifier "uVar6") (= "=") (binary_expression "puVar5[1] * 2" (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) (* "*") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else {\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" (else "else") (compound_statement "{\n      bVar2 = 0;\n      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }\n      uVar6 = uVar6 >> (bVar2 & 0x1f);\n    }" ({ "{") (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" (identifier "bVar2") (= "=") (number_literal "0")) (; ";")) (for_statement "for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {\n        bVar2 = bVar2 + 1;\n      }" (for "for") (( "(") (assignment_expression "uVar4 = uVar6" (identifier "uVar4") (= "=") (identifier "uVar6")) (; ";") (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar4 = uVar4 >> 1 | 0x80000000" (identifier "uVar4") (= "=") (binary_expression "uVar4 >> 1 | 0x80000000" (binary_expression "uVar4 >> 1" (identifier "uVar4") (>> ">>") (number_literal "1")) (| "|") (number_literal "0x80000000"))) () ")") (compound_statement "{\n        bVar2 = bVar2 + 1;\n      }" ({ "{") (expression_statement "bVar2 = bVar2 + 1;" (assignment_expression "bVar2 = bVar2 + 1" (identifier "bVar2") (= "=") (binary_expression "bVar2 + 1" (identifier "bVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "uVar6 = uVar6 >> (bVar2 & 0x1f);" (assignment_expression "uVar6 = uVar6 >> (bVar2 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "uVar6 >> (bVar2 & 0x1f)" (identifier "uVar6") (>> ">>") (parenthesized_expression "(bVar2 & 0x1f)" (( "(") (binary_expression "bVar2 & 0x1f" (identifier "bVar2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}"))))) (} "}")))) (expression_statement "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;" (assignment_expression "local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (identifier "local_28") (= "=") (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6 & 2" (binary_expression "(int)unaff_retaddr >> 0x1e & uVar6" (binary_expression "(int)unaff_retaddr >> 0x1e" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (>> ">>") (number_literal "0x1e")) (& "&") (identifier "uVar6")) (& "&") (number_literal "2")) (^ "^") (identifier "local_28"))) (; ";")) (expression_statement "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);" (assignment_expression "unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" (identifier "unaff_retaddr") (= "=") (binary_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f)" (parenthesized_expression "(unaff_retaddr ^ (int)unaff_retaddr >> 0x1f)" (( "(") (binary_expression "unaff_retaddr ^ (int)unaff_retaddr >> 0x1f" (identifier "unaff_retaddr") (^ "^") (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (>> ">>") (number_literal "0x1f"))) () ")")) (- "-") (parenthesized_expression "((int)unaff_retaddr >> 0x1f)" (( "(") (binary_expression "(int)unaff_retaddr >> 0x1f" (cast_expression "(int)unaff_retaddr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "unaff_retaddr")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (labeled_statement "joined_r0x0002c00f:\n  if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" (statement_identifier "joined_r0x0002c00f") (: ":") (if_statement "if (unaff_retaddr != 1) {\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(unaff_retaddr != 1)" (( "(") (binary_expression "unaff_retaddr != 1" (identifier "unaff_retaddr") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }\n    iVar1 = *(int *)(unaff_EBX + 0x6cedb);\n    if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }\n    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);\n    return uVar4;\n  }" ({ "{") (if_statement "if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {\n      __gmpn_cpuvec_init();\n    }" (if "if") (parenthesized_expression "(**(int **)(unaff_EBX + 0x6ce9f) == 0)" (( "(") (binary_expression "**(int **)(unaff_EBX + 0x6ce9f) == 0" (pointer_expression "**(int **)(unaff_EBX + 0x6ce9f)" (* "*") (pointer_expression "*(int **)(unaff_EBX + 0x6ce9f)" (* "*") (cast_expression "(int **)(unaff_EBX + 0x6ce9f)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(unaff_EBX + 0x6ce9f)" (( "(") (binary_expression "unaff_EBX + 0x6ce9f" (identifier "unaff_EBX") (+ "+") (number_literal "0x6ce9f")) () ")"))))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      __gmpn_cpuvec_init();\n    }" ({ "{") (expression_statement "__gmpn_cpuvec_init();" (call_expression "__gmpn_cpuvec_init()" (identifier "__gmpn_cpuvec_init") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar1 = *(int *)(unaff_EBX + 0x6cedb);" (assignment_expression "iVar1 = *(int *)(unaff_EBX + 0x6cedb)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(unaff_EBX + 0x6cedb)" (* "*") (cast_expression "(int *)(unaff_EBX + 0x6cedb)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EBX + 0x6cedb)" (( "(") (binary_expression "unaff_EBX + 0x6cedb" (identifier "unaff_EBX") (+ "+") (number_literal "0x6cedb")) () ")"))))) (; ";")) (if_statement "if (iVar7 < *(int *)(iVar1 + 0xa4)) {\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }\n    else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" (if "if") (parenthesized_expression "(iVar7 < *(int *)(iVar1 + 0xa4))" (( "(") (binary_expression "iVar7 < *(int *)(iVar1 + 0xa4)" (identifier "iVar7") (< "<") (pointer_expression "*(int *)(iVar1 + 0xa4)" (* "*") (cast_expression "(int *)(iVar1 + 0xa4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0xa4)" (( "(") (binary_expression "iVar1 + 0xa4" (identifier "iVar1") (+ "+") (number_literal "0xa4")) () ")"))))) () ")")) (compound_statement "{\n      local_28 = local_28 ^ unaff_retaddr;\n      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);\n    }" ({ "{") (expression_statement "local_28 = local_28 ^ unaff_retaddr;" (assignment_expression "local_28 = local_28 ^ unaff_retaddr" (identifier "local_28") (= "=") (binary_expression "local_28 ^ unaff_retaddr" (identifier "local_28") (^ "^") (identifier "unaff_retaddr"))) (; ";")) (expression_statement "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0)" (parenthesized_expression "(**(code **)(iVar1 + 0x60))" (( "(") (pointer_expression "**(code **)(iVar1 + 0x60)" (* "*") (pointer_expression "*(code **)(iVar1 + 0x60)" (* "*") (cast_expression "(code **)(iVar1 + 0x60)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x60)" (( "(") (binary_expression "iVar1 + 0x60" (identifier "iVar1") (+ "+") (number_literal "0x60")) () ")"))))) () ")")) (argument_list "(puVar5,iVar7,unaff_retaddr,0)" (( "(") (identifier "puVar5") (, ",") (identifier "iVar7") (, ",") (identifier "unaff_retaddr") (, ",") (number_literal "0") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" (else "else") (compound_statement "{\n      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);\n    }" ({ "{") (expression_statement "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);" (assignment_expression "uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr)" (parenthesized_expression "(**(code **)(iVar1 + 0x40))" (( "(") (pointer_expression "**(code **)(iVar1 + 0x40)" (* "*") (pointer_expression "*(code **)(iVar1 + 0x40)" (* "*") (cast_expression "(code **)(iVar1 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x40)" (( "(") (binary_expression "iVar1 + 0x40" (identifier "iVar1") (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(puVar5,iVar7,unaff_retaddr)" (( "(") (identifier "puVar5") (, ",") (identifier "iVar7") (, ",") (identifier "unaff_retaddr") () ")")))) (; ";")) (} "}")))) (expression_statement "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);" (assignment_expression "uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" (identifier "uVar4") (= "=") (call_expression "__gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" (identifier "__gmpn_jacobi_base") (argument_list "(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28)" (( "(") (identifier "uVar3") (, ",") (identifier "unaff_retaddr") (, ",") (binary_expression "uVar6 & unaff_retaddr ^ local_28" (binary_expression "uVar6 & unaff_retaddr" (identifier "uVar6") (& "&") (identifier "unaff_retaddr")) (^ "^") (identifier "local_28")) () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))) (return_statement "return 1 - (local_28 & 2);" (return "return") (binary_expression "1 - (local_28 & 2)" (number_literal "1") (- "-") (parenthesized_expression "(local_28 & 2)" (( "(") (binary_expression "local_28 & 2" (identifier "local_28") (& "&") (number_literal "2")) () ")"))) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

int function_1(long var_2,type_1 b)

{
  type_2 var_1;
  type_3 var_8;
  int var_6;
  type_4 a_00;
  type_2 *var_7;
  type_2 var_3;
  int var_5;
  type_2 var_4;
  
  var_1 = b->_mp_size;
  if (var_1 == 0) {
    return (type_2)((var_2 + 1U & 0xfffffffd) == 0);
  }
  var_7 = b->_mp_d;
  var_3 = *var_7;
  var_5 = (var_1 ^ (int)var_1 >> 0x1f) - ((int)var_1 >> 0x1f);
  var_4 = ((int)(var_1 & var_2) >> 0x1f) * -2;
  if ((var_3 & 1) != 0) {
    var_4 = var_2 >> 0x1e & var_3 & 2 ^ var_4;
    if (var_2 < 0) {
      var_2 = -var_2;
      if ((var_2 & 1U) != 0) goto joined_r0x0002c00f;
    }
    else {
      if ((var_2 & 1U) != 0) goto joined_r0x0002c00f;
      if (var_2 == 0) {
        return (type_2)(var_3 == 1 && var_5 == 1);
      }
    }
    var_6 = 0;
    for (var_1 = var_2; (var_1 & 1) == 0; var_1 = var_1 >> 1 | 0x80000000) {
      var_6 = var_6 + 1;
    }
    var_2 = (type_2)var_2 >> ((type_3)var_6 & 0x1f);
    var_4 = var_4 ^ var_6 * 2 & (var_3 >> 1 ^ var_3);
    goto joined_r0x0002c00f;
  }
  if ((var_2 & 1U) == 0) {
    return 0;
  }
  if (var_3 == 0) {
    do {
      var_7 = var_7 + 1;
      var_3 = *var_7;
      var_5 = var_5 + -1;
    } while (var_3 == 0);
    if ((var_3 & 1) == 0) goto LAB_0002bf0b;
  }
  else {
LAB_0002bf0b:
    if (var_3 == 0x80000000) {
      if (var_5 == 1) {
        return 1 - ((var_4 ^ var_2 ^ var_2 >> 1) & 2);
      }
      var_3 = var_7[1] * 2;
    }
    else {
      var_8 = 0;
      for (var_1 = var_3; (var_1 & 1) == 0; var_1 = var_1 >> 1 | 0x80000000) {
        var_8 = var_8 + 1;
      }
      var_3 = var_3 >> (var_8 & 0x1f);
    }
  }
  var_4 = var_2 >> 0x1e & var_3 & 2 ^ var_4;
  var_2 = (var_2 ^ var_2 >> 0x1f) - (var_2 >> 0x1f);
joined_r0x0002c00f:
  if (var_2 != 1) {
    if (*(int *)PTR___gmpn_cpuvec_initialized_00098d58 == 0) {
      var_9();
    }
    if (var_5 < *(int *)(var_10 + 0xa4)) {
      var_4 = var_4 ^ var_2;
      a_00 = (**(type_5 **)(var_10 + 0x60))(var_7,var_5,var_2,0);
    }
    else {
      a_00 = (**(type_5 **)(var_10 + 0x40))(var_7,var_5,var_2);
    }
    var_5 = var_11(a_00,var_2,var_3 & var_2 ^ var_4);
    return var_5;
  }
  return 1 - (var_4 & 2);
}


(translation_unit (function_definition type: (type_identifier) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) right: (identifier)) right: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (for_statement initializer: (assignment_expression left: (identifier) right: (identifier)) condition: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (for_statement initializer: (assignment_expression left: (identifier) right: (identifier)) condition: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) right: (identifier)) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier) (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier)))))) (return_statement (identifier))))) (return_statement (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))

uint __regparm2 MASKED(undefined4 param_1,undefined4 param_2,int param_3)

{
  int iVar1;
  byte bVar2;
  undefined4 uVar3;
  uint uVar4;
  uint *puVar5;
  int unaff_EBX;
  uint uVar6;
  int iVar7;
  uint unaff_retaddr;
  uint local_28;
  
  entry(param_2,0x2beb9);
  uVar4 = *(uint *)(param_3 + 4);
  if (uVar4 == 0) {
    return (uint)((unaff_retaddr + 1 & 0xfffffffd) == 0);
  }
  puVar5 = *(uint **)(param_3 + 8);
  uVar6 = *puVar5;
  iVar7 = (uVar4 ^ (int)uVar4 >> 0x1f) - ((int)uVar4 >> 0x1f);
  local_28 = ((int)(uVar4 & unaff_retaddr) >> 0x1f) * -2;
  if ((uVar6 & 1) != 0) {
    local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;
    if ((int)unaff_retaddr < 0) {
      unaff_retaddr = -unaff_retaddr;
      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;
    }
    else {
      if ((unaff_retaddr & 1) != 0) goto joined_r0x0002c00f;
      if (unaff_retaddr == 0) {
        return (uint)(uVar6 == 1 && iVar7 == 1);
      }
    }
    iVar1 = 0;
    for (uVar4 = unaff_retaddr; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {
      iVar1 = iVar1 + 1;
    }
    unaff_retaddr = unaff_retaddr >> ((byte)iVar1 & 0x1f);
    local_28 = local_28 ^ iVar1 * 2 & (uVar6 >> 1 ^ uVar6);
    goto joined_r0x0002c00f;
  }
  if ((unaff_retaddr & 1) == 0) {
    return 0;
  }
  if (uVar6 == 0) {
    do {
      puVar5 = puVar5 + 1;
      uVar6 = *puVar5;
      iVar7 = iVar7 + -1;
    } while (uVar6 == 0);
    if ((uVar6 & 1) == 0) goto LAB_0002bf0b;
  }
  else {
LAB_0002bf0b:
    if (uVar6 == 0x80000000) {
      if (iVar7 == 1) {
        return 1 - ((local_28 ^ unaff_retaddr ^ (int)unaff_retaddr >> 1) & 2);
      }
      uVar6 = puVar5[1] * 2;
    }
    else {
      bVar2 = 0;
      for (uVar4 = uVar6; (uVar4 & 1) == 0; uVar4 = uVar4 >> 1 | 0x80000000) {
        bVar2 = bVar2 + 1;
      }
      uVar6 = uVar6 >> (bVar2 & 0x1f);
    }
  }
  local_28 = (int)unaff_retaddr >> 0x1e & uVar6 & 2 ^ local_28;
  unaff_retaddr = (unaff_retaddr ^ (int)unaff_retaddr >> 0x1f) - ((int)unaff_retaddr >> 0x1f);
joined_r0x0002c00f:
  if (unaff_retaddr != 1) {
    if (**(int **)(unaff_EBX + 0x6ce9f) == 0) {
      __gmpn_cpuvec_init();
    }
    iVar1 = *(int *)(unaff_EBX + 0x6cedb);
    if (iVar7 < *(int *)(iVar1 + 0xa4)) {
      local_28 = local_28 ^ unaff_retaddr;
      uVar3 = (**(code **)(iVar1 + 0x60))(puVar5,iVar7,unaff_retaddr,0);
    }
    else {
      uVar3 = (**(code **)(iVar1 + 0x40))(puVar5,iVar7,unaff_retaddr);
    }
    uVar4 = __gmpn_jacobi_base(uVar3,unaff_retaddr,uVar6 & unaff_retaddr ^ local_28);
    return uVar4;
  }
  return 1 - (local_28 & 2);
}

