
bfd_boolean debug_write(void *handle,debug_write_fns *fns,void *fhandle)

{
  long lVar1;
  debug_name *n;
  bfd_boolean bVar2;
  debug_handle *info;
  long *plVar3;
  long *plVar4;
  
                    /* WARNING: Load size is inaccurate */
  plVar4 = *handle;
  *(undefined8 *)((long)handle + 0x50) = 0;
  *(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;
  *(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34);
  if (plVar4 != (long *)0x0) {
    do {
      lVar1 = plVar4[2];
      *(undefined4 *)((long)handle + 0x48) = 0;
      *(long *)((long)handle + 0x40) = lVar1;
      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));
      if (bVar2 == 0) {
        return 0;
      }
      plVar3 = (long *)plVar4[1];
      if (plVar3 != (long *)0x0) {
        while( true ) {
          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {
            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {
              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);
              if (bVar2 == 0) {
                return 0;
              }
            }
          }
          plVar3 = (long *)*plVar3;
          if (plVar3 == (long *)0x0) break;
          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);
          if (bVar2 == 0) {
            return 0;
          }
        }
      }
      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),
                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,
                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);
      if (bVar2 == 0) {
        return 0;
      }
      plVar4 = (long *)*plVar4;
    } while (plVar4 != (long *)0x0);
  }
  return 1;
}



undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)

{
  long lVar1;
  undefined8 *puVar2;
  int iVar3;
  long *plVar4;
  long *plVar5;
  
  plVar5 = (long *)*param_1;
  param_1[10] = 0;
  *(int *)(param_1 + 6) = (int)param_1[6] + 1;
  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);
  if (plVar5 != (long *)0x0) {
    do {
      lVar1 = plVar5[2];
      *(undefined4 *)(param_1 + 9) = 0;
      param_1[8] = lVar1;
      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));
      if (iVar3 == 0) {
        return 0;
      }
      plVar4 = (long *)plVar5[1];
      if (plVar4 != (long *)0x0) {
        while( true ) {
          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {
            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;
                puVar2 = (undefined8 *)*puVar2) {
              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);
              if (iVar3 == 0) {
                return 0;
              }
            }
          }
          plVar4 = (long *)*plVar4;
          if (plVar4 == (long *)0x0) break;
          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);
          if (iVar3 == 0) {
            return 0;
          }
        }
      }
      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);
      if (iVar3 == 0) {
        return 0;
      }
      plVar5 = (long *)*plVar5;
    } while (plVar5 != (long *)0x0);
  }
  return 1;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV EAX,dword ptr [RDI + 0x34]
