
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int __regparm3 ec_point_verify(ec_point *a)

{
  anon_enum_32 aVar1;
  Bignum_conflict pBVar2;
  Bignum_conflict pBVar3;
  Bignum_conflict pBVar4;
  Bignum_conflict pBVar5;
  int iVar6;
  
  aVar1 = a->curve->type;
  if (aVar1 == EC_EDWARDS) {
    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);
    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);
    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);
    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);
    freebn(pBVar4);
    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);
    freebn(pBVar2);
    freebn(pBVar3);
    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);
    freebn(pBVar4);
    freebn(pBVar5);
    iVar6 = bignum_cmp(pBVar2,One);
    freebn(pBVar2);
    return (uint)(iVar6 == 0);
  }
  if (aVar1 != EC_WEIERSTRASS) {
    return 0;
  }
  pBVar2 = bignum_from_long(3);
  pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);
  pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p);
  freebn(pBVar2);
  pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,
                  (Bignum_conflict)a->curve->p);
  pBVar5 = bigadd(pBVar4,pBVar2);
  freebn(pBVar4);
  freebn(pBVar2);
  pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p);
  freebn(pBVar5);
  pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b);
  freebn(pBVar2);
  pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p);
  freebn(pBVar4);
  iVar6 = bignum_cmp(pBVar3,pBVar2);
  freebn(pBVar3);
  freebn(pBVar2);
  return (uint)(iVar6 == 0);
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

bool __regparm3 FUN_0002a1a0(int *param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  
  iVar5 = *(int *)*param_1;
  if (iVar5 == 2) {
    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);
    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));
    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));
    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar3);
    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar1);
    FUN_00021b10(uVar2);
    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar3);
    FUN_00021b10(uVar4);
    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);
    FUN_00021b10(uVar1);
    return iVar5 == 0;
  }
  if (iVar5 != 0) {
    return false;
  }
  uVar1 = FUN_00022e40(3);
  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));
  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar1);
  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))
  ;
  uVar4 = FUN_00022c00(uVar3,uVar1);
  FUN_00021b10(uVar3);
  FUN_00021b10(uVar1);
  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar4);
  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));
  FUN_00021b10(uVar1);
  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar3);
  iVar5 = FUN_00022490(uVar2,uVar1);
  FUN_00021b10(uVar2);
  FUN_00021b10(uVar1);
  return iVar5 == 0;
}


