
/* WARNING: Unknown calling convention */

bfd_boolean frag_offset_fixed_p(fragS *frag1,fragS *frag2,offsetT *offset)

{
  offsetT *poVar1;
  offsetT *poVar2;
  offsetT *poVar3;
  longlong lVar4;
  offsetT *poVar5;
  offsetT *poVar6;
  offsetT *poVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  frag *pfVar12;
  int iVar13;
  int iVar14;
  bool bVar15;
  
  uVar10 = (uint)frag1->fr_address;
  uVar8 = uVar10 - (int)frag2->fr_address;
  iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -
           (uint)(uVar10 < (uint)frag2->fr_address);
  pfVar12 = frag1;
  uVar10 = uVar8;
  iVar14 = iVar13;
  if (frag1 != frag2) {
    while (pfVar12->fr_type == rs_fill) {
      poVar5 = &pfVar12->fr_offset;
      poVar1 = &pfVar12->fr_var;
      poVar2 = &pfVar12->fr_offset;
      poVar6 = &pfVar12->fr_var;
      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;
      uVar11 = (uint)lVar4;
      poVar3 = &pfVar12->fr_fix;
      uVar9 = uVar11 + (int)*poVar3;
      poVar7 = &pfVar12->fr_fix;
      pfVar12 = pfVar12->fr_next;
      bVar15 = CARRY4(uVar10,uVar9);
      uVar10 = uVar10 + uVar9;
      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +
                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +
                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +
                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;
      if (pfVar12 == (frag *)0x0) break;
      if (frag2 == pfVar12) {
        *(uint *)offset = uVar10;
        *(int *)((int)offset + 4) = iVar14;
        return 1;
      }
    }
    do {
      if (frag2->fr_type != rs_fill) {
        return 0;
      }
      poVar5 = &frag2->fr_offset;
      poVar1 = &frag2->fr_var;
      poVar2 = &frag2->fr_offset;
      poVar6 = &frag2->fr_var;
      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;
      uVar10 = (uint)lVar4;
      poVar3 = &frag2->fr_fix;
      uVar11 = uVar10 + (int)*poVar3;
      poVar7 = &frag2->fr_fix;
      frag2 = frag2->fr_next;
      bVar15 = uVar8 < uVar11;
      uVar8 = uVar8 - uVar11;
      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +
                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +
                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +
                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;
      if (frag2 == (fragS *)0x0) {
        return 0;
      }
    } while (frag1 != frag2);
  }
  *(uint *)offset = uVar8;
  *(int *)((int)offset + 4) = iVar13;
  return 1;
}



undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)

{
  uint *puVar1;
  uint *puVar2;
  uint *puVar3;
  uint *puVar4;
  uint *puVar5;
  uint *puVar6;
  uint *puVar7;
  uint *puVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  uint uVar15;
  bool bVar16;
  
  uVar9 = *param_1 - *param_2;
  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);
  puVar14 = param_1;
  uVar12 = uVar9;
  uVar13 = uVar15;
  if (param_1 != param_2) {
    while (puVar14[0x11] == 1) {
      puVar1 = puVar14 + 9;
      puVar2 = puVar14 + 6;
      puVar3 = puVar14 + 8;
      puVar4 = puVar14 + 7;
      puVar5 = puVar14 + 6;
      puVar6 = puVar14 + 8;
      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);
      puVar7 = puVar14 + 4;
      uVar11 = uVar10 + *puVar7;
      puVar8 = puVar14 + 5;
      puVar14 = (uint *)puVar14[0xc];
      bVar16 = CARRY4(uVar12,uVar11);
      uVar12 = uVar12 + uVar11;
      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +
                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +
                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;
      if (puVar14 == (uint *)0x0) break;
      if (param_2 == puVar14) {
        *param_3 = uVar12;
        param_3[1] = uVar13;
        return 1;
      }
    }
    do {
      if (param_2[0x11] != 1) {
        return 0;
      }
      puVar14 = param_2 + 9;
      puVar1 = param_2 + 6;
      puVar2 = param_2 + 8;
      puVar3 = param_2 + 7;
      puVar4 = param_2 + 6;
      puVar5 = param_2 + 8;
      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);
      puVar6 = param_2 + 4;
      uVar13 = uVar12 + *puVar6;
      puVar7 = param_2 + 5;
      param_2 = (uint *)param_2[0xc];
      bVar16 = uVar9 < uVar13;
      uVar9 = uVar9 - uVar13;
      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +
                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +
                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;
      if (param_2 == (uint *)0x0) {
        return 0;
      }
    } while (param_1 != param_2);
  }
  *param_3 = uVar9;
  param_3[1] = uVar15;
  return 1;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0xc