MOV R14,qword ptr [RDI]
MOV qword ptr [RDI + 0x50],0x0
ADD dword ptr [RDI + 0x30],0x1
MOV dword ptr [RDI + 0x38],EAX
TEST R14,R14
JZ 0x001103b3
LEA RAX,[RSI + 0x158]
MOV R12,RDX
MOV RBP,RSI
MOV RBX,RDI
MOV qword ptr [RSP + 0x8],RAX
MOV RAX,qword ptr [R14 + 0x10]
MOV RDI,R12
MOV dword ptr [RBX + 0x48],0x0
MOV qword ptr [RBX + 0x40],RAX
MOV RAX,qword ptr [R14 + 0x8]
MOV RSI,qword ptr [RAX + 0x8]
CALL qword ptr [RBP]
TEST EAX,EAX
JZ 0x00110340
MOV R13,qword ptr [R14 + 0x8]
TEST R13,R13
JZ 0x00110387
MOV RAX,qword ptr [R13 + 0x10]
TEST RAX,RAX
JNZ 0x00110358
MOV R13,qword ptr [R13]
TEST R13,R13
JZ 0x00110387
MOV RSI,qword ptr [R13 + 0x8]
MOV RDI,R12
CALL qword ptr [RBP + 0x8]
TEST EAX,EAX
JNZ 0x0011031b
NOP dword ptr [RAX + RAX*0x1]
XOR EAX,EAX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R15,qword ptr [RAX]
TEST R15,R15
JNZ 0x00110370
JMP 0x00110324
MOV R15,qword ptr [R15]
TEST R15,R15
JZ 0x00110324
MOV RCX,R15
MOV RDX,R12
MOV RSI,RBP
MOV RDI,RBX
CALL 0x0010e640
TEST EAX,EAX
JNZ 0x00110368
JMP 0x00110340
MOV RDX,qword ptr [RSP + 0x8]
LEA RSI,[RBX + 0x48]
LEA RDI,[RBX + 0x40]
MOV RCX,R12
MOV R8,-0x1
CALL 0x0010d120
TEST EAX,EAX
JZ 0x00110340
MOV R14,qword ptr [R14]
TEST R14,R14
JNZ 0x001102f1
MOV EAX,0x1
JMP 0x00110342
(translation_unit "undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)" identifier (parameter_list "(long *param_1,undefined8 *param_2,undefined8 param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (expression_statement "plVar5 = (long *)*param_1;" (assignment_expression "plVar5 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(int *)(param_1 + 6) = (int)param_1[6] + 1;" (assignment_expression "*(int *)(param_1 + 6) = (int)param_1[6] + 1" (pointer_expression "*(int *)(param_1 + 6)" * (cast_expression "(int *)(param_1 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) )))) = (binary_expression "(int)param_1[6] + 1" (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) + number_literal)) ;) (expression_statement "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);" (assignment_expression "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34)" (pointer_expression "*(undefined4 *)(param_1 + 7)" * (cast_expression "(undefined4 *)(param_1 + 7)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)((long)param_1 + 0x34)" * (cast_expression "(undefined4 *)((long)param_1 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x34)" ( (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" if (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" { (do_statement "do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);" do (compound_statement "{\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    }" { (expression_statement "lVar1 = plVar5[2];" (assignment_expression "lVar1 = plVar5[2]" identifier = (subscript_expression "plVar5[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined4 *)(param_1 + 9) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 0" (pointer_expression "*(undefined4 *)(param_1 + 9)" * (cast_expression "(undefined4 *)(param_1 + 9)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = number_literal) ;) (expression_statement "param_1[8] = lVar1;" (assignment_expression "param_1[8] = lVar1" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));" (assignment_expression "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" identifier = (call_expression "(*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" (parenthesized_expression "(*(code *)*param_2)" ( (pointer_expression "*(code *)*param_2" * (cast_expression "(code *)*param_2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) )) (argument_list "(param_3,*(undefined8 *)(plVar5[1] + 8))" ( identifier , (pointer_expression "*(undefined8 *)(plVar5[1] + 8)" * (cast_expression "(undefined8 *)(plVar5[1] + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar5[1] + 8)" ( (binary_expression "plVar5[1] + 8" (subscript_expression "plVar5[1]" identifier [ number_literal ]) + number_literal) )))) )))) ;) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar4 = (long *)plVar5[1];" (assignment_expression "plVar4 = (long *)plVar5[1]" identifier = (cast_expression "(long *)plVar5[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar5[1]" identifier [ number_literal ]))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" { (while_statement "while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" { (if_statement "if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" if (parenthesized_expression "((undefined8 *)plVar4[2] != (undefined8 *)0x0)" ( (binary_expression "(undefined8 *)plVar4[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)plVar4[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" { (for_statement "for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" for ( (assignment_expression "puVar2 = *(undefined8 **)plVar4[2]" identifier = (pointer_expression "*(undefined8 **)plVar4[2]" * (cast_expression "(undefined8 **)plVar4[2]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" { (expression_statement "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);" (assignment_expression "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2)" identifier = (call_expression "FUN_0010e640(param_1,param_2,param_3,puVar2)" identifier (argument_list "(param_1,param_2,param_3,puVar2)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n                return 0;\n              }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                return 0;\n              }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (plVar4 == (long *)0x0) break;" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);" (assignment_expression "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1])" identifier = (call_expression "(*(code *)param_2[1])(param_3,plVar4[1])" (parenthesized_expression "(*(code *)param_2[1])" ( (pointer_expression "*(code *)param_2[1]" * (cast_expression "(code *)param_2[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (argument_list "(param_3,plVar4[1])" ( identifier , (subscript_expression "plVar4[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar3 == 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);" (assignment_expression "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" identifier = (call_expression "FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" identifier (argument_list "(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" ( (binary_expression "param_1 + 8" identifier + number_literal) , (binary_expression "param_1 + 9" identifier + number_literal) , (binary_expression "param_2 + 0x2b" identifier + number_literal) , identifier , number_literal )))) ;) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar5 = (long *)*plVar5;" (assignment_expression "plVar5 = (long *)*plVar5" identifier = (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier))) ;) }) while (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "bfd_boolean debug_write(void *handle,debug_write_fns *fns,void *fhandle)\n\n{\n  long lVar1;\n  debug_name *n;\n  bfd_boolean bVar2;\n  debug_handle *info;\n  long *plVar3;\n  long *plVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  plVar4 = *handle;\n  *(undefined8 *)((long)handle + 0x50) = 0;\n  *(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;\n  *(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34);\n  if (plVar4 != (long *)0x0) {\n    do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  return 1;\n}\n\n" (function_definition "bfd_boolean debug_write(void *handle,debug_write_fns *fns,void *fhandle)\n\n{\n  long lVar1;\n  debug_name *n;\n  bfd_boolean bVar2;\n  debug_handle *info;\n  long *plVar3;\n  long *plVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  plVar4 = *handle;\n  *(undefined8 *)((long)handle + 0x50) = 0;\n  *(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;\n  *(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34);\n  if (plVar4 != (long *)0x0) {\n    do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  return 1;\n}" type_identifier (function_declarator "debug_write(void *handle,debug_write_fns *fns,void *fhandle)" identifier (parameter_list "(void *handle,debug_write_fns *fns,void *fhandle)" ( (parameter_declaration "void *handle" primitive_type (pointer_declarator "*handle" * identifier)) , (parameter_declaration "debug_write_fns *fns" type_identifier (pointer_declarator "*fns" * identifier)) , (parameter_declaration "void *fhandle" primitive_type (pointer_declarator "*fhandle" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  debug_name *n;\n  bfd_boolean bVar2;\n  debug_handle *info;\n  long *plVar3;\n  long *plVar4;\n  \n                    /* WARNING: Load size is inaccurate */\n  plVar4 = *handle;\n  *(undefined8 *)((long)handle + 0x50) = 0;\n  *(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;\n  *(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34);\n  if (plVar4 != (long *)0x0) {\n    do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  return 1;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "debug_name *n;" type_identifier (pointer_declarator "*n" * identifier) ;) (declaration "bfd_boolean bVar2;" type_identifier identifier ;) (declaration "debug_handle *info;" type_identifier (pointer_declarator "*info" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) comment (expression_statement "plVar4 = *handle;" (assignment_expression "plVar4 = *handle" identifier = (pointer_expression "*handle" * identifier)) ;) (expression_statement "*(undefined8 *)((long)handle + 0x50) = 0;" (assignment_expression "*(undefined8 *)((long)handle + 0x50) = 0" (pointer_expression "*(undefined8 *)((long)handle + 0x50)" * (cast_expression "(undefined8 *)((long)handle + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x50)" ( (binary_expression "(long)handle + 0x50" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;" (assignment_expression "*(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1" (pointer_expression "*(int *)((long)handle + 0x30)" * (cast_expression "(int *)((long)handle + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x30)" ( (binary_expression "(long)handle + 0x30" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "*(int *)((long)handle + 0x30) + 1" (pointer_expression "*(int *)((long)handle + 0x30)" * (cast_expression "(int *)((long)handle + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x30)" ( (binary_expression "(long)handle + 0x30" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal)) ;) (expression_statement "*(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34);" (assignment_expression "*(undefined4 *)((long)handle + 0x38) = *(undefined4 *)((long)handle + 0x34)" (pointer_expression "*(undefined4 *)((long)handle + 0x38)" * (cast_expression "(undefined4 *)((long)handle + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x38)" ( (binary_expression "(long)handle + 0x38" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (pointer_expression "*(undefined4 *)((long)handle + 0x34)" * (cast_expression "(undefined4 *)((long)handle + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x34)" ( (binary_expression "(long)handle + 0x34" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n    do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" { (do_statement "do {\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);" do (compound_statement "{\n      lVar1 = plVar4[2];\n      *(undefined4 *)((long)handle + 0x48) = 0;\n      *(long *)((long)handle + 0x40) = lVar1;\n      bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar3 = (long *)plVar4[1];\n      if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }\n      bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);\n      if (bVar2 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)*plVar4;\n    }" { (expression_statement "lVar1 = plVar4[2];" (assignment_expression "lVar1 = plVar4[2]" identifier = (subscript_expression "plVar4[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined4 *)((long)handle + 0x48) = 0;" (assignment_expression "*(undefined4 *)((long)handle + 0x48) = 0" (pointer_expression "*(undefined4 *)((long)handle + 0x48)" * (cast_expression "(undefined4 *)((long)handle + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x48)" ( (binary_expression "(long)handle + 0x48" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(long *)((long)handle + 0x40) = lVar1;" (assignment_expression "*(long *)((long)handle + 0x40) = lVar1" (pointer_expression "*(long *)((long)handle + 0x40)" * (cast_expression "(long *)((long)handle + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x40)" ( (binary_expression "(long)handle + 0x40" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8));" (assignment_expression "bVar2 = (*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8))" identifier = (call_expression "(*fns->start_compilation_unit)(fhandle,*(char **)(plVar4[1] + 8))" (parenthesized_expression "(*fns->start_compilation_unit)" ( (pointer_expression "*fns->start_compilation_unit" * (field_expression "fns->start_compilation_unit" identifier -> field_identifier)) )) (argument_list "(fhandle,*(char **)(plVar4[1] + 8))" ( identifier , (pointer_expression "*(char **)(plVar4[1] + 8)" * (cast_expression "(char **)(plVar4[1] + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(plVar4[1] + 8)" ( (binary_expression "plVar4[1] + 8" (subscript_expression "plVar4[1]" identifier [ number_literal ]) + number_literal) )))) )))) ;) (if_statement "if (bVar2 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar3 = (long *)plVar4[1];" (assignment_expression "plVar3 = (long *)plVar4[1]" identifier = (cast_expression "(long *)plVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ]))) ;) (if_statement "if (plVar3 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }" if (parenthesized_expression "(plVar3 != (long *)0x0)" ( (binary_expression "plVar3 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }\n      }" { (while_statement "while( true ) {\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar3 = (long *)*plVar3;\n          if (plVar3 == (long *)0x0) break;\n          bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);\n          if (bVar2 == 0) {\n            return 0;\n          }\n        }" { (if_statement "if ((undefined8 *)plVar3[2] != (undefined8 *)0x0) {\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }" if (parenthesized_expression "((undefined8 *)plVar3[2] != (undefined8 *)0x0)" ( (binary_expression "(undefined8 *)plVar3[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)plVar3[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar3[2]" identifier [ number_literal ])) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }\n          }" { (for_statement "for (n = *(debug_name **)plVar3[2]; n != (debug_name *)0x0; n = n->next) {\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }" for ( (assignment_expression "n = *(debug_name **)plVar3[2]" identifier = (pointer_expression "*(debug_name **)plVar3[2]" * (cast_expression "(debug_name **)plVar3[2]" ( (type_descriptor "debug_name **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "plVar3[2]" identifier [ number_literal ])))) ; (binary_expression "n != (debug_name *)0x0" identifier != (cast_expression "(debug_name *)0x0" ( (type_descriptor "debug_name *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "n = n->next" identifier = (field_expression "n->next" identifier -> field_identifier)) ) (compound_statement "{\n              bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);\n              if (bVar2 == 0) {\n                return 0;\n              }\n            }" { (expression_statement "bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n);" (assignment_expression "bVar2 = debug_write_name((debug_handle *)handle,fns,fhandle,n)" identifier = (call_expression "debug_write_name((debug_handle *)handle,fns,fhandle,n)" identifier (argument_list "((debug_handle *)handle,fns,fhandle,n)" ( (cast_expression "(debug_handle *)handle" ( (type_descriptor "debug_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , identifier )))) ;) (if_statement "if (bVar2 == 0) {\n                return 0;\n              }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n                return 0;\n              }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "plVar3 = (long *)*plVar3;" (assignment_expression "plVar3 = (long *)*plVar3" identifier = (cast_expression "(long *)*plVar3" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar3" * identifier))) ;) (if_statement "if (plVar3 == (long *)0x0) break;" if (parenthesized_expression "(plVar3 == (long *)0x0)" ( (binary_expression "plVar3 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1]);" (assignment_expression "bVar2 = (*fns->start_source)(fhandle,(char *)plVar3[1])" identifier = (call_expression "(*fns->start_source)(fhandle,(char *)plVar3[1])" (parenthesized_expression "(*fns->start_source)" ( (pointer_expression "*fns->start_source" * (field_expression "fns->start_source" identifier -> field_identifier)) )) (argument_list "(fhandle,(char *)plVar3[1])" ( identifier , (cast_expression "(char *)plVar3[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar3[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (bVar2 == 0) {\n            return 0;\n          }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff);" (assignment_expression "bVar2 = debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff)" identifier = (call_expression "debug_write_linenos((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff)" identifier (argument_list "((debug_handle *)((long)handle + 0x40),\n                                  (debug_write_fns *)((long)handle + 0x48),&fns->lineno,\n                                  (bfd_vma)fhandle,(debug_handle *)0xffffffffffffffff)" ( (cast_expression "(debug_handle *)((long)handle + 0x40)" ( (type_descriptor "debug_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x40)" ( (binary_expression "(long)handle + 0x40" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))) , (cast_expression "(debug_write_fns *)((long)handle + 0x48)" ( (type_descriptor "debug_write_fns *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)handle + 0x48)" ( (binary_expression "(long)handle + 0x48" (cast_expression "(long)handle" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))) , (pointer_expression "&fns->lineno" & (field_expression "fns->lineno" identifier -> field_identifier)) , (cast_expression "(bfd_vma)fhandle" ( (type_descriptor "bfd_vma" type_identifier) ) identifier) , (cast_expression "(debug_handle *)0xffffffffffffffff" ( (type_descriptor "debug_handle *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) (if_statement "if (bVar2 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(bVar2 == 0)" ( (binary_expression "bVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) }) while (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)" identifier (parameter_list "(long *param_1,undefined8 *param_2,undefined8 param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (expression_statement "plVar5 = (long *)*param_1;" (assignment_expression "plVar5 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(int *)(param_1 + 6) = (int)param_1[6] + 1;" (assignment_expression "*(int *)(param_1 + 6) = (int)param_1[6] + 1" (pointer_expression "*(int *)(param_1 + 6)" * (cast_expression "(int *)(param_1 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) )))) = (binary_expression "(int)param_1[6] + 1" (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) + number_literal)) ;) (expression_statement "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);" (assignment_expression "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34)" (pointer_expression "*(undefined4 *)(param_1 + 7)" * (cast_expression "(undefined4 *)(param_1 + 7)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)((long)param_1 + 0x34)" * (cast_expression "(undefined4 *)((long)param_1 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x34)" ( (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" if (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" { (do_statement "do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);" do (compound_statement "{\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    }" { (expression_statement "lVar1 = plVar5[2];" (assignment_expression "lVar1 = plVar5[2]" identifier = (subscript_expression "plVar5[2]" identifier [ number_literal ])) ;) (expression_statement "*(undefined4 *)(param_1 + 9) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 0" (pointer_expression "*(undefined4 *)(param_1 + 9)" * (cast_expression "(undefined4 *)(param_1 + 9)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = number_literal) ;) (expression_statement "param_1[8] = lVar1;" (assignment_expression "param_1[8] = lVar1" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));" (assignment_expression "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" identifier = (call_expression "(*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" (parenthesized_expression "(*(code *)*param_2)" ( (pointer_expression "*(code *)*param_2" * (cast_expression "(code *)*param_2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) )) (argument_list "(param_3,*(undefined8 *)(plVar5[1] + 8))" ( identifier , (pointer_expression "*(undefined8 *)(plVar5[1] + 8)" * (cast_expression "(undefined8 *)(plVar5[1] + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar5[1] + 8)" ( (binary_expression "plVar5[1] + 8" (subscript_expression "plVar5[1]" identifier [ number_literal ]) + number_literal) )))) )))) ;) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar4 = (long *)plVar5[1];" (assignment_expression "plVar4 = (long *)plVar5[1]" identifier = (cast_expression "(long *)plVar5[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar5[1]" identifier [ number_literal ]))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" { (while_statement "while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" { (if_statement "if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" if (parenthesized_expression "((undefined8 *)plVar4[2] != (undefined8 *)0x0)" ( (binary_expression "(undefined8 *)plVar4[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)plVar4[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" { (for_statement "for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" for ( (assignment_expression "puVar2 = *(undefined8 **)plVar4[2]" identifier = (pointer_expression "*(undefined8 **)plVar4[2]" * (cast_expression "(undefined8 **)plVar4[2]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" { (expression_statement "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);" (assignment_expression "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2)" identifier = (call_expression "FUN_0010e640(param_1,param_2,param_3,puVar2)" identifier (argument_list "(param_1,param_2,param_3,puVar2)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n                return 0;\n              }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n                return 0;\n              }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (plVar4 == (long *)0x0) break;" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);" (assignment_expression "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1])" identifier = (call_expression "(*(code *)param_2[1])(param_3,plVar4[1])" (parenthesized_expression "(*(code *)param_2[1])" ( (pointer_expression "*(code *)param_2[1]" * (cast_expression "(code *)param_2[1]" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (argument_list "(param_3,plVar4[1])" ( identifier , (subscript_expression "plVar4[1]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar3 == 0) {\n            return 0;\n          }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) })) })) (expression_statement "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);" (assignment_expression "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" identifier = (call_expression "FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" identifier (argument_list "(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" ( (binary_expression "param_1 + 8" identifier + number_literal) , (binary_expression "param_1 + 9" identifier + number_literal) , (binary_expression "param_2 + 0x2b" identifier + number_literal) , identifier , number_literal )))) ;) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "plVar5 = (long *)*plVar5;" (assignment_expression "plVar5 = (long *)*plVar5" identifier = (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier))) ;) }) while (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (subscript_expression IDENT [ LIT ])))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" (type_identifier "undefined8") (function_declarator "FUN_001102b0(long *param_1,undefined8 *param_2,undefined8 param_3)" (identifier "FUN_001102b0") (parameter_list "(long *param_1,undefined8 *param_2,undefined8 param_3)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  int iVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  plVar5 = (long *)*param_1;\n  param_1[10] = 0;\n  *(int *)(param_1 + 6) = (int)param_1[6] + 1;\n  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);\n  if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }\n  return 1;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (expression_statement "plVar5 = (long *)*param_1;" (assignment_expression "plVar5 = (long *)*param_1" (identifier "plVar5") (= "=") (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(int *)(param_1 + 6) = (int)param_1[6] + 1;" (assignment_expression "*(int *)(param_1 + 6) = (int)param_1[6] + 1" (pointer_expression "*(int *)(param_1 + 6)" (* "*") (cast_expression "(int *)(param_1 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 6)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) () ")")))) (= "=") (binary_expression "(int)param_1[6] + 1" (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);" (assignment_expression "*(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34)" (pointer_expression "*(undefined4 *)(param_1 + 7)" (* "*") (cast_expression "(undefined4 *)(param_1 + 7)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 7)" (( "(") (binary_expression "param_1 + 7" (identifier "param_1") (+ "+") (number_literal "7")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)((long)param_1 + 0x34)" (* "*") (cast_expression "(undefined4 *)((long)param_1 + 0x34)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x34)" (( "(") (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (if_statement "if (plVar5 != (long *)0x0) {\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" (if "if") (parenthesized_expression "(plVar5 != (long *)0x0)" (( "(") (binary_expression "plVar5 != (long *)0x0" (identifier "plVar5") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);\n  }" ({ "{") (do_statement "do {\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    } while (plVar5 != (long *)0x0);" (do "do") (compound_statement "{\n      lVar1 = plVar5[2];\n      *(undefined4 *)(param_1 + 9) = 0;\n      param_1[8] = lVar1;\n      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar4 = (long *)plVar5[1];\n      if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }\n      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);\n      if (iVar3 == 0) {\n        return 0;\n      }\n      plVar5 = (long *)*plVar5;\n    }" ({ "{") (expression_statement "lVar1 = plVar5[2];" (assignment_expression "lVar1 = plVar5[2]" (identifier "lVar1") (= "=") (subscript_expression "plVar5[2]" (identifier "plVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 9) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 0" (pointer_expression "*(undefined4 *)(param_1 + 9)" (* "*") (cast_expression "(undefined4 *)(param_1 + 9)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[8] = lVar1;" (assignment_expression "param_1[8] = lVar1" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "lVar1")) (; ";")) (expression_statement "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));" (assignment_expression "iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" (identifier "iVar3") (= "=") (call_expression "(*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8))" (parenthesized_expression "(*(code *)*param_2)" (( "(") (pointer_expression "*(code *)*param_2" (* "*") (cast_expression "(code *)*param_2" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) () ")")) (argument_list "(param_3,*(undefined8 *)(plVar5[1] + 8))" (( "(") (identifier "param_3") (, ",") (pointer_expression "*(undefined8 *)(plVar5[1] + 8)" (* "*") (cast_expression "(undefined8 *)(plVar5[1] + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar5[1] + 8)" (( "(") (binary_expression "plVar5[1] + 8" (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "8")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "plVar4 = (long *)plVar5[1];" (assignment_expression "plVar4 = (long *)plVar5[1]" (identifier "plVar4") (= "=") (cast_expression "(long *)plVar5[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar5[1]" (identifier "plVar5") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (plVar4 != (long *)0x0) {\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" (if "if") (parenthesized_expression "(plVar4 != (long *)0x0)" (( "(") (binary_expression "plVar4 != (long *)0x0" (identifier "plVar4") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }\n      }" ({ "{") (while_statement "while( true ) {\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }\n          plVar4 = (long *)*plVar4;\n          if (plVar4 == (long *)0x0) break;\n          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);\n          if (iVar3 == 0) {\n            return 0;\n          }\n        }" ({ "{") (if_statement "if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" (if "if") (parenthesized_expression "((undefined8 *)plVar4[2] != (undefined8 *)0x0)" (( "(") (binary_expression "(undefined8 *)plVar4[2] != (undefined8 *)0x0" (cast_expression "(undefined8 *)plVar4[2]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]"))) (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }\n          }" ({ "{") (for_statement "for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;\n                puVar2 = (undefined8 *)*puVar2) {\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" (for "for") (( "(") (assignment_expression "puVar2 = *(undefined8 **)plVar4[2]" (identifier "puVar2") (= "=") (pointer_expression "*(undefined8 **)plVar4[2]" (* "*") (cast_expression "(undefined8 **)plVar4[2]" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]"))))) (; ";") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined8 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*puVar2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);\n              if (iVar3 == 0) {\n                return 0;\n              }\n            }" ({ "{") (expression_statement "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);" (assignment_expression "iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2)" (identifier "iVar3") (= "=") (call_expression "FUN_0010e640(param_1,param_2,param_3,puVar2)" (identifier "FUN_0010e640") (argument_list "(param_1,param_2,param_3,puVar2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "puVar2") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n                return 0;\n              }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                return 0;\n              }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" (identifier "plVar4") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (if_statement "if (plVar4 == (long *)0x0) break;" (if "if") (parenthesized_expression "(plVar4 == (long *)0x0)" (( "(") (binary_expression "plVar4 == (long *)0x0" (identifier "plVar4") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);" (assignment_expression "iVar3 = (*(code *)param_2[1])(param_3,plVar4[1])" (identifier "iVar3") (= "=") (call_expression "(*(code *)param_2[1])(param_3,plVar4[1])" (parenthesized_expression "(*(code *)param_2[1])" (( "(") (pointer_expression "*(code *)param_2[1]" (* "*") (cast_expression "(code *)param_2[1]" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) () ")")) (argument_list "(param_3,plVar4[1])" (( "(") (identifier "param_3") (, ",") (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]")) () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);" (assignment_expression "iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" (identifier "iVar3") (= "=") (call_expression "FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" (identifier "FUN_0010d120") (argument_list "(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) (, ",") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) (, ",") (binary_expression "param_2 + 0x2b" (identifier "param_2") (+ "+") (number_literal "0x2b")) (, ",") (identifier "param_3") (, ",") (number_literal "0xffffffffffffffff") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "plVar5 = (long *)*plVar5;" (assignment_expression "plVar5 = (long *)*plVar5" (identifier "plVar5") (= "=") (cast_expression "(long *)*plVar5" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar5" (* "*") (identifier "plVar5")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar5 != (long *)0x0)" (( "(") (binary_expression "plVar5 != (long *)0x0" (identifier "plVar5") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

type_1 function_1(void *handle,type_2 *fns,void *fhandle)

{
  long lVar1;
  type_3 *var_4;
  type_1 var_2;
  type_4 *info;
  long *var_3;
  long *var_1;
  
                    /* WARNING: Load size is inaccurate */
  var_1 = *handle;
  *(type_5 *)((long)handle + 0x50) = 0;
  *(int *)((long)handle + 0x30) = *(int *)((long)handle + 0x30) + 1;
  *(type_6 *)((long)handle + 0x38) = *(type_6 *)((long)handle + 0x34);
  if (var_1 != (long *)0x0) {
    do {
      lVar1 = var_1[2];
      *(type_6 *)((long)handle + 0x48) = 0;
      *(long *)((long)handle + 0x40) = lVar1;
      var_2 = (*fns->start_compilation_unit)(fhandle,*(char **)(var_1[1] + 8));
      if (var_2 == 0) {
        return 0;
      }
      var_3 = (long *)var_1[1];
      if (var_3 != (long *)0x0) {
        while( true ) {
          if ((type_5 *)var_3[2] != (type_5 *)0x0) {
            for (var_4 = *(type_3 **)var_3[2]; var_4 != (type_3 *)0x0; var_4 = var_4->next) {
              var_2 = var_5((type_4 *)handle,fns,fhandle,var_4);
              if (var_2 == 0) {
                return 0;
              }
            }
          }
          var_3 = (long *)*var_3;
          if (var_3 == (long *)0x0) break;
          var_2 = (*fns->start_source)(fhandle,(char *)var_3[1]);
          if (var_2 == 0) {
            return 0;
          }
        }
      }
      var_2 = var_6((type_4 *)((long)handle + 0x40),
                                  (type_2 *)((long)handle + 0x48),&fns->lineno,
                                  (type_7)fhandle,(type_4 *)0xffffffffffffffff);
      if (var_2 == 0) {
        return 0;
      }
      var_1 = (long *)*var_1;
    } while (var_1 != (long *)0x0);
  }
  return 1;
}


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

undefined8 MASKED(long *param_1,undefined8 *param_2,undefined8 param_3)

{
  long lVar1;
  undefined8 *puVar2;
  int iVar3;
  long *plVar4;
  long *plVar5;
  
  plVar5 = (long *)*param_1;
  param_1[10] = 0;
  *(int *)(param_1 + 6) = (int)param_1[6] + 1;
  *(undefined4 *)(param_1 + 7) = *(undefined4 *)((long)param_1 + 0x34);
  if (plVar5 != (long *)0x0) {
    do {
      lVar1 = plVar5[2];
      *(undefined4 *)(param_1 + 9) = 0;
      param_1[8] = lVar1;
      iVar3 = (*(code *)*param_2)(param_3,*(undefined8 *)(plVar5[1] + 8));
      if (iVar3 == 0) {
        return 0;
      }
      plVar4 = (long *)plVar5[1];
      if (plVar4 != (long *)0x0) {
        while( true ) {
          if ((undefined8 *)plVar4[2] != (undefined8 *)0x0) {
            for (puVar2 = *(undefined8 **)plVar4[2]; puVar2 != (undefined8 *)0x0;
                puVar2 = (undefined8 *)*puVar2) {
              iVar3 = FUN_0010e640(param_1,param_2,param_3,puVar2);
              if (iVar3 == 0) {
                return 0;
              }
            }
          }
          plVar4 = (long *)*plVar4;
          if (plVar4 == (long *)0x0) break;
          iVar3 = (*(code *)param_2[1])(param_3,plVar4[1]);
          if (iVar3 == 0) {
            return 0;
          }
        }
      }
      iVar3 = FUN_0010d120(param_1 + 8,param_1 + 9,param_2 + 0x2b,param_3,0xffffffffffffffff);
      if (iVar3 == 0) {
        return 0;
      }
      plVar5 = (long *)*plVar5;
    } while (plVar5 != (long *)0x0);
  }
  return 1;
}