PUSH EBP
PUSH EDI
PUSH ESI
MOV ESI,EAX
PUSH EBX
CALL 0x00014540
ADD EBX,0x32cb9
SUB ESP,0x1c
MOV ECX,dword ptr [EAX]
MOV EAX,dword ptr [ECX]
CMP EAX,0x2
JZ 0x0002a2d0
XOR EDI,EDI
TEST EAX,EAX
JZ 0x0002a1d8
ADD ESP,0x1c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
PUSH 0x3
CALL 0x00022e40
MOV ECX,dword ptr [ESI]
ADD ESP,0xc
MOV EDI,EAX
MOV EAX,dword ptr [ESI + 0x8]
PUSH dword ptr [ECX + 0x10]
PUSH EAX
PUSH EAX
CALL 0x00021b50
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESI]
ADD ESP,0xc
PUSH dword ptr [EAX + 0x10]
PUSH EDI
PUSH dword ptr [ESI + 0x4]
CALL 0x00023a50
MOV dword ptr [ESP],EDI
MOV EBP,EAX
CALL 0x00021b10
MOV EAX,dword ptr [ESI]
ADD ESP,0xc
PUSH dword ptr [EAX + 0x10]
PUSH dword ptr [ESI + 0x4]
PUSH dword ptr [EAX + 0x14]
CALL 0x00021b50
MOV ECX,EAX
POP EAX
POP EDX
PUSH ECX
MOV dword ptr [ESP + 0x18],ECX
PUSH EBP
CALL 0x00022c00
MOV dword ptr [ESP],EBP
MOV EDI,EAX
CALL 0x00021b10
MOV ECX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP],ECX
CALL 0x00021b10
MOV EAX,dword ptr [ESI]
POP ECX
POP EBP
PUSH dword ptr [EAX + 0x10]
PUSH EDI
CALL 0x000230a0
MOV dword ptr [ESP],EDI
MOV EBP,EAX
CALL 0x00021b10
POP EAX
MOV EAX,dword ptr [ESI]
POP EDX
PUSH dword ptr [EAX + 0x18]
PUSH EBP
CALL 0x00022c00
MOV dword ptr [ESP],EBP
MOV EDI,EAX
CALL 0x00021b10
MOV EAX,dword ptr [ESI]
POP ECX
POP EBP
PUSH dword ptr [EAX + 0x10]
PUSH EDI
CALL 0x000230a0
MOV dword ptr [ESP],EDI
MOV EBP,EAX
CALL 0x00021b10
POP EAX
POP EDX
PUSH EBP
MOV ESI,dword ptr [ESP + 0x14]
PUSH ESI
CALL 0x00022490
MOV dword ptr [ESP],ESI
TEST EAX,EAX
SETZ AL
MOVZX EAX,AL
MOV EDI,EAX
CALL 0x00021b10
MOV dword ptr [ESP],EBP
CALL 0x00021b10
ADD ESP,0x10
MOV EAX,EDI
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESI + 0x8]
SUB ESP,0x4
PUSH dword ptr [ECX + 0x10]
PUSH EAX
PUSH EAX
CALL 0x00021b50
MOV ECX,dword ptr [ESI]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESI + 0x4]
ADD ESP,0xc
PUSH dword ptr [ECX + 0x10]
PUSH EAX
PUSH EAX
CALL 0x00021b50
ADD ESP,0xc
MOV EDI,EAX
MOV EAX,dword ptr [ESI]
PUSH dword ptr [EAX + 0x10]
PUSH EDI
PUSH dword ptr [EAX + 0x18]
CALL 0x00021b50
ADD ESP,0xc
MOV EBP,EAX
MOV EAX,dword ptr [ESI]
PUSH dword ptr [EAX + 0x10]
PUSH dword ptr [ESP + 0x10]
PUSH EBP
CALL 0x00021b50
MOV dword ptr [ESP],EBP
MOV dword ptr [ESP + 0x1c],EAX
CALL 0x00021b10
MOV EAX,dword ptr [ESI]
ADD ESP,0xc
PUSH dword ptr [EAX + 0x10]
PUSH EDI
PUSH dword ptr [ESP + 0x14]
CALL 0x000235a0
POP ECX
PUSH dword ptr [ESP + 0x14]
MOV EBP,EAX
CALL 0x00021b10
MOV dword ptr [ESP],EDI
CALL 0x00021b10
MOV EAX,dword ptr [ESI]
ADD ESP,0xc
PUSH dword ptr [EAX + 0x10]
MOV EDI,dword ptr [ESP + 0x14]
PUSH EDI
PUSH EBP
CALL 0x000235a0
MOV dword ptr [ESP],EBP
MOV ESI,EAX
CALL 0x00021b10
MOV dword ptr [ESP],EDI
CALL 0x00021b10
LEA EAX,[EBX + 0x1b8]
POP EDI
POP EBP
PUSH dword ptr [EAX]
PUSH ESI
CALL 0x00022490
MOV dword ptr [ESP],ESI
TEST EAX,EAX
SETZ AL
MOVZX EAX,AL
MOV EDI,EAX
CALL 0x00021b10
ADD ESP,0x10
MOV EAX,EDI
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nbool __regparm3 FUN_0002a1a0(int *param_1)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}\n\n" comment (function_definition "bool __regparm3 FUN_0002a1a0(int *param_1)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0002a1a0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "iVar5 = *(int *)*param_1;" (assignment_expression "iVar5 = *(int *)*param_1" identifier = (pointer_expression "*(int *)*param_1" * (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (if_statement "if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" if (parenthesized_expression "(iVar5 == 2)" ( (binary_expression "iVar5 == 2" identifier == number_literal) )) (compound_statement "{\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" { (expression_statement "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);" (assignment_expression "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" identifier = (call_expression "FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" identifier (argument_list "(param_1[2],param_1[2],((int *)*param_1)[4])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "((int *)*param_1)[4]" (parenthesized_expression "((int *)*param_1)" ( (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) )) [ number_literal ]) )))) ;) (expression_statement "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" ( (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" * (cast_expression "(undefined4 *)(*param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);" (assignment_expression "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c)" identifier = (call_expression "FUN_00022490(uVar1,PTR_DAT_0005d01c)" identifier (argument_list "(uVar1,PTR_DAT_0005d01c)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return iVar5 == 0;" return (binary_expression "iVar5 == 0" identifier == number_literal) ;) })) (if_statement "if (iVar5 != 0) {\n    return false;\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "uVar1 = FUN_00022e40(3);" (assignment_expression "uVar1 = FUN_00022e40(3)" identifier = (call_expression "FUN_00022e40(3)" identifier (argument_list "(3)" ( number_literal )))) ;) (expression_statement "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;" (assignment_expression "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" ( (pointer_expression "*(undefined4 *)(*param_1 + 0x14)" * (cast_expression "(undefined4 *)(*param_1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x14)" ( (binary_expression "*param_1 + 0x14" (pointer_expression "*param_1" * identifier) + number_literal) )))) , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar4 = FUN_00022c00(uVar3,uVar1);" (assignment_expression "uVar4 = FUN_00022c00(uVar3,uVar1)" identifier = (call_expression "FUN_00022c00(uVar3,uVar1)" identifier (argument_list "(uVar3,uVar1)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));" (assignment_expression "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" identifier = (call_expression "FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" identifier (argument_list "(uVar1,*(undefined4 *)(*param_1 + 0x18))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" * (cast_expression "(undefined4 *)(*param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "iVar5 = FUN_00022490(uVar2,uVar1);" (assignment_expression "iVar5 = FUN_00022490(uVar2,uVar1)" identifier = (call_expression "FUN_00022490(uVar2,uVar1)" identifier (argument_list "(uVar2,uVar1)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return iVar5 == 0;" return (binary_expression "iVar5 == 0" identifier == number_literal) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nint __regparm3 ec_point_verify(ec_point *a)\n\n{\n  anon_enum_32 aVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  Bignum_conflict pBVar4;\n  Bignum_conflict pBVar5;\n  int iVar6;\n  \n  aVar1 = a->curve->type;\n  if (aVar1 == EC_EDWARDS) {\n    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);\n    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);\n    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);\n    freebn(pBVar2);\n    freebn(pBVar3);\n    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    freebn(pBVar5);\n    iVar6 = bignum_cmp(pBVar2,One);\n    freebn(pBVar2);\n    return (uint)(iVar6 == 0);\n  }\n  if (aVar1 != EC_WEIERSTRASS) {\n    return 0;\n  }\n  pBVar2 = bignum_from_long(3);\n  pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n  pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p);\n  freebn(pBVar2);\n  pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p);\n  pBVar5 = bigadd(pBVar4,pBVar2);\n  freebn(pBVar4);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p);\n  freebn(pBVar5);\n  pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p);\n  freebn(pBVar4);\n  iVar6 = bignum_cmp(pBVar3,pBVar2);\n  freebn(pBVar3);\n  freebn(pBVar2);\n  return (uint)(iVar6 == 0);\n}\n\n" comment comment (function_definition "int __regparm3 ec_point_verify(ec_point *a)\n\n{\n  anon_enum_32 aVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  Bignum_conflict pBVar4;\n  Bignum_conflict pBVar5;\n  int iVar6;\n  \n  aVar1 = a->curve->type;\n  if (aVar1 == EC_EDWARDS) {\n    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);\n    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);\n    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);\n    freebn(pBVar2);\n    freebn(pBVar3);\n    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    freebn(pBVar5);\n    iVar6 = bignum_cmp(pBVar2,One);\n    freebn(pBVar2);\n    return (uint)(iVar6 == 0);\n  }\n  if (aVar1 != EC_WEIERSTRASS) {\n    return 0;\n  }\n  pBVar2 = bignum_from_long(3);\n  pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n  pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p);\n  freebn(pBVar2);\n  pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p);\n  pBVar5 = bigadd(pBVar4,pBVar2);\n  freebn(pBVar4);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p);\n  freebn(pBVar5);\n  pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p);\n  freebn(pBVar4);\n  iVar6 = bignum_cmp(pBVar3,pBVar2);\n  freebn(pBVar3);\n  freebn(pBVar2);\n  return (uint)(iVar6 == 0);\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "ec_point_verify(ec_point *a)" identifier (parameter_list "(ec_point *a)" ( (parameter_declaration "ec_point *a" type_identifier (pointer_declarator "*a" * identifier)) ))) (compound_statement "{\n  anon_enum_32 aVar1;\n  Bignum_conflict pBVar2;\n  Bignum_conflict pBVar3;\n  Bignum_conflict pBVar4;\n  Bignum_conflict pBVar5;\n  int iVar6;\n  \n  aVar1 = a->curve->type;\n  if (aVar1 == EC_EDWARDS) {\n    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);\n    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);\n    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);\n    freebn(pBVar2);\n    freebn(pBVar3);\n    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    freebn(pBVar5);\n    iVar6 = bignum_cmp(pBVar2,One);\n    freebn(pBVar2);\n    return (uint)(iVar6 == 0);\n  }\n  if (aVar1 != EC_WEIERSTRASS) {\n    return 0;\n  }\n  pBVar2 = bignum_from_long(3);\n  pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n  pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p);\n  freebn(pBVar2);\n  pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p);\n  pBVar5 = bigadd(pBVar4,pBVar2);\n  freebn(pBVar4);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p);\n  freebn(pBVar5);\n  pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b);\n  freebn(pBVar2);\n  pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p);\n  freebn(pBVar4);\n  iVar6 = bignum_cmp(pBVar3,pBVar2);\n  freebn(pBVar3);\n  freebn(pBVar2);\n  return (uint)(iVar6 == 0);\n}" { (declaration "anon_enum_32 aVar1;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar2;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar3;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar4;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (expression_statement "aVar1 = a->curve->type;" (assignment_expression "aVar1 = a->curve->type" identifier = (field_expression "a->curve->type" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) ;) (if_statement "if (aVar1 == EC_EDWARDS) {\n    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);\n    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);\n    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);\n    freebn(pBVar2);\n    freebn(pBVar3);\n    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    freebn(pBVar5);\n    iVar6 = bignum_cmp(pBVar2,One);\n    freebn(pBVar2);\n    return (uint)(iVar6 == 0);\n  }" if (parenthesized_expression "(aVar1 == EC_EDWARDS)" ( (binary_expression "aVar1 == EC_EDWARDS" identifier == identifier) )) (compound_statement "{\n    pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);\n    pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);\n    pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);\n    pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);\n    freebn(pBVar2);\n    freebn(pBVar3);\n    pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);\n    freebn(pBVar4);\n    freebn(pBVar5);\n    iVar6 = bignum_cmp(pBVar2,One);\n    freebn(pBVar2);\n    return (uint)(iVar6 == 0);\n  }" { (expression_statement "pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar2 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" ( (cast_expression "(Bignum_conflict)a->y" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->y" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->y" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->y" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar3 = modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)a->x,(Bignum_conflict)a->x,(Bignum_conflict)a->curve->p)" ( (cast_expression "(Bignum_conflict)a->x" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->x" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->x" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->x" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar4 = modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)(a->curve->field_5).w.b,pBVar3,(Bignum_conflict)a->curve->p)" ( (field_expression "(Bignum_conflict)(a->curve->field_5).w.b" (field_expression "(Bignum_conflict)(a->curve->field_5).w" (call_expression "(Bignum_conflict)(a->curve->field_5)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(a->curve->field_5)" ( (field_expression "a->curve->field_5" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier) ))) . field_identifier) . field_identifier) , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar5 = modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul(pBVar4,pBVar2,(Bignum_conflict)a->curve->p)" identifier (argument_list "(pBVar4,pBVar2,(Bignum_conflict)a->curve->p)" ( identifier , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar4);" (call_expression "freebn(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar4 = modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modsub(pBVar2,pBVar3,(Bignum_conflict)a->curve->p)" identifier (argument_list "(pBVar2,pBVar3,(Bignum_conflict)a->curve->p)" ( identifier , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "freebn(pBVar3);" (call_expression "freebn(pBVar3)" identifier (argument_list "(pBVar3)" ( identifier ))) ;) (expression_statement "pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar2 = modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modsub(pBVar4,pBVar5,(Bignum_conflict)a->curve->p)" identifier (argument_list "(pBVar4,pBVar5,(Bignum_conflict)a->curve->p)" ( identifier , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar4);" (call_expression "freebn(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "freebn(pBVar5);" (call_expression "freebn(pBVar5)" identifier (argument_list "(pBVar5)" ( identifier ))) ;) (expression_statement "iVar6 = bignum_cmp(pBVar2,One);" (assignment_expression "iVar6 = bignum_cmp(pBVar2,One)" identifier = (call_expression "bignum_cmp(pBVar2,One)" identifier (argument_list "(pBVar2,One)" ( identifier , identifier )))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (return_statement "return (uint)(iVar6 == 0);" return (call_expression "(uint)(iVar6 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))) ;) })) (if_statement "if (aVar1 != EC_WEIERSTRASS) {\n    return 0;\n  }" if (parenthesized_expression "(aVar1 != EC_WEIERSTRASS)" ( (binary_expression "aVar1 != EC_WEIERSTRASS" identifier != identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pBVar2 = bignum_from_long(3);" (assignment_expression "pBVar2 = bignum_from_long(3)" identifier = (call_expression "bignum_from_long(3)" identifier (argument_list "(3)" ( number_literal )))) ;) (expression_statement "pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar3 = modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)a->y,(Bignum_conflict)a->y,(Bignum_conflict)a->curve->p)" ( (cast_expression "(Bignum_conflict)a->y" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->y" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->y" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->y" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar4 = modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p)" identifier = (call_expression "modpow((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)a->x,pBVar2,(Bignum_conflict)a->curve->p)" ( (cast_expression "(Bignum_conflict)a->x" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->x" identifier -> field_identifier)) , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p);" (assignment_expression "pBVar2 = modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p)" identifier = (call_expression "modmul((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)(a->curve->field_5).w.a,(Bignum_conflict)a->x,\n                  (Bignum_conflict)a->curve->p)" ( (field_expression "(Bignum_conflict)(a->curve->field_5).w.a" (field_expression "(Bignum_conflict)(a->curve->field_5).w" (call_expression "(Bignum_conflict)(a->curve->field_5)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(a->curve->field_5)" ( (field_expression "a->curve->field_5" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier) ))) . field_identifier) . field_identifier) , (cast_expression "(Bignum_conflict)a->x" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->x" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "pBVar5 = bigadd(pBVar4,pBVar2);" (assignment_expression "pBVar5 = bigadd(pBVar4,pBVar2)" identifier = (call_expression "bigadd(pBVar4,pBVar2)" identifier (argument_list "(pBVar4,pBVar2)" ( identifier , identifier )))) ;) (expression_statement "freebn(pBVar4);" (call_expression "freebn(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar2 = bigmod(pBVar5,(Bignum_conflict)a->curve->p)" identifier = (call_expression "bigmod(pBVar5,(Bignum_conflict)a->curve->p)" identifier (argument_list "(pBVar5,(Bignum_conflict)a->curve->p)" ( identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar5);" (call_expression "freebn(pBVar5)" identifier (argument_list "(pBVar5)" ( identifier ))) ;) (expression_statement "pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b);" (assignment_expression "pBVar4 = bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b)" identifier = (call_expression "bigadd(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b)" identifier (argument_list "(pBVar2,(Bignum_conflict)(a->curve->field_5).w.b)" ( identifier , (field_expression "(Bignum_conflict)(a->curve->field_5).w.b" (field_expression "(Bignum_conflict)(a->curve->field_5).w" (call_expression "(Bignum_conflict)(a->curve->field_5)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(a->curve->field_5)" ( (field_expression "a->curve->field_5" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier) ))) . field_identifier) . field_identifier) )))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p);" (assignment_expression "pBVar2 = bigmod(pBVar4,(Bignum_conflict)a->curve->p)" identifier = (call_expression "bigmod(pBVar4,(Bignum_conflict)a->curve->p)" identifier (argument_list "(pBVar4,(Bignum_conflict)a->curve->p)" ( identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) )))) ;) (expression_statement "freebn(pBVar4);" (call_expression "freebn(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "iVar6 = bignum_cmp(pBVar3,pBVar2);" (assignment_expression "iVar6 = bignum_cmp(pBVar3,pBVar2)" identifier = (call_expression "bignum_cmp(pBVar3,pBVar2)" identifier (argument_list "(pBVar3,pBVar2)" ( identifier , identifier )))) ;) (expression_statement "freebn(pBVar3);" (call_expression "freebn(pBVar3)" identifier (argument_list "(pBVar3)" ( identifier ))) ;) (expression_statement "freebn(pBVar2);" (call_expression "freebn(pBVar2)" identifier (argument_list "(pBVar2)" ( identifier ))) ;) (return_statement "return (uint)(iVar6 == 0);" return (call_expression "(uint)(iVar6 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))) ;) })))
(translation_unit "bool __regparm3 FUN_0002a1a0(int *param_1)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}\n\n" (function_definition "bool __regparm3 FUN_0002a1a0(int *param_1)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0002a1a0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "iVar5 = *(int *)*param_1;" (assignment_expression "iVar5 = *(int *)*param_1" identifier = (pointer_expression "*(int *)*param_1" * (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (if_statement "if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" if (parenthesized_expression "(iVar5 == 2)" ( (binary_expression "iVar5 == 2" identifier == number_literal) )) (compound_statement "{\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" { (expression_statement "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);" (assignment_expression "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" identifier = (call_expression "FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" identifier (argument_list "(param_1[2],param_1[2],((int *)*param_1)[4])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "((int *)*param_1)[4]" (parenthesized_expression "((int *)*param_1)" ( (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) )) [ number_literal ]) )))) ;) (expression_statement "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" ( (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" * (cast_expression "(undefined4 *)(*param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);" (assignment_expression "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c)" identifier = (call_expression "FUN_00022490(uVar1,PTR_DAT_0005d01c)" identifier (argument_list "(uVar1,PTR_DAT_0005d01c)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return iVar5 == 0;" return (binary_expression "iVar5 == 0" identifier == number_literal) ;) })) (if_statement "if (iVar5 != 0) {\n    return false;\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "uVar1 = FUN_00022e40(3);" (assignment_expression "uVar1 = FUN_00022e40(3)" identifier = (call_expression "FUN_00022e40(3)" identifier (argument_list "(3)" ( number_literal )))) ;) (expression_statement "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;" (assignment_expression "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" ( (pointer_expression "*(undefined4 *)(*param_1 + 0x14)" * (cast_expression "(undefined4 *)(*param_1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x14)" ( (binary_expression "*param_1 + 0x14" (pointer_expression "*param_1" * identifier) + number_literal) )))) , (subscript_expression "param_1[1]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "uVar4 = FUN_00022c00(uVar3,uVar1);" (assignment_expression "uVar4 = FUN_00022c00(uVar3,uVar1)" identifier = (call_expression "FUN_00022c00(uVar3,uVar1)" identifier (argument_list "(uVar3,uVar1)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (expression_statement "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));" (assignment_expression "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" identifier = (call_expression "FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" identifier (argument_list "(uVar1,*(undefined4 *)(*param_1 + 0x18))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" * (cast_expression "(undefined4 *)(*param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (expression_statement "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar3,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (expression_statement "iVar5 = FUN_00022490(uVar2,uVar1);" (assignment_expression "iVar5 = FUN_00022490(uVar2,uVar1)" identifier = (call_expression "FUN_00022490(uVar2,uVar1)" identifier (argument_list "(uVar2,uVar1)" ( identifier , identifier )))) ;) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))) ;) (return_statement "return iVar5 == 0;" return (binary_expression "iVar5 == 0" identifier == number_literal) ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ]) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (binary_expression IDENT == LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) , (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (binary_expression IDENT == LIT) ;) })))
(function_definition "bool __regparm3 FUN_0002a1a0(int *param_1)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" (primitive_type "bool") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0002a1a0(int *param_1)" (identifier "FUN_0002a1a0") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  iVar5 = *(int *)*param_1;\n  if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }\n  if (iVar5 != 0) {\n    return false;\n  }\n  uVar1 = FUN_00022e40(3);\n  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));\n  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;\n  uVar4 = FUN_00022c00(uVar3,uVar1);\n  FUN_00021b10(uVar3);\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar4);\n  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));\n  FUN_00021b10(uVar1);\n  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));\n  FUN_00021b10(uVar3);\n  iVar5 = FUN_00022490(uVar2,uVar1);\n  FUN_00021b10(uVar2);\n  FUN_00021b10(uVar1);\n  return iVar5 == 0;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (expression_statement "iVar5 = *(int *)*param_1;" (assignment_expression "iVar5 = *(int *)*param_1" (identifier "iVar5") (= "=") (pointer_expression "*(int *)*param_1" (* "*") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))))) (; ";")) (if_statement "if (iVar5 == 2) {\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" (if "if") (parenthesized_expression "(iVar5 == 2)" (( "(") (binary_expression "iVar5 == 2" (identifier "iVar5") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);\n    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));\n    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));\n    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar1);\n    FUN_00021b10(uVar2);\n    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));\n    FUN_00021b10(uVar3);\n    FUN_00021b10(uVar4);\n    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);\n    FUN_00021b10(uVar1);\n    return iVar5 == 0;\n  }" ({ "{") (expression_statement "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);" (assignment_expression "uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" (identifier "uVar1") (= "=") (call_expression "FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4])" (identifier "FUN_00021b50") (argument_list "(param_1[2],param_1[2],((int *)*param_1)[4])" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "((int *)*param_1)[4]" (parenthesized_expression "((int *)*param_1)" (( "(") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")) ([ "[") (number_literal "4") (] "]")) () ")")))) (; ";")) (expression_statement "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar2") (= "=") (call_expression "FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00021b50") (argument_list "(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar3") (= "=") (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00021b50") (argument_list "(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10))" (( "(") (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")")))) (, ",") (identifier "uVar2") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar4") (= "=") (call_expression "FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00021b50") (argument_list "(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar3") (, ",") (identifier "uVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" (identifier "FUN_00021b10") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (expression_statement "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar3") (= "=") (call_expression "FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_000235a0") (argument_list "(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar1") (, ",") (identifier "uVar2") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" (identifier "FUN_00021b10") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar1") (= "=") (call_expression "FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_000235a0") (argument_list "(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar3") (, ",") (identifier "uVar4") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" (identifier "FUN_00021b10") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" (identifier "FUN_00021b10") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);" (assignment_expression "iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c)" (identifier "iVar5") (= "=") (call_expression "FUN_00022490(uVar1,PTR_DAT_0005d01c)" (identifier "FUN_00022490") (argument_list "(uVar1,PTR_DAT_0005d01c)" (( "(") (identifier "uVar1") (, ",") (identifier "PTR_DAT_0005d01c") () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (return_statement "return iVar5 == 0;" (return "return") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if (iVar5 != 0) {\n    return false;\n  }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return false;\n  }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "uVar1 = FUN_00022e40(3);" (assignment_expression "uVar1 = FUN_00022e40(3)" (identifier "uVar1") (= "=") (call_expression "FUN_00022e40(3)" (identifier "FUN_00022e40") (argument_list "(3)" (( "(") (number_literal "3") () ")")))) (; ";")) (expression_statement "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar2") (= "=") (call_expression "FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00021b50") (argument_list "(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar3") (= "=") (call_expression "FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00023a50") (argument_list "(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "uVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (expression_statement "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))\n  ;" (assignment_expression "uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar1") (= "=") (call_expression "FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_00021b50") (argument_list "(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))" (( "(") (pointer_expression "*(undefined4 *)(*param_1 + 0x14)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x14)" (( "(") (binary_expression "*param_1 + 0x14" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x14")) () ")")))) (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "uVar4 = FUN_00022c00(uVar3,uVar1);" (assignment_expression "uVar4 = FUN_00022c00(uVar3,uVar1)" (identifier "uVar4") (= "=") (call_expression "FUN_00022c00(uVar3,uVar1)" (identifier "FUN_00022c00") (argument_list "(uVar3,uVar1)" (( "(") (identifier "uVar3") (, ",") (identifier "uVar1") () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" (identifier "FUN_00021b10") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (expression_statement "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar1") (= "=") (call_expression "FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_000230a0") (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar4") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar4);" (call_expression "FUN_00021b10(uVar4)" (identifier "FUN_00021b10") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));" (assignment_expression "uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" (identifier "uVar3") (= "=") (call_expression "FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18))" (identifier "FUN_00022c00") (argument_list "(uVar1,*(undefined4 *)(*param_1 + 0x18))" (( "(") (identifier "uVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (expression_statement "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar1") (= "=") (call_expression "FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10))" (identifier "FUN_000230a0") (argument_list "(uVar3,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar3") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar3);" (call_expression "FUN_00021b10(uVar3)" (identifier "FUN_00021b10") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (expression_statement "iVar5 = FUN_00022490(uVar2,uVar1);" (assignment_expression "iVar5 = FUN_00022490(uVar2,uVar1)" (identifier "iVar5") (= "=") (call_expression "FUN_00022490(uVar2,uVar1)" (identifier "FUN_00022490") (argument_list "(uVar2,uVar1)" (( "(") (identifier "uVar2") (, ",") (identifier "uVar1") () ")")))) (; ";")) (expression_statement "FUN_00021b10(uVar2);" (call_expression "FUN_00021b10(uVar2)" (identifier "FUN_00021b10") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "FUN_00021b10(uVar1);" (call_expression "FUN_00021b10(uVar1)" (identifier "FUN_00021b10") (argument_list "(uVar1)" (( "(") (identifier "uVar1") () ")"))) (; ";")) (return_statement "return iVar5 == 0;" (return "return") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int __regparm3 function_1(type_1 *a)

{
  type_2 var_1;
  type_3 pBVar2;
  type_3 pBVar3;
  type_3 pBVar4;
  type_3 pBVar5;
  int var_7;
  
  var_1 = a->curve->type;
  if (var_1 == var_2) {
    pBVar2 = var_3((type_3)a->y,(type_3)a->y,(type_3)a->curve->p);
    pBVar3 = var_3((type_3)a->x,(type_3)a->x,(type_3)a->curve->p);
    pBVar4 = var_3((type_3)(a->curve->field_5).w.b,pBVar3,(type_3)a->curve->p);
    pBVar5 = var_3(pBVar4,pBVar2,(type_3)a->curve->p);
    var_4(pBVar4);
    pBVar4 = var_5(pBVar2,pBVar3,(type_3)a->curve->p);
    var_4(pBVar2);
    var_4(pBVar3);
    pBVar2 = var_5(pBVar4,pBVar5,(type_3)a->curve->p);
    var_4(pBVar4);
    var_4(pBVar5);
    var_7 = var_6(pBVar2,One);
    var_4(pBVar2);
    return (uint)(var_7 == 0);
  }
  if (var_1 != var_8) {
    return 0;
  }
  pBVar2 = var_9(3);
  pBVar3 = var_3((type_3)a->y,(type_3)a->y,(type_3)a->curve->p);
  pBVar4 = var_10((type_3)a->x,pBVar2,(type_3)a->curve->p);
  var_4(pBVar2);
  pBVar2 = var_3((type_3)(a->curve->field_5).w.a,(type_3)a->x,
                  (type_3)a->curve->p);
  pBVar5 = var_11(pBVar4,pBVar2);
  var_4(pBVar4);
  var_4(pBVar2);
  pBVar2 = var_12(pBVar5,(type_3)a->curve->p);
  var_4(pBVar5);
  pBVar4 = var_11(pBVar2,(type_3)(a->curve->field_5).w.b);
  var_4(pBVar2);
  pBVar2 = var_12(pBVar4,(type_3)a->curve->p);
  var_4(pBVar4);
  var_7 = var_6(pBVar3,pBVar2);
  var_4(pBVar3);
  var_4(pBVar2);
  return (uint)(var_7 == 0);
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (false)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (binary_expression left: (identifier) right: (number_literal))))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

bool __regparm3 MASKED(int *param_1)

{
  undefined4 uVar1;
  undefined4 uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  
  iVar5 = *(int *)*param_1;
  if (iVar5 == 2) {
    uVar1 = FUN_00021b50(param_1[2],param_1[2],((int *)*param_1)[4]);
    uVar2 = FUN_00021b50(param_1[1],param_1[1],*(undefined4 *)(*param_1 + 0x10));
    uVar3 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x18),uVar2,*(undefined4 *)(*param_1 + 0x10));
    uVar4 = FUN_00021b50(uVar3,uVar1,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar3);
    uVar3 = FUN_000235a0(uVar1,uVar2,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar1);
    FUN_00021b10(uVar2);
    uVar1 = FUN_000235a0(uVar3,uVar4,*(undefined4 *)(*param_1 + 0x10));
    FUN_00021b10(uVar3);
    FUN_00021b10(uVar4);
    iVar5 = FUN_00022490(uVar1,PTR_DAT_0005d01c);
    FUN_00021b10(uVar1);
    return iVar5 == 0;
  }
  if (iVar5 != 0) {
    return false;
  }
  uVar1 = FUN_00022e40(3);
  uVar2 = FUN_00021b50(param_1[2],param_1[2],*(undefined4 *)(*param_1 + 0x10));
  uVar3 = FUN_00023a50(param_1[1],uVar1,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar1);
  uVar1 = FUN_00021b50(*(undefined4 *)(*param_1 + 0x14),param_1[1],*(undefined4 *)(*param_1 + 0x10))
  ;
  uVar4 = FUN_00022c00(uVar3,uVar1);
  FUN_00021b10(uVar3);
  FUN_00021b10(uVar1);
  uVar1 = FUN_000230a0(uVar4,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar4);
  uVar3 = FUN_00022c00(uVar1,*(undefined4 *)(*param_1 + 0x18));
  FUN_00021b10(uVar1);
  uVar1 = FUN_000230a0(uVar3,*(undefined4 *)(*param_1 + 0x10));
  FUN_00021b10(uVar3);
  iVar5 = FUN_00022490(uVar2,uVar1);
  FUN_00021b10(uVar2);
  FUN_00021b10(uVar1);
  return iVar5 == 0;
}