MOV EBX,dword ptr [ESP + 0x24]
MOV EAX,dword ptr [ESP + 0x20]
MOV ECX,dword ptr [ESP + 0x20]
MOV EDX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [EAX]
SUB EAX,dword ptr [EBX]
SBB EDX,dword ptr [EBX + 0x4]
MOV dword ptr [ESP],EAX
MOV ESI,EAX
MOV EDI,EDX
MOV dword ptr [ESP + 0x4],EDX
CMP ECX,EBX
JNZ 0x000225ca
JMP 0x0002262c
MOV EBP,dword ptr [ECX + 0x24]
MOV EDX,dword ptr [ECX + 0x18]
MOV EAX,dword ptr [ECX + 0x20]
IMUL EDX,EBP
MOV EBP,dword ptr [ECX + 0x1c]
IMUL EAX,EBP
LEA EBP,[EDX + EAX*0x1]
MOV EAX,dword ptr [ECX + 0x18]
MUL dword ptr [ECX + 0x20]
ADD EDX,EBP
ADD EAX,dword ptr [ECX + 0x10]
ADC EDX,dword ptr [ECX + 0x14]
MOV ECX,dword ptr [ECX + 0x30]
ADD ESI,EAX
ADC EDI,EDX
TEST ECX,ECX
JZ 0x000225d0
CMP EBX,ECX
JZ 0x00022648
CMP dword ptr [ECX + 0x44],0x1
JZ 0x00022598
MOV ESI,dword ptr [ESP]
MOV EDI,dword ptr [ESP + 0x4]
MOV EBP,dword ptr [ESP + 0x20]
JMP 0x00022612
MOV ECX,dword ptr [EBX + 0x24]
MOV EDX,dword ptr [EBX + 0x18]
MOV EAX,dword ptr [EBX + 0x20]
IMUL EDX,ECX
MOV ECX,dword ptr [EBX + 0x1c]
IMUL EAX,ECX
LEA ECX,[EDX + EAX*0x1]
MOV EAX,dword ptr [EBX + 0x18]
MUL dword ptr [EBX + 0x20]
ADD EDX,ECX
ADD EAX,dword ptr [EBX + 0x10]
ADC EDX,dword ptr [EBX + 0x14]
MOV EBX,dword ptr [EBX + 0x30]
SUB ESI,EAX
SBB EDI,EDX
TEST EBX,EBX
JZ 0x00022618
CMP EBP,EBX
JZ 0x00022628
CMP dword ptr [EBX + 0x44],0x1
JZ 0x000225e0
ADD ESP,0xc
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,ESI
MOV EDX,EDI
MOV EDI,dword ptr [ESP + 0x28]
MOV dword ptr [EDI],EAX
MOV EAX,0x1
MOV dword ptr [EDI + 0x4],EDX
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESP + 0x28]
MOV dword ptr [EAX],ESI
MOV dword ptr [EAX + 0x4],EDI
ADD ESP,0xc
MOV EAX,0x1
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}\n\n" (function_definition "undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" type_identifier (function_declarator "FUN_00022560(uint *param_1,uint *param_2,uint *param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,uint *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "bool bVar16;" primitive_type identifier ;) (expression_statement "uVar9 = *param_1 - *param_2;" (assignment_expression "uVar9 = *param_1 - *param_2" identifier = (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" * identifier) - (pointer_expression "*param_2" * identifier))) ;) (expression_statement "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);" (assignment_expression "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" identifier = (binary_expression "(param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" (parenthesized_expression "(param_1[1] - param_2[1])" ( (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (subscript_expression "param_2[1]" identifier [ number_literal ])) )) - (call_expression "(uint)(*param_1 < *param_2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*param_1 < *param_2)" ( (binary_expression "*param_1 < *param_2" (pointer_expression "*param_1" * identifier) < (pointer_expression "*param_2" * identifier)) ))))) ;) (expression_statement "puVar14 = param_1;" (assignment_expression "puVar14 = param_1" identifier = identifier) ;) (expression_statement "uVar12 = uVar9;" (assignment_expression "uVar12 = uVar9" identifier = identifier) ;) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" identifier = identifier) ;) (if_statement "if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" if (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) (compound_statement "{\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" { (while_statement "while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" while (parenthesized_expression "(puVar14[0x11] == 1)" ( (binary_expression "puVar14[0x11] == 1" (subscript_expression "puVar14[0x11]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" { (expression_statement "puVar1 = puVar14 + 9;" (assignment_expression "puVar1 = puVar14 + 9" identifier = (binary_expression "puVar14 + 9" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar14 + 6;" (assignment_expression "puVar2 = puVar14 + 6" identifier = (binary_expression "puVar14 + 6" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar14 + 8;" (assignment_expression "puVar3 = puVar14 + 8" identifier = (binary_expression "puVar14 + 8" identifier + number_literal)) ;) (expression_statement "puVar4 = puVar14 + 7;" (assignment_expression "puVar4 = puVar14 + 7" identifier = (binary_expression "puVar14 + 7" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar14 + 6;" (assignment_expression "puVar5 = puVar14 + 6" identifier = (binary_expression "puVar14 + 6" identifier + number_literal)) ;) (expression_statement "puVar6 = puVar14 + 8;" (assignment_expression "puVar6 = puVar14 + 8" identifier = (binary_expression "puVar14 + 8" identifier + number_literal)) ;) (expression_statement "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);" (assignment_expression "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" identifier = (call_expression "(uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*puVar5 * (ulonglong)*puVar6)" ( (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) )))) ;) (expression_statement "puVar7 = puVar14 + 4;" (assignment_expression "puVar7 = puVar14 + 4" identifier = (binary_expression "puVar14 + 4" identifier + number_literal)) ;) (expression_statement "uVar11 = uVar10 + *puVar7;" (assignment_expression "uVar11 = uVar10 + *puVar7" identifier = (binary_expression "uVar10 + *puVar7" identifier + (pointer_expression "*puVar7" * identifier))) ;) (expression_statement "puVar8 = puVar14 + 5;" (assignment_expression "puVar8 = puVar14 + 5" identifier = (binary_expression "puVar14 + 5" identifier + number_literal)) ;) (expression_statement "puVar14 = (uint *)puVar14[0xc];" (assignment_expression "puVar14 = (uint *)puVar14[0xc]" identifier = (cast_expression "(uint *)puVar14[0xc]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar14[0xc]" identifier [ number_literal ]))) ;) (expression_statement "bVar16 = CARRY4(uVar12,uVar11);" (assignment_expression "bVar16 = CARRY4(uVar12,uVar11)" identifier = (call_expression "CARRY4(uVar12,uVar11)" identifier (argument_list "(uVar12,uVar11)" ( identifier , identifier )))) ;) (expression_statement "uVar12 = uVar12 + uVar11;" (assignment_expression "uVar12 = uVar12 + uVar11" identifier = (binary_expression "uVar12 + uVar11" identifier + identifier)) ;) (expression_statement "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;" (assignment_expression "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" identifier = (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7)" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" identifier + (cast_expression "(int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" ( (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20" (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) >> number_literal) )))) + (binary_expression "*puVar2 * *puVar1" (pointer_expression "*puVar2" * identifier) * (pointer_expression "*puVar1" * identifier))) + (binary_expression "*puVar3 * *puVar4" (pointer_expression "*puVar3" * identifier) * (pointer_expression "*puVar4" * identifier))) + (pointer_expression "*puVar8" * identifier)) + (cast_expression "(uint)CARRY4(uVar10,*puVar7)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,*puVar7)" identifier (argument_list "(uVar10,*puVar7)" ( identifier , (pointer_expression "*puVar7" * identifier) ))))) + (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (puVar14 == (uint *)0x0) break;" if (parenthesized_expression "(puVar14 == (uint *)0x0)" ( (binary_expression "puVar14 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (if_statement "if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" if (parenthesized_expression "(param_2 == puVar14)" ( (binary_expression "param_2 == puVar14" identifier == identifier) )) (compound_statement "{\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" { (expression_statement "*param_3 = uVar12;" (assignment_expression "*param_3 = uVar12" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_3[1] = uVar13;" (assignment_expression "param_3[1] = uVar13" (subscript_expression "param_3[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return 1;" return number_literal ;) })) })) (do_statement "do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);" do (compound_statement "{\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    }" { (if_statement "if (param_2[0x11] != 1) {\n        return 0;\n      }" if (parenthesized_expression "(param_2[0x11] != 1)" ( (binary_expression "param_2[0x11] != 1" (subscript_expression "param_2[0x11]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar14 = param_2 + 9;" (assignment_expression "puVar14 = param_2 + 9" identifier = (binary_expression "param_2 + 9" identifier + number_literal)) ;) (expression_statement "puVar1 = param_2 + 6;" (assignment_expression "puVar1 = param_2 + 6" identifier = (binary_expression "param_2 + 6" identifier + number_literal)) ;) (expression_statement "puVar2 = param_2 + 8;" (assignment_expression "puVar2 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (expression_statement "puVar3 = param_2 + 7;" (assignment_expression "puVar3 = param_2 + 7" identifier = (binary_expression "param_2 + 7" identifier + number_literal)) ;) (expression_statement "puVar4 = param_2 + 6;" (assignment_expression "puVar4 = param_2 + 6" identifier = (binary_expression "param_2 + 6" identifier + number_literal)) ;) (expression_statement "puVar5 = param_2 + 8;" (assignment_expression "puVar5 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (expression_statement "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);" (assignment_expression "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" identifier = (call_expression "(uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*puVar4 * (ulonglong)*puVar5)" ( (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) )))) ;) (expression_statement "puVar6 = param_2 + 4;" (assignment_expression "puVar6 = param_2 + 4" identifier = (binary_expression "param_2 + 4" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar12 + *puVar6;" (assignment_expression "uVar13 = uVar12 + *puVar6" identifier = (binary_expression "uVar12 + *puVar6" identifier + (pointer_expression "*puVar6" * identifier))) ;) (expression_statement "puVar7 = param_2 + 5;" (assignment_expression "puVar7 = param_2 + 5" identifier = (binary_expression "param_2 + 5" identifier + number_literal)) ;) (expression_statement "param_2 = (uint *)param_2[0xc];" (assignment_expression "param_2 = (uint *)param_2[0xc]" identifier = (cast_expression "(uint *)param_2[0xc]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[0xc]" identifier [ number_literal ]))) ;) (expression_statement "bVar16 = uVar9 < uVar13;" (assignment_expression "bVar16 = uVar9 < uVar13" identifier = (binary_expression "uVar9 < uVar13" identifier < identifier)) ;) (expression_statement "uVar9 = uVar9 - uVar13;" (assignment_expression "uVar9 = uVar9 - uVar13" identifier = (binary_expression "uVar9 - uVar13" identifier - identifier)) ;) (expression_statement "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;" (assignment_expression "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" identifier = (binary_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" (parenthesized_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)))" ( (binary_expression "uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" identifier - (parenthesized_expression "((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" ( (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14" (cast_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" ( (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20" (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) >> number_literal) ))) + (binary_expression "*puVar1 * *puVar14" (pointer_expression "*puVar1" * identifier) * (pointer_expression "*puVar14" * identifier))) + (binary_expression "*puVar2 * *puVar3" (pointer_expression "*puVar2" * identifier) * (pointer_expression "*puVar3" * identifier))) + (pointer_expression "*puVar7" * identifier)) + (cast_expression "(uint)CARRY4(uVar12,*puVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar12,*puVar6)" identifier (argument_list "(uVar12,*puVar6)" ( identifier , (pointer_expression "*puVar6" * identifier) ))))) ))) )) - (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n        return 0;\n      }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) ;) })) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_3[1] = uVar15;" (assignment_expression "param_3[1] = uVar15" (subscript_expression "param_3[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nbfd_boolean frag_offset_fixed_p(fragS *frag1,fragS *frag2,offsetT *offset)\n\n{\n  offsetT *poVar1;\n  offsetT *poVar2;\n  offsetT *poVar3;\n  longlong lVar4;\n  offsetT *poVar5;\n  offsetT *poVar6;\n  offsetT *poVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  frag *pfVar12;\n  int iVar13;\n  int iVar14;\n  bool bVar15;\n  \n  uVar10 = (uint)frag1->fr_address;\n  uVar8 = uVar10 - (int)frag2->fr_address;\n  iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address);\n  pfVar12 = frag1;\n  uVar10 = uVar8;\n  iVar14 = iVar13;\n  if (frag1 != frag2) {\n    while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }\n    do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);\n  }\n  *(uint *)offset = uVar8;\n  *(int *)((int)offset + 4) = iVar13;\n  return 1;\n}\n\n" comment (function_definition "bfd_boolean frag_offset_fixed_p(fragS *frag1,fragS *frag2,offsetT *offset)\n\n{\n  offsetT *poVar1;\n  offsetT *poVar2;\n  offsetT *poVar3;\n  longlong lVar4;\n  offsetT *poVar5;\n  offsetT *poVar6;\n  offsetT *poVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  frag *pfVar12;\n  int iVar13;\n  int iVar14;\n  bool bVar15;\n  \n  uVar10 = (uint)frag1->fr_address;\n  uVar8 = uVar10 - (int)frag2->fr_address;\n  iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address);\n  pfVar12 = frag1;\n  uVar10 = uVar8;\n  iVar14 = iVar13;\n  if (frag1 != frag2) {\n    while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }\n    do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);\n  }\n  *(uint *)offset = uVar8;\n  *(int *)((int)offset + 4) = iVar13;\n  return 1;\n}" type_identifier (function_declarator "frag_offset_fixed_p(fragS *frag1,fragS *frag2,offsetT *offset)" identifier (parameter_list "(fragS *frag1,fragS *frag2,offsetT *offset)" ( (parameter_declaration "fragS *frag1" type_identifier (pointer_declarator "*frag1" * identifier)) , (parameter_declaration "fragS *frag2" type_identifier (pointer_declarator "*frag2" * identifier)) , (parameter_declaration "offsetT *offset" type_identifier (pointer_declarator "*offset" * identifier)) ))) (compound_statement "{\n  offsetT *poVar1;\n  offsetT *poVar2;\n  offsetT *poVar3;\n  longlong lVar4;\n  offsetT *poVar5;\n  offsetT *poVar6;\n  offsetT *poVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  frag *pfVar12;\n  int iVar13;\n  int iVar14;\n  bool bVar15;\n  \n  uVar10 = (uint)frag1->fr_address;\n  uVar8 = uVar10 - (int)frag2->fr_address;\n  iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address);\n  pfVar12 = frag1;\n  uVar10 = uVar8;\n  iVar14 = iVar13;\n  if (frag1 != frag2) {\n    while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }\n    do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);\n  }\n  *(uint *)offset = uVar8;\n  *(int *)((int)offset + 4) = iVar13;\n  return 1;\n}" { (declaration "offsetT *poVar1;" type_identifier (pointer_declarator "*poVar1" * identifier) ;) (declaration "offsetT *poVar2;" type_identifier (pointer_declarator "*poVar2" * identifier) ;) (declaration "offsetT *poVar3;" type_identifier (pointer_declarator "*poVar3" * identifier) ;) (declaration "longlong lVar4;" type_identifier identifier ;) (declaration "offsetT *poVar5;" type_identifier (pointer_declarator "*poVar5" * identifier) ;) (declaration "offsetT *poVar6;" type_identifier (pointer_declarator "*poVar6" * identifier) ;) (declaration "offsetT *poVar7;" type_identifier (pointer_declarator "*poVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "frag *pfVar12;" type_identifier (pointer_declarator "*pfVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "bool bVar15;" primitive_type identifier ;) (expression_statement "uVar10 = (uint)frag1->fr_address;" (assignment_expression "uVar10 = (uint)frag1->fr_address" identifier = (cast_expression "(uint)frag1->fr_address" ( (type_descriptor "uint" type_identifier) ) (field_expression "frag1->fr_address" identifier -> field_identifier))) ;) (expression_statement "uVar8 = uVar10 - (int)frag2->fr_address;" (assignment_expression "uVar8 = uVar10 - (int)frag2->fr_address" identifier = (binary_expression "uVar10 - (int)frag2->fr_address" identifier - (cast_expression "(int)frag2->fr_address" ( (type_descriptor "int" primitive_type) ) (field_expression "frag2->fr_address" identifier -> field_identifier)))) ;) (expression_statement "iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address);" (assignment_expression "iVar13 = (*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address)" identifier = (binary_expression "(*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)) -\n           (uint)(uVar10 < (uint)frag2->fr_address)" (parenthesized_expression "(*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4))" ( (binary_expression "*(int *)((int)&frag1->fr_address + 4) - *(int *)((int)&frag2->fr_address + 4)" (pointer_expression "*(int *)((int)&frag1->fr_address + 4)" * (cast_expression "(int *)((int)&frag1->fr_address + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&frag1->fr_address + 4)" ( (binary_expression "(int)&frag1->fr_address + 4" (cast_expression "(int)&frag1->fr_address" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&frag1->fr_address" & (field_expression "frag1->fr_address" identifier -> field_identifier))) + number_literal) )))) - (pointer_expression "*(int *)((int)&frag2->fr_address + 4)" * (cast_expression "(int *)((int)&frag2->fr_address + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&frag2->fr_address + 4)" ( (binary_expression "(int)&frag2->fr_address + 4" (cast_expression "(int)&frag2->fr_address" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&frag2->fr_address" & (field_expression "frag2->fr_address" identifier -> field_identifier))) + number_literal) ))))) )) - (call_expression "(uint)(uVar10 < (uint)frag2->fr_address)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar10 < (uint)frag2->fr_address)" ( (binary_expression "uVar10 < (uint)frag2->fr_address" identifier < (cast_expression "(uint)frag2->fr_address" ( (type_descriptor "uint" type_identifier) ) (field_expression "frag2->fr_address" identifier -> field_identifier))) ))))) ;) (expression_statement "pfVar12 = frag1;" (assignment_expression "pfVar12 = frag1" identifier = identifier) ;) (expression_statement "uVar10 = uVar8;" (assignment_expression "uVar10 = uVar8" identifier = identifier) ;) (expression_statement "iVar14 = iVar13;" (assignment_expression "iVar14 = iVar13" identifier = identifier) ;) (if_statement "if (frag1 != frag2) {\n    while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }\n    do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);\n  }" if (parenthesized_expression "(frag1 != frag2)" ( (binary_expression "frag1 != frag2" identifier != identifier) )) (compound_statement "{\n    while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }\n    do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);\n  }" { (while_statement "while (pfVar12->fr_type == rs_fill) {\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }" while (parenthesized_expression "(pfVar12->fr_type == rs_fill)" ( (binary_expression "pfVar12->fr_type == rs_fill" (field_expression "pfVar12->fr_type" identifier -> field_identifier) == identifier) )) (compound_statement "{\n      poVar5 = &pfVar12->fr_offset;\n      poVar1 = &pfVar12->fr_var;\n      poVar2 = &pfVar12->fr_offset;\n      poVar6 = &pfVar12->fr_var;\n      lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;\n      uVar11 = (uint)lVar4;\n      poVar3 = &pfVar12->fr_fix;\n      uVar9 = uVar11 + (int)*poVar3;\n      poVar7 = &pfVar12->fr_fix;\n      pfVar12 = pfVar12->fr_next;\n      bVar15 = CARRY4(uVar10,uVar9);\n      uVar10 = uVar10 + uVar9;\n      iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;\n      if (pfVar12 == (frag *)0x0) break;\n      if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }\n    }" { (expression_statement "poVar5 = &pfVar12->fr_offset;" (assignment_expression "poVar5 = &pfVar12->fr_offset" identifier = (pointer_expression "&pfVar12->fr_offset" & (field_expression "pfVar12->fr_offset" identifier -> field_identifier))) ;) (expression_statement "poVar1 = &pfVar12->fr_var;" (assignment_expression "poVar1 = &pfVar12->fr_var" identifier = (pointer_expression "&pfVar12->fr_var" & (field_expression "pfVar12->fr_var" identifier -> field_identifier))) ;) (expression_statement "poVar2 = &pfVar12->fr_offset;" (assignment_expression "poVar2 = &pfVar12->fr_offset" identifier = (pointer_expression "&pfVar12->fr_offset" & (field_expression "pfVar12->fr_offset" identifier -> field_identifier))) ;) (expression_statement "poVar6 = &pfVar12->fr_var;" (assignment_expression "poVar6 = &pfVar12->fr_var" identifier = (pointer_expression "&pfVar12->fr_var" & (field_expression "pfVar12->fr_var" identifier -> field_identifier))) ;) (expression_statement "lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset;" (assignment_expression "lVar4 = (ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset" identifier = (binary_expression "(ulonglong)(uint)pfVar12->fr_var * (ulonglong)(uint)pfVar12->fr_offset" (cast_expression "(ulonglong)(uint)pfVar12->fr_var" ( (type_descriptor "ulonglong" type_identifier) ) (cast_expression "(uint)pfVar12->fr_var" ( (type_descriptor "uint" type_identifier) ) (field_expression "pfVar12->fr_var" identifier -> field_identifier))) * (cast_expression "(ulonglong)(uint)pfVar12->fr_offset" ( (type_descriptor "ulonglong" type_identifier) ) (cast_expression "(uint)pfVar12->fr_offset" ( (type_descriptor "uint" type_identifier) ) (field_expression "pfVar12->fr_offset" identifier -> field_identifier))))) ;) (expression_statement "uVar11 = (uint)lVar4;" (assignment_expression "uVar11 = (uint)lVar4" identifier = (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "poVar3 = &pfVar12->fr_fix;" (assignment_expression "poVar3 = &pfVar12->fr_fix" identifier = (pointer_expression "&pfVar12->fr_fix" & (field_expression "pfVar12->fr_fix" identifier -> field_identifier))) ;) (expression_statement "uVar9 = uVar11 + (int)*poVar3;" (assignment_expression "uVar9 = uVar11 + (int)*poVar3" identifier = (binary_expression "uVar11 + (int)*poVar3" identifier + (cast_expression "(int)*poVar3" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar3" * identifier)))) ;) (expression_statement "poVar7 = &pfVar12->fr_fix;" (assignment_expression "poVar7 = &pfVar12->fr_fix" identifier = (pointer_expression "&pfVar12->fr_fix" & (field_expression "pfVar12->fr_fix" identifier -> field_identifier))) ;) (expression_statement "pfVar12 = pfVar12->fr_next;" (assignment_expression "pfVar12 = pfVar12->fr_next" identifier = (field_expression "pfVar12->fr_next" identifier -> field_identifier)) ;) (expression_statement "bVar15 = CARRY4(uVar10,uVar9);" (assignment_expression "bVar15 = CARRY4(uVar10,uVar9)" identifier = (call_expression "CARRY4(uVar10,uVar9)" identifier (argument_list "(uVar10,uVar9)" ( identifier , identifier )))) ;) (expression_statement "uVar10 = uVar10 + uVar9;" (assignment_expression "uVar10 = uVar10 + uVar9" identifier = (binary_expression "uVar10 + uVar9" identifier + identifier)) ;) (expression_statement "iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15;" (assignment_expression "iVar14 = iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15" identifier = (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3) + (uint)bVar15" (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                        (uint)CARRY4(uVar11,(uint)*poVar3)" (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4)" (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                        (int)*poVar2 * *(int *)((int)poVar6 + 4)" (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20) +\n                        (int)*poVar1 * *(int *)((int)poVar5 + 4)" (binary_expression "iVar14 + (int)((ulonglong)lVar4 >> 0x20)" identifier + (cast_expression "(int)((ulonglong)lVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar4 >> 0x20)" ( (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) + (binary_expression "(int)*poVar1 * *(int *)((int)poVar5 + 4)" (cast_expression "(int)*poVar1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar1" * identifier)) * (pointer_expression "*(int *)((int)poVar5 + 4)" * (cast_expression "(int *)((int)poVar5 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar5 + 4)" ( (binary_expression "(int)poVar5 + 4" (cast_expression "(int)poVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))))) + (binary_expression "(int)*poVar2 * *(int *)((int)poVar6 + 4)" (cast_expression "(int)*poVar2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar2" * identifier)) * (pointer_expression "*(int *)((int)poVar6 + 4)" * (cast_expression "(int *)((int)poVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar6 + 4)" ( (binary_expression "(int)poVar6 + 4" (cast_expression "(int)poVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))))) + (pointer_expression "*(int *)((int)poVar7 + 4)" * (cast_expression "(int *)((int)poVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar7 + 4)" ( (binary_expression "(int)poVar7 + 4" (cast_expression "(int)poVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) + (cast_expression "(uint)CARRY4(uVar11,(uint)*poVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar11,(uint)*poVar3)" identifier (argument_list "(uVar11,(uint)*poVar3)" ( identifier , (binary_expression "(uint)*poVar3" (parenthesized_expression "(uint)" ( identifier )) * identifier) ))))) + (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (pfVar12 == (frag *)0x0) break;" if (parenthesized_expression "(pfVar12 == (frag *)0x0)" ( (binary_expression "pfVar12 == (frag *)0x0" identifier == (cast_expression "(frag *)0x0" ( (type_descriptor "frag *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (if_statement "if (frag2 == pfVar12) {\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }" if (parenthesized_expression "(frag2 == pfVar12)" ( (binary_expression "frag2 == pfVar12" identifier == identifier) )) (compound_statement "{\n        *(uint *)offset = uVar10;\n        *(int *)((int)offset + 4) = iVar14;\n        return 1;\n      }" { (expression_statement "*(uint *)offset = uVar10;" (assignment_expression "*(uint *)offset = uVar10" (pointer_expression "*(uint *)offset" * (cast_expression "(uint *)offset" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(int *)((int)offset + 4) = iVar14;" (assignment_expression "*(int *)((int)offset + 4) = iVar14" (pointer_expression "*(int *)((int)offset + 4)" * (cast_expression "(int *)((int)offset + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)offset + 4)" ( (binary_expression "(int)offset + 4" (cast_expression "(int)offset" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (return_statement "return 1;" return number_literal ;) })) })) (do_statement "do {\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    } while (frag1 != frag2);" do (compound_statement "{\n      if (frag2->fr_type != rs_fill) {\n        return 0;\n      }\n      poVar5 = &frag2->fr_offset;\n      poVar1 = &frag2->fr_var;\n      poVar2 = &frag2->fr_offset;\n      poVar6 = &frag2->fr_var;\n      lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;\n      uVar10 = (uint)lVar4;\n      poVar3 = &frag2->fr_fix;\n      uVar11 = uVar10 + (int)*poVar3;\n      poVar7 = &frag2->fr_fix;\n      frag2 = frag2->fr_next;\n      bVar15 = uVar8 < uVar11;\n      uVar8 = uVar8 - uVar11;\n      iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;\n      if (frag2 == (fragS *)0x0) {\n        return 0;\n      }\n    }" { (if_statement "if (frag2->fr_type != rs_fill) {\n        return 0;\n      }" if (parenthesized_expression "(frag2->fr_type != rs_fill)" ( (binary_expression "frag2->fr_type != rs_fill" (field_expression "frag2->fr_type" identifier -> field_identifier) != identifier) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "poVar5 = &frag2->fr_offset;" (assignment_expression "poVar5 = &frag2->fr_offset" identifier = (pointer_expression "&frag2->fr_offset" & (field_expression "frag2->fr_offset" identifier -> field_identifier))) ;) (expression_statement "poVar1 = &frag2->fr_var;" (assignment_expression "poVar1 = &frag2->fr_var" identifier = (pointer_expression "&frag2->fr_var" & (field_expression "frag2->fr_var" identifier -> field_identifier))) ;) (expression_statement "poVar2 = &frag2->fr_offset;" (assignment_expression "poVar2 = &frag2->fr_offset" identifier = (pointer_expression "&frag2->fr_offset" & (field_expression "frag2->fr_offset" identifier -> field_identifier))) ;) (expression_statement "poVar6 = &frag2->fr_var;" (assignment_expression "poVar6 = &frag2->fr_var" identifier = (pointer_expression "&frag2->fr_var" & (field_expression "frag2->fr_var" identifier -> field_identifier))) ;) (expression_statement "lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset;" (assignment_expression "lVar4 = (ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset" identifier = (binary_expression "(ulonglong)(uint)frag2->fr_var * (ulonglong)(uint)frag2->fr_offset" (cast_expression "(ulonglong)(uint)frag2->fr_var" ( (type_descriptor "ulonglong" type_identifier) ) (cast_expression "(uint)frag2->fr_var" ( (type_descriptor "uint" type_identifier) ) (field_expression "frag2->fr_var" identifier -> field_identifier))) * (cast_expression "(ulonglong)(uint)frag2->fr_offset" ( (type_descriptor "ulonglong" type_identifier) ) (cast_expression "(uint)frag2->fr_offset" ( (type_descriptor "uint" type_identifier) ) (field_expression "frag2->fr_offset" identifier -> field_identifier))))) ;) (expression_statement "uVar10 = (uint)lVar4;" (assignment_expression "uVar10 = (uint)lVar4" identifier = (cast_expression "(uint)lVar4" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "poVar3 = &frag2->fr_fix;" (assignment_expression "poVar3 = &frag2->fr_fix" identifier = (pointer_expression "&frag2->fr_fix" & (field_expression "frag2->fr_fix" identifier -> field_identifier))) ;) (expression_statement "uVar11 = uVar10 + (int)*poVar3;" (assignment_expression "uVar11 = uVar10 + (int)*poVar3" identifier = (binary_expression "uVar10 + (int)*poVar3" identifier + (cast_expression "(int)*poVar3" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar3" * identifier)))) ;) (expression_statement "poVar7 = &frag2->fr_fix;" (assignment_expression "poVar7 = &frag2->fr_fix" identifier = (pointer_expression "&frag2->fr_fix" & (field_expression "frag2->fr_fix" identifier -> field_identifier))) ;) (expression_statement "frag2 = frag2->fr_next;" (assignment_expression "frag2 = frag2->fr_next" identifier = (field_expression "frag2->fr_next" identifier -> field_identifier)) ;) (expression_statement "bVar15 = uVar8 < uVar11;" (assignment_expression "bVar15 = uVar8 < uVar11" identifier = (binary_expression "uVar8 < uVar11" identifier < identifier)) ;) (expression_statement "uVar8 = uVar8 - uVar11;" (assignment_expression "uVar8 = uVar8 - uVar11" identifier = (binary_expression "uVar8 - uVar11" identifier - identifier)) ;) (expression_statement "iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15;" (assignment_expression "iVar13 = (iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15" identifier = (binary_expression "(iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))) - (uint)bVar15" (parenthesized_expression "(iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3)))" ( (binary_expression "iVar13 - ((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))" identifier - (parenthesized_expression "((int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3))" ( (binary_expression "(int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +\n                         (uint)CARRY4(uVar10,(uint)*poVar3)" (binary_expression "(int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4)" (binary_expression "(int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +\n                          (int)*poVar2 * *(int *)((int)poVar6 + 4)" (binary_expression "(int)((ulonglong)lVar4 >> 0x20) +\n                          (int)*poVar1 * *(int *)((int)poVar5 + 4)" (cast_expression "(int)((ulonglong)lVar4 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar4 >> 0x20)" ( (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (binary_expression "(int)*poVar1 * *(int *)((int)poVar5 + 4)" (cast_expression "(int)*poVar1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar1" * identifier)) * (pointer_expression "*(int *)((int)poVar5 + 4)" * (cast_expression "(int *)((int)poVar5 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar5 + 4)" ( (binary_expression "(int)poVar5 + 4" (cast_expression "(int)poVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))))) + (binary_expression "(int)*poVar2 * *(int *)((int)poVar6 + 4)" (cast_expression "(int)*poVar2" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*poVar2" * identifier)) * (pointer_expression "*(int *)((int)poVar6 + 4)" * (cast_expression "(int *)((int)poVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar6 + 4)" ( (binary_expression "(int)poVar6 + 4" (cast_expression "(int)poVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))))) + (pointer_expression "*(int *)((int)poVar7 + 4)" * (cast_expression "(int *)((int)poVar7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)poVar7 + 4)" ( (binary_expression "(int)poVar7 + 4" (cast_expression "(int)poVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) + (cast_expression "(uint)CARRY4(uVar10,(uint)*poVar3)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,(uint)*poVar3)" identifier (argument_list "(uVar10,(uint)*poVar3)" ( identifier , (binary_expression "(uint)*poVar3" (parenthesized_expression "(uint)" ( identifier )) * identifier) ))))) ))) )) - (cast_expression "(uint)bVar15" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (frag2 == (fragS *)0x0) {\n        return 0;\n      }" if (parenthesized_expression "(frag2 == (fragS *)0x0)" ( (binary_expression "frag2 == (fragS *)0x0" identifier == (cast_expression "(fragS *)0x0" ( (type_descriptor "fragS *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "(frag1 != frag2)" ( (binary_expression "frag1 != frag2" identifier != identifier) )) ;) })) (expression_statement "*(uint *)offset = uVar8;" (assignment_expression "*(uint *)offset = uVar8" (pointer_expression "*(uint *)offset" * (cast_expression "(uint *)offset" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(int *)((int)offset + 4) = iVar13;" (assignment_expression "*(int *)((int)offset + 4) = iVar13" (pointer_expression "*(int *)((int)offset + 4)" * (cast_expression "(int *)((int)offset + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)offset + 4)" ( (binary_expression "(int)offset + 4" (cast_expression "(int)offset" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}\n\n" (function_definition "undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" type_identifier (function_declarator "FUN_00022560(uint *param_1,uint *param_2,uint *param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,uint *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "bool bVar16;" primitive_type identifier ;) (expression_statement "uVar9 = *param_1 - *param_2;" (assignment_expression "uVar9 = *param_1 - *param_2" identifier = (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" * identifier) - (pointer_expression "*param_2" * identifier))) ;) (expression_statement "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);" (assignment_expression "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" identifier = (binary_expression "(param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" (parenthesized_expression "(param_1[1] - param_2[1])" ( (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (subscript_expression "param_2[1]" identifier [ number_literal ])) )) - (call_expression "(uint)(*param_1 < *param_2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*param_1 < *param_2)" ( (binary_expression "*param_1 < *param_2" (pointer_expression "*param_1" * identifier) < (pointer_expression "*param_2" * identifier)) ))))) ;) (expression_statement "puVar14 = param_1;" (assignment_expression "puVar14 = param_1" identifier = identifier) ;) (expression_statement "uVar12 = uVar9;" (assignment_expression "uVar12 = uVar9" identifier = identifier) ;) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" identifier = identifier) ;) (if_statement "if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" if (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) (compound_statement "{\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" { (while_statement "while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" while (parenthesized_expression "(puVar14[0x11] == 1)" ( (binary_expression "puVar14[0x11] == 1" (subscript_expression "puVar14[0x11]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" { (expression_statement "puVar1 = puVar14 + 9;" (assignment_expression "puVar1 = puVar14 + 9" identifier = (binary_expression "puVar14 + 9" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar14 + 6;" (assignment_expression "puVar2 = puVar14 + 6" identifier = (binary_expression "puVar14 + 6" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar14 + 8;" (assignment_expression "puVar3 = puVar14 + 8" identifier = (binary_expression "puVar14 + 8" identifier + number_literal)) ;) (expression_statement "puVar4 = puVar14 + 7;" (assignment_expression "puVar4 = puVar14 + 7" identifier = (binary_expression "puVar14 + 7" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar14 + 6;" (assignment_expression "puVar5 = puVar14 + 6" identifier = (binary_expression "puVar14 + 6" identifier + number_literal)) ;) (expression_statement "puVar6 = puVar14 + 8;" (assignment_expression "puVar6 = puVar14 + 8" identifier = (binary_expression "puVar14 + 8" identifier + number_literal)) ;) (expression_statement "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);" (assignment_expression "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" identifier = (call_expression "(uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*puVar5 * (ulonglong)*puVar6)" ( (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) )))) ;) (expression_statement "puVar7 = puVar14 + 4;" (assignment_expression "puVar7 = puVar14 + 4" identifier = (binary_expression "puVar14 + 4" identifier + number_literal)) ;) (expression_statement "uVar11 = uVar10 + *puVar7;" (assignment_expression "uVar11 = uVar10 + *puVar7" identifier = (binary_expression "uVar10 + *puVar7" identifier + (pointer_expression "*puVar7" * identifier))) ;) (expression_statement "puVar8 = puVar14 + 5;" (assignment_expression "puVar8 = puVar14 + 5" identifier = (binary_expression "puVar14 + 5" identifier + number_literal)) ;) (expression_statement "puVar14 = (uint *)puVar14[0xc];" (assignment_expression "puVar14 = (uint *)puVar14[0xc]" identifier = (cast_expression "(uint *)puVar14[0xc]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar14[0xc]" identifier [ number_literal ]))) ;) (expression_statement "bVar16 = CARRY4(uVar12,uVar11);" (assignment_expression "bVar16 = CARRY4(uVar12,uVar11)" identifier = (call_expression "CARRY4(uVar12,uVar11)" identifier (argument_list "(uVar12,uVar11)" ( identifier , identifier )))) ;) (expression_statement "uVar12 = uVar12 + uVar11;" (assignment_expression "uVar12 = uVar12 + uVar11" identifier = (binary_expression "uVar12 + uVar11" identifier + identifier)) ;) (expression_statement "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;" (assignment_expression "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" identifier = (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7)" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" identifier + (cast_expression "(int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" ( (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20" (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) >> number_literal) )))) + (binary_expression "*puVar2 * *puVar1" (pointer_expression "*puVar2" * identifier) * (pointer_expression "*puVar1" * identifier))) + (binary_expression "*puVar3 * *puVar4" (pointer_expression "*puVar3" * identifier) * (pointer_expression "*puVar4" * identifier))) + (pointer_expression "*puVar8" * identifier)) + (cast_expression "(uint)CARRY4(uVar10,*puVar7)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar10,*puVar7)" identifier (argument_list "(uVar10,*puVar7)" ( identifier , (pointer_expression "*puVar7" * identifier) ))))) + (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (puVar14 == (uint *)0x0) break;" if (parenthesized_expression "(puVar14 == (uint *)0x0)" ( (binary_expression "puVar14 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (if_statement "if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" if (parenthesized_expression "(param_2 == puVar14)" ( (binary_expression "param_2 == puVar14" identifier == identifier) )) (compound_statement "{\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" { (expression_statement "*param_3 = uVar12;" (assignment_expression "*param_3 = uVar12" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_3[1] = uVar13;" (assignment_expression "param_3[1] = uVar13" (subscript_expression "param_3[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return 1;" return number_literal ;) })) })) (do_statement "do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);" do (compound_statement "{\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    }" { (if_statement "if (param_2[0x11] != 1) {\n        return 0;\n      }" if (parenthesized_expression "(param_2[0x11] != 1)" ( (binary_expression "param_2[0x11] != 1" (subscript_expression "param_2[0x11]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar14 = param_2 + 9;" (assignment_expression "puVar14 = param_2 + 9" identifier = (binary_expression "param_2 + 9" identifier + number_literal)) ;) (expression_statement "puVar1 = param_2 + 6;" (assignment_expression "puVar1 = param_2 + 6" identifier = (binary_expression "param_2 + 6" identifier + number_literal)) ;) (expression_statement "puVar2 = param_2 + 8;" (assignment_expression "puVar2 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (expression_statement "puVar3 = param_2 + 7;" (assignment_expression "puVar3 = param_2 + 7" identifier = (binary_expression "param_2 + 7" identifier + number_literal)) ;) (expression_statement "puVar4 = param_2 + 6;" (assignment_expression "puVar4 = param_2 + 6" identifier = (binary_expression "param_2 + 6" identifier + number_literal)) ;) (expression_statement "puVar5 = param_2 + 8;" (assignment_expression "puVar5 = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (expression_statement "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);" (assignment_expression "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" identifier = (call_expression "(uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)*puVar4 * (ulonglong)*puVar5)" ( (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) )))) ;) (expression_statement "puVar6 = param_2 + 4;" (assignment_expression "puVar6 = param_2 + 4" identifier = (binary_expression "param_2 + 4" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar12 + *puVar6;" (assignment_expression "uVar13 = uVar12 + *puVar6" identifier = (binary_expression "uVar12 + *puVar6" identifier + (pointer_expression "*puVar6" * identifier))) ;) (expression_statement "puVar7 = param_2 + 5;" (assignment_expression "puVar7 = param_2 + 5" identifier = (binary_expression "param_2 + 5" identifier + number_literal)) ;) (expression_statement "param_2 = (uint *)param_2[0xc];" (assignment_expression "param_2 = (uint *)param_2[0xc]" identifier = (cast_expression "(uint *)param_2[0xc]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[0xc]" identifier [ number_literal ]))) ;) (expression_statement "bVar16 = uVar9 < uVar13;" (assignment_expression "bVar16 = uVar9 < uVar13" identifier = (binary_expression "uVar9 < uVar13" identifier < identifier)) ;) (expression_statement "uVar9 = uVar9 - uVar13;" (assignment_expression "uVar9 = uVar9 - uVar13" identifier = (binary_expression "uVar9 - uVar13" identifier - identifier)) ;) (expression_statement "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;" (assignment_expression "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" identifier = (binary_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" (parenthesized_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)))" ( (binary_expression "uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" identifier - (parenthesized_expression "((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" ( (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14" (cast_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" ( (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20" (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) >> number_literal) ))) + (binary_expression "*puVar1 * *puVar14" (pointer_expression "*puVar1" * identifier) * (pointer_expression "*puVar14" * identifier))) + (binary_expression "*puVar2 * *puVar3" (pointer_expression "*puVar2" * identifier) * (pointer_expression "*puVar3" * identifier))) + (pointer_expression "*puVar7" * identifier)) + (cast_expression "(uint)CARRY4(uVar12,*puVar6)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar12,*puVar6)" identifier (argument_list "(uVar12,*puVar6)" ( identifier , (pointer_expression "*puVar6" * identifier) ))))) ))) )) - (cast_expression "(uint)bVar16" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n        return 0;\n      }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }) while (parenthesized_expression "(param_1 != param_2)" ( (binary_expression "param_1 != param_2" identifier != identifier) )) ;) })) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_3[1] = uVar15;" (assignment_expression "param_3[1] = uVar15" (subscript_expression "param_3[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) - (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ])) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT) >> LIT) )))) + (binary_expression (pointer_expression * IDENT) * (pointer_expression * IDENT))) + (binary_expression (pointer_expression * IDENT) * (pointer_expression * IDENT))) + (pointer_expression * IDENT)) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) ))))) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return LIT ;) })) })) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT) >> LIT) ))) + (binary_expression (pointer_expression * IDENT) * (pointer_expression * IDENT))) + (binary_expression (pointer_expression * IDENT) * (pointer_expression * IDENT))) + (pointer_expression * IDENT)) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) ))))) ))) )) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_00022560(uint *param_1,uint *param_2,uint *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" (type_identifier "undefined4") (function_declarator "FUN_00022560(uint *param_1,uint *param_2,uint *param_3)" (identifier "FUN_00022560") (parameter_list "(uint *param_1,uint *param_2,uint *param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  uint *puVar3;\n  uint *puVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  uint *puVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint uVar15;\n  bool bVar16;\n  \n  uVar9 = *param_1 - *param_2;\n  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);\n  puVar14 = param_1;\n  uVar12 = uVar9;\n  uVar13 = uVar15;\n  if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }\n  *param_3 = uVar9;\n  param_3[1] = uVar15;\n  return 1;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint *puVar4;" (type_identifier "uint") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint *puVar8;" (type_identifier "uint") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "bool bVar16;" (primitive_type "bool") (identifier "bVar16") (; ";")) (expression_statement "uVar9 = *param_1 - *param_2;" (assignment_expression "uVar9 = *param_1 - *param_2" (identifier "uVar9") (= "=") (binary_expression "*param_1 - *param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (- "-") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);" (assignment_expression "uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" (identifier "uVar15") (= "=") (binary_expression "(param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2)" (parenthesized_expression "(param_1[1] - param_2[1])" (( "(") (binary_expression "param_1[1] - param_2[1]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) () ")")) (- "-") (call_expression "(uint)(*param_1 < *param_2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*param_1 < *param_2)" (( "(") (binary_expression "*param_1 < *param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")"))))) (; ";")) (expression_statement "puVar14 = param_1;" (assignment_expression "puVar14 = param_1" (identifier "puVar14") (= "=") (identifier "param_1")) (; ";")) (expression_statement "uVar12 = uVar9;" (assignment_expression "uVar12 = uVar9" (identifier "uVar12") (= "=") (identifier "uVar9")) (; ";")) (expression_statement "uVar13 = uVar15;" (assignment_expression "uVar13 = uVar15" (identifier "uVar13") (= "=") (identifier "uVar15")) (; ";")) (if_statement "if (param_1 != param_2) {\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" (if "if") (parenthesized_expression "(param_1 != param_2)" (( "(") (binary_expression "param_1 != param_2" (identifier "param_1") (!= "!=") (identifier "param_2")) () ")")) (compound_statement "{\n    while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }\n    do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);\n  }" ({ "{") (while_statement "while (puVar14[0x11] == 1) {\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" (while "while") (parenthesized_expression "(puVar14[0x11] == 1)" (( "(") (binary_expression "puVar14[0x11] == 1" (subscript_expression "puVar14[0x11]" (identifier "puVar14") ([ "[") (number_literal "0x11") (] "]")) (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      puVar1 = puVar14 + 9;\n      puVar2 = puVar14 + 6;\n      puVar3 = puVar14 + 8;\n      puVar4 = puVar14 + 7;\n      puVar5 = puVar14 + 6;\n      puVar6 = puVar14 + 8;\n      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);\n      puVar7 = puVar14 + 4;\n      uVar11 = uVar10 + *puVar7;\n      puVar8 = puVar14 + 5;\n      puVar14 = (uint *)puVar14[0xc];\n      bVar16 = CARRY4(uVar12,uVar11);\n      uVar12 = uVar12 + uVar11;\n      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;\n      if (puVar14 == (uint *)0x0) break;\n      if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }\n    }" ({ "{") (expression_statement "puVar1 = puVar14 + 9;" (assignment_expression "puVar1 = puVar14 + 9" (identifier "puVar1") (= "=") (binary_expression "puVar14 + 9" (identifier "puVar14") (+ "+") (number_literal "9"))) (; ";")) (expression_statement "puVar2 = puVar14 + 6;" (assignment_expression "puVar2 = puVar14 + 6" (identifier "puVar2") (= "=") (binary_expression "puVar14 + 6" (identifier "puVar14") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "puVar3 = puVar14 + 8;" (assignment_expression "puVar3 = puVar14 + 8" (identifier "puVar3") (= "=") (binary_expression "puVar14 + 8" (identifier "puVar14") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "puVar4 = puVar14 + 7;" (assignment_expression "puVar4 = puVar14 + 7" (identifier "puVar4") (= "=") (binary_expression "puVar14 + 7" (identifier "puVar14") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "puVar5 = puVar14 + 6;" (assignment_expression "puVar5 = puVar14 + 6" (identifier "puVar5") (= "=") (binary_expression "puVar14 + 6" (identifier "puVar14") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "puVar6 = puVar14 + 8;" (assignment_expression "puVar6 = puVar14 + 8" (identifier "puVar6") (= "=") (binary_expression "puVar14 + 8" (identifier "puVar14") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);" (assignment_expression "uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" (identifier "uVar10") (= "=") (call_expression "(uint)((ulonglong)*puVar5 * (ulonglong)*puVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)*puVar5 * (ulonglong)*puVar6)" (( "(") (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar5")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "puVar6")) () ")")))) (; ";")) (expression_statement "puVar7 = puVar14 + 4;" (assignment_expression "puVar7 = puVar14 + 4" (identifier "puVar7") (= "=") (binary_expression "puVar14 + 4" (identifier "puVar14") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "uVar11 = uVar10 + *puVar7;" (assignment_expression "uVar11 = uVar10 + *puVar7" (identifier "uVar11") (= "=") (binary_expression "uVar10 + *puVar7" (identifier "uVar10") (+ "+") (pointer_expression "*puVar7" (* "*") (identifier "puVar7")))) (; ";")) (expression_statement "puVar8 = puVar14 + 5;" (assignment_expression "puVar8 = puVar14 + 5" (identifier "puVar8") (= "=") (binary_expression "puVar14 + 5" (identifier "puVar14") (+ "+") (number_literal "5"))) (; ";")) (expression_statement "puVar14 = (uint *)puVar14[0xc];" (assignment_expression "puVar14 = (uint *)puVar14[0xc]" (identifier "puVar14") (= "=") (cast_expression "(uint *)puVar14[0xc]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar14[0xc]" (identifier "puVar14") ([ "[") (number_literal "0xc") (] "]")))) (; ";")) (expression_statement "bVar16 = CARRY4(uVar12,uVar11);" (assignment_expression "bVar16 = CARRY4(uVar12,uVar11)" (identifier "bVar16") (= "=") (call_expression "CARRY4(uVar12,uVar11)" (identifier "CARRY4") (argument_list "(uVar12,uVar11)" (( "(") (identifier "uVar12") (, ",") (identifier "uVar11") () ")")))) (; ";")) (expression_statement "uVar12 = uVar12 + uVar11;" (assignment_expression "uVar12 = uVar12 + uVar11" (identifier "uVar12") (= "=") (binary_expression "uVar12 + uVar11" (identifier "uVar12") (+ "+") (identifier "uVar11"))) (; ";")) (expression_statement "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;" (assignment_expression "uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" (identifier "uVar13") (= "=") (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +\n                        (uint)CARRY4(uVar10,*puVar7)" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1 + *puVar3 * *puVar4" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +\n                        *puVar2 * *puVar1" (binary_expression "uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" (identifier "uVar13") (+ "+") (cast_expression "(int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20)" (( "(") (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20" (binary_expression "(ulonglong)*puVar5 * (ulonglong)*puVar6" (binary_expression "(ulonglong)*puVar5 * (ulonglong)" (binary_expression "(ulonglong)*puVar5" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar5")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "puVar6")) (>> ">>") (number_literal "0x20")) () ")")))) (+ "+") (binary_expression "*puVar2 * *puVar1" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (* "*") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (binary_expression "*puVar3 * *puVar4" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (* "*") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")))) (+ "+") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (+ "+") (cast_expression "(uint)CARRY4(uVar10,*puVar7)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar10,*puVar7)" (identifier "CARRY4") (argument_list "(uVar10,*puVar7)" (( "(") (identifier "uVar10") (, ",") (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) () ")"))))) (+ "+") (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")))) (; ";")) (if_statement "if (puVar14 == (uint *)0x0) break;" (if "if") (parenthesized_expression "(puVar14 == (uint *)0x0)" (( "(") (binary_expression "puVar14 == (uint *)0x0" (identifier "puVar14") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (param_2 == puVar14) {\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" (if "if") (parenthesized_expression "(param_2 == puVar14)" (( "(") (binary_expression "param_2 == puVar14" (identifier "param_2") (== "==") (identifier "puVar14")) () ")")) (compound_statement "{\n        *param_3 = uVar12;\n        param_3[1] = uVar13;\n        return 1;\n      }" ({ "{") (expression_statement "*param_3 = uVar12;" (assignment_expression "*param_3 = uVar12" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar12")) (; ";")) (expression_statement "param_3[1] = uVar13;" (assignment_expression "param_3[1] = uVar13" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar13")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}"))) (do_statement "do {\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    } while (param_1 != param_2);" (do "do") (compound_statement "{\n      if (param_2[0x11] != 1) {\n        return 0;\n      }\n      puVar14 = param_2 + 9;\n      puVar1 = param_2 + 6;\n      puVar2 = param_2 + 8;\n      puVar3 = param_2 + 7;\n      puVar4 = param_2 + 6;\n      puVar5 = param_2 + 8;\n      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);\n      puVar6 = param_2 + 4;\n      uVar13 = uVar12 + *puVar6;\n      puVar7 = param_2 + 5;\n      param_2 = (uint *)param_2[0xc];\n      bVar16 = uVar9 < uVar13;\n      uVar9 = uVar9 - uVar13;\n      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;\n      if (param_2 == (uint *)0x0) {\n        return 0;\n      }\n    }" ({ "{") (if_statement "if (param_2[0x11] != 1) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_2[0x11] != 1)" (( "(") (binary_expression "param_2[0x11] != 1" (subscript_expression "param_2[0x11]" (identifier "param_2") ([ "[") (number_literal "0x11") (] "]")) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "puVar14 = param_2 + 9;" (assignment_expression "puVar14 = param_2 + 9" (identifier "puVar14") (= "=") (binary_expression "param_2 + 9" (identifier "param_2") (+ "+") (number_literal "9"))) (; ";")) (expression_statement "puVar1 = param_2 + 6;" (assignment_expression "puVar1 = param_2 + 6" (identifier "puVar1") (= "=") (binary_expression "param_2 + 6" (identifier "param_2") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "puVar2 = param_2 + 8;" (assignment_expression "puVar2 = param_2 + 8" (identifier "puVar2") (= "=") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "puVar3 = param_2 + 7;" (assignment_expression "puVar3 = param_2 + 7" (identifier "puVar3") (= "=") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "puVar4 = param_2 + 6;" (assignment_expression "puVar4 = param_2 + 6" (identifier "puVar4") (= "=") (binary_expression "param_2 + 6" (identifier "param_2") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "puVar5 = param_2 + 8;" (assignment_expression "puVar5 = param_2 + 8" (identifier "puVar5") (= "=") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);" (assignment_expression "uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" (identifier "uVar12") (= "=") (call_expression "(uint)((ulonglong)*puVar4 * (ulonglong)*puVar5)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)*puVar4 * (ulonglong)*puVar5)" (( "(") (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar4")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "puVar5")) () ")")))) (; ";")) (expression_statement "puVar6 = param_2 + 4;" (assignment_expression "puVar6 = param_2 + 4" (identifier "puVar6") (= "=") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "uVar13 = uVar12 + *puVar6;" (assignment_expression "uVar13 = uVar12 + *puVar6" (identifier "uVar13") (= "=") (binary_expression "uVar12 + *puVar6" (identifier "uVar12") (+ "+") (pointer_expression "*puVar6" (* "*") (identifier "puVar6")))) (; ";")) (expression_statement "puVar7 = param_2 + 5;" (assignment_expression "puVar7 = param_2 + 5" (identifier "puVar7") (= "=") (binary_expression "param_2 + 5" (identifier "param_2") (+ "+") (number_literal "5"))) (; ";")) (expression_statement "param_2 = (uint *)param_2[0xc];" (assignment_expression "param_2 = (uint *)param_2[0xc]" (identifier "param_2") (= "=") (cast_expression "(uint *)param_2[0xc]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[0xc]" (identifier "param_2") ([ "[") (number_literal "0xc") (] "]")))) (; ";")) (expression_statement "bVar16 = uVar9 < uVar13;" (assignment_expression "bVar16 = uVar9 < uVar13" (identifier "bVar16") (= "=") (binary_expression "uVar9 < uVar13" (identifier "uVar9") (< "<") (identifier "uVar13"))) (; ";")) (expression_statement "uVar9 = uVar9 - uVar13;" (assignment_expression "uVar9 = uVar9 - uVar13" (identifier "uVar9") (= "=") (binary_expression "uVar9 - uVar13" (identifier "uVar9") (- "-") (identifier "uVar13"))) (; ";")) (expression_statement "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;" (assignment_expression "uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" (identifier "uVar15") (= "=") (binary_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16" (parenthesized_expression "(uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)))" (( "(") (binary_expression "uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" (identifier "uVar15") (- "-") (parenthesized_expression "((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6))" (( "(") (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +\n                         (uint)CARRY4(uVar12,*puVar6)" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14 + *puVar2 * *puVar3" (binary_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +\n                          *puVar1 * *puVar14" (cast_expression "(int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20)" (( "(") (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20" (binary_expression "(ulonglong)*puVar4 * (ulonglong)*puVar5" (binary_expression "(ulonglong)*puVar4 * (ulonglong)" (binary_expression "(ulonglong)*puVar4" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar4")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "puVar5")) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (binary_expression "*puVar1 * *puVar14" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (* "*") (pointer_expression "*puVar14" (* "*") (identifier "puVar14")))) (+ "+") (binary_expression "*puVar2 * *puVar3" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (* "*") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (+ "+") (cast_expression "(uint)CARRY4(uVar12,*puVar6)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar12,*puVar6)" (identifier "CARRY4") (argument_list "(uVar12,*puVar6)" (( "(") (identifier "uVar12") (, ",") (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) () ")"))))) () ")"))) () ")")) (- "-") (cast_expression "(uint)bVar16" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar16")))) (; ";")) (if_statement "if (param_2 == (uint *)0x0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_2 == (uint *)0x0)" (( "(") (binary_expression "param_2 == (uint *)0x0" (identifier "param_2") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != param_2)" (( "(") (binary_expression "param_1 != param_2" (identifier "param_1") (!= "!=") (identifier "param_2")) () ")")) (; ";")) (} "}"))) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "param_3[1] = uVar15;" (assignment_expression "param_3[1] = uVar15" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar15")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* WARNING: Unknown calling convention */

type_1 function_1(type_2 *var_2,type_2 *var_3,type_3 *offset)

{
  type_3 *poVar1;
  type_3 *poVar2;
  type_3 *var_9;
  type_4 lVar4;
  type_3 *poVar5;
  type_3 *poVar6;
  type_3 *poVar7;
  type_5 var_11;
  type_5 var_7;
  type_5 var_1;
  type_5 var_5;
  type_6 *var_10;
  int var_12;
  int var_8;
  bool bVar15;
  
  var_1 = (type_5)var_2->fr_address;
  var_11 = var_1 - (int)var_3->fr_address;
  var_12 = (*(int *)((int)&var_2->fr_address + 4) - *(int *)((int)&var_3->fr_address + 4)) -
           (type_5)(var_1 < (type_5)var_3->fr_address);
  var_10 = var_2;
  var_1 = var_11;
  var_8 = var_12;
  if (var_2 != var_3) {
    while (var_10->fr_type == var_4) {
      poVar5 = &var_10->fr_offset;
      poVar1 = &var_10->fr_var;
      poVar2 = &var_10->fr_offset;
      poVar6 = &var_10->fr_var;
      lVar4 = (type_7)(type_5)var_10->fr_var * (type_7)(type_5)var_10->fr_offset;
      var_5 = (type_5)lVar4;
      var_9 = &var_10->fr_fix;
      var_7 = var_5 + (int)*var_9;
      poVar7 = &var_10->fr_fix;
      var_10 = var_10->fr_next;
      bVar15 = var_6(var_1,var_7);
      var_1 = var_1 + var_7;
      var_8 = var_8 + (int)((type_7)lVar4 >> 0x20) +
                        (int)*poVar1 * *(int *)((int)poVar5 + 4) +
                        (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +
                        (type_5)var_6(var_5,(type_5)*var_9) + (type_5)bVar15;
      if (var_10 == (type_6 *)0x0) break;
      if (var_3 == var_10) {
        *(type_5 *)offset = var_1;
        *(int *)((int)offset + 4) = var_8;
        return 1;
      }
    }
    do {
      if (var_3->fr_type != var_4) {
        return 0;
      }
      poVar5 = &var_3->fr_offset;
      poVar1 = &var_3->fr_var;
      poVar2 = &var_3->fr_offset;
      poVar6 = &var_3->fr_var;
      lVar4 = (type_7)(type_5)var_3->fr_var * (type_7)(type_5)var_3->fr_offset;
      var_1 = (type_5)lVar4;
      var_9 = &var_3->fr_fix;
      var_5 = var_1 + (int)*var_9;
      poVar7 = &var_3->fr_fix;
      var_3 = var_3->fr_next;
      bVar15 = var_11 < var_5;
      var_11 = var_11 - var_5;
      var_12 = (var_12 - ((int)((type_7)lVar4 >> 0x20) +
                          (int)*poVar1 * *(int *)((int)poVar5 + 4) +
                          (int)*poVar2 * *(int *)((int)poVar6 + 4) + *(int *)((int)poVar7 + 4) +
                         (type_5)var_6(var_1,(type_5)*var_9))) - (type_5)bVar15;
      if (var_3 == (type_2 *)0x0) {
        return 0;
      }
    } while (var_2 != var_3);
  }
  *(type_5 *)offset = var_11;
  *(int *)((int)offset + 4) = var_12;
  return 1;
}


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

undefined4 MASKED(uint *param_1,uint *param_2,uint *param_3)

{
  uint *puVar1;
  uint *puVar2;
  uint *puVar3;
  uint *puVar4;
  uint *puVar5;
  uint *puVar6;
  uint *puVar7;
  uint *puVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint *puVar14;
  uint uVar15;
  bool bVar16;
  
  uVar9 = *param_1 - *param_2;
  uVar15 = (param_1[1] - param_2[1]) - (uint)(*param_1 < *param_2);
  puVar14 = param_1;
  uVar12 = uVar9;
  uVar13 = uVar15;
  if (param_1 != param_2) {
    while (puVar14[0x11] == 1) {
      puVar1 = puVar14 + 9;
      puVar2 = puVar14 + 6;
      puVar3 = puVar14 + 8;
      puVar4 = puVar14 + 7;
      puVar5 = puVar14 + 6;
      puVar6 = puVar14 + 8;
      uVar10 = (uint)((ulonglong)*puVar5 * (ulonglong)*puVar6);
      puVar7 = puVar14 + 4;
      uVar11 = uVar10 + *puVar7;
      puVar8 = puVar14 + 5;
      puVar14 = (uint *)puVar14[0xc];
      bVar16 = CARRY4(uVar12,uVar11);
      uVar12 = uVar12 + uVar11;
      uVar13 = uVar13 + (int)((ulonglong)*puVar5 * (ulonglong)*puVar6 >> 0x20) +
                        *puVar2 * *puVar1 + *puVar3 * *puVar4 + *puVar8 +
                        (uint)CARRY4(uVar10,*puVar7) + (uint)bVar16;
      if (puVar14 == (uint *)0x0) break;
      if (param_2 == puVar14) {
        *param_3 = uVar12;
        param_3[1] = uVar13;
        return 1;
      }
    }
    do {
      if (param_2[0x11] != 1) {
        return 0;
      }
      puVar14 = param_2 + 9;
      puVar1 = param_2 + 6;
      puVar2 = param_2 + 8;
      puVar3 = param_2 + 7;
      puVar4 = param_2 + 6;
      puVar5 = param_2 + 8;
      uVar12 = (uint)((ulonglong)*puVar4 * (ulonglong)*puVar5);
      puVar6 = param_2 + 4;
      uVar13 = uVar12 + *puVar6;
      puVar7 = param_2 + 5;
      param_2 = (uint *)param_2[0xc];
      bVar16 = uVar9 < uVar13;
      uVar9 = uVar9 - uVar13;
      uVar15 = (uVar15 - ((int)((ulonglong)*puVar4 * (ulonglong)*puVar5 >> 0x20) +
                          *puVar1 * *puVar14 + *puVar2 * *puVar3 + *puVar7 +
                         (uint)CARRY4(uVar12,*puVar6))) - (uint)bVar16;
      if (param_2 == (uint *)0x0) {
        return 0;
      }
    } while (param_1 != param_2);
  }
  *param_3 = uVar9;
  param_3[1] = uVar15;
  return 1;
}

