
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "STT": Some values do not have unique names */
/* WARNING: Enum "STB": Some values do not have unique names */
/* DWARF original prototype: void define_symbols(Symbol_table * this, Layout * layout, int count,
   Define_symbol_in_section * p, bool only_if_ref) */

void __thiscall
gold::Symbol_table::define_symbols
          (Symbol_table *this,Layout *layout,int count,Define_symbol_in_section *p,bool only_if_ref)

{
  Output_section *od;
  bool bVar1;
  Define_symbol_in_section *pDVar2;
  Define_symbol_in_section *pDVar3;
  
  if (count < 1) {
    return;
  }
  pDVar3 = p;
  do {
    while (od = Layout::find_output_section(layout,pDVar3->output_section),
          od != (Output_section *)0x0) {
      bVar1 = true;
      if (!only_if_ref) {
        bVar1 = pDVar3->only_if_ref;
      }
      pDVar2 = pDVar3 + 1;
      define_in_output_data
                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,
                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,
                 pDVar3->offset_is_from_end,bVar1);
      pDVar3 = pDVar2;
      if (p + (ulong)(count - 1) + 1 == pDVar2) {
        return;
      }
    }
    bVar1 = true;
    if (!only_if_ref) {
      bVar1 = pDVar3->only_if_ref;
    }
    pDVar2 = pDVar3 + 1;
    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,
                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);
    pDVar3 = pDVar2;
  } while (p + (ulong)(count - 1) + 1 != pDVar2);
  return;
}



void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5
                 )

{
  long lVar1;
  undefined1 uVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  if (param_3 < 1) {
    return;
  }
  puVar4 = param_4;
  do {
    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {
      uVar2 = 1;
      if (param_5 == '\0') {
        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);
      }
      puVar3 = puVar4 + 6;
      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),
                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),
                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);
      puVar4 = puVar3;
      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {
        return;
      }
    }
    uVar2 = 1;
    if (param_5 == '\0') {
      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);
    }
    puVar3 = puVar4 + 6;
    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),
                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),
                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);
    puVar4 = puVar3;
  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);
  return;
}


TEST EDX,EDX
JLE 0x0024d5f8
LEA EAX,[RDX + -0x1]
PUSH R14
MOV R14D,R8D
PUSH R13
MOV R13,RSI
PUSH R12
MOV R12,RDI
PUSH RBP
LEA RBP,[RAX + RAX*0x2 + 0x3]
SHL RBP,0x4
PUSH RBX
MOV RBX,RCX
ADD RBP,RCX
JMP 0x0024d592
MOV EDX,0x1
TEST R14B,R14B
JNZ 0x0024d54e
MOVZX EDX,byte ptr [RBX + 0x2e]
SUB RSP,0x8
MOV RSI,qword ptr [RBX]
MOV R8,RAX
MOV ECX,0x5
PUSH RDX
MOVZX EDX,byte ptr [RBX + 0x2d]
MOV RDI,R12
ADD RBX,0x30
PUSH RDX
MOVZX EDX,byte ptr [RBX + -0x4]
PUSH RDX
MOV EDX,dword ptr [RBX + -0x8]
PUSH RDX
MOV EDX,dword ptr [RBX + -0xc]
PUSH RDX
MOV EDX,dword ptr [RBX + -0x10]
PUSH RDX
XOR EDX,EDX
PUSH qword ptr [RBX + -0x18]
MOV R9,qword ptr [RBX + -0x20]
CALL 0x0024d310
ADD RSP,0x40
CMP RBP,RBX
JZ 0x0024d5eb
MOV RSI,qword ptr [RBX + 0x8]
MOV RDI,R13
CALL 0x001b3d50
TEST RAX,RAX
JNZ 0x0024d540
MOV EAX,0x1
TEST R14B,R14B
JNZ 0x0024d5b1
MOVZX EAX,byte ptr [RBX + 0x2e]
PUSH 0x0
MOV R9,qword ptr [RBX + 0x18]
XOR R8D,R8D
MOV ECX,0x5
PUSH RAX
MOVZX EAX,byte ptr [RBX + 0x2c]
XOR EDX,EDX
MOV RDI,R12
MOV RSI,qword ptr [RBX]
ADD RBX,0x30
PUSH RAX
MOV EAX,dword ptr [RBX + -0x8]
PUSH RAX
MOV EAX,dword ptr [RBX + -0xc]
PUSH RAX
MOV EAX,dword ptr [RBX + -0x10]
PUSH RAX
CALL 0x0024d470
ADD RSP,0x30
CMP RBP,RBX
JNZ 0x0024d592
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
RET
(translation_unit "void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}\n\n" (function_definition "void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" primitive_type (function_declarator "FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "char param_5" primitive_type identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar2;" type_identifier identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if (param_3 < 1) {\n    return;\n  }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar4 = param_4;" (assignment_expression "puVar4 = param_4" identifier = identifier) ;) (do_statement "do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);" do (compound_statement "{\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  }" { (while_statement "while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" while (parenthesized_expression "(lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0)" ( (comma_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0" (assignment_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1])" identifier = (call_expression "FUN_001b3d50(param_2,puVar4[1])" identifier (argument_list "(param_2,puVar4[1])" ( identifier , (subscript_expression "puVar4[1]" identifier [ number_literal ]) )))) , (binary_expression "lVar1 != 0" identifier != number_literal)) )) (compound_statement "{\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" { (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" identifier = (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2e)" ( (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" identifier = (binary_expression "puVar4 + 6" identifier + number_literal)) ;) (expression_statement "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);" (call_expression "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" identifier (argument_list "(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" ( identifier , (pointer_expression "*puVar4" * identifier) , number_literal , number_literal , identifier , (subscript_expression "puVar4[2]" identifier [ number_literal ]) , (subscript_expression "puVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x24)" ( (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined4 *)(puVar4 + 5)" * (cast_expression "(undefined4 *)(puVar4 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 5)" ( (binary_expression "puVar4 + 5" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2c)" ( (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2d)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2d)" ( (binary_expression "(long)puVar4 + 0x2d" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , identifier ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) (if_statement "if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }" if (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3)" ( (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" identifier + (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" ( (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) * number_literal) + number_literal) )) * number_literal)) == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" { (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" identifier = (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2e)" ( (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" identifier = (binary_expression "puVar4 + 6" identifier + number_literal)) ;) (expression_statement "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);" (call_expression "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" identifier (argument_list "(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" ( identifier , (pointer_expression "*puVar4" * identifier) , number_literal , number_literal , number_literal , (subscript_expression "puVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x24)" ( (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined4 *)(puVar4 + 5)" * (cast_expression "(undefined4 *)(puVar4 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 5)" ( (binary_expression "puVar4 + 5" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2c)" ( (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , identifier , number_literal ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3)" ( (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" identifier + (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" ( (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) * number_literal) + number_literal) )) * number_literal)) != identifier) )) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "STT": Some values do not have unique names */\n/* WARNING: Enum "STB": Some values do not have unique names */\n/* DWARF original prototype: void define_symbols(Symbol_table * this, Layout * layout, int count,\n   Define_symbol_in_section * p, bool only_if_ref) */\n\nvoid __thiscall\ngold::Symbol_table::define_symbols\n          (Symbol_table *this,Layout *layout,int count,Define_symbol_in_section *p,bool only_if_ref)\n\n{\n  Output_section *od;\n  bool bVar1;\n  Define_symbol_in_section *pDVar2;\n  Define_symbol_in_section *pDVar3;\n  \n  if (count < 1) {\n    return;\n  }\n  pDVar3 = p;\n  do {\n    while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }\n    bVar1 = true;\n    if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }\n    pDVar2 = pDVar3 + 1;\n    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);\n    pDVar3 = pDVar2;\n  } while (p + (ulong)(count - 1) + 1 != pDVar2);\n  return;\n}\n\n" comment comment comment comment (function_definition "void __thiscall\ngold::Symbol_table::define_symbols\n          (Symbol_table *this,Layout *layout,int count,Define_symbol_in_section *p,bool only_if_ref)\n\n{\n  Output_section *od;\n  bool bVar1;\n  Define_symbol_in_section *pDVar2;\n  Define_symbol_in_section *pDVar3;\n  \n  if (count < 1) {\n    return;\n  }\n  pDVar3 = p;\n  do {\n    while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }\n    bVar1 = true;\n    if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }\n    pDVar2 = pDVar3 + 1;\n    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);\n    pDVar3 = pDVar2;\n  } while (p + (ulong)(count - 1) + 1 != pDVar2);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Symbol_table::" identifier : : identifier : :) (function_declarator "define_symbols\n          (Symbol_table *this,Layout *layout,int count,Define_symbol_in_section *p,bool only_if_ref)" identifier (parameter_list "(Symbol_table *this,Layout *layout,int count,Define_symbol_in_section *p,bool only_if_ref)" ( (parameter_declaration "Symbol_table *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Layout *layout" type_identifier (pointer_declarator "*layout" * identifier)) , (parameter_declaration "int count" primitive_type identifier) , (parameter_declaration "Define_symbol_in_section *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "bool only_if_ref" primitive_type identifier) ))) (compound_statement "{\n  Output_section *od;\n  bool bVar1;\n  Define_symbol_in_section *pDVar2;\n  Define_symbol_in_section *pDVar3;\n  \n  if (count < 1) {\n    return;\n  }\n  pDVar3 = p;\n  do {\n    while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }\n    bVar1 = true;\n    if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }\n    pDVar2 = pDVar3 + 1;\n    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);\n    pDVar3 = pDVar2;\n  } while (p + (ulong)(count - 1) + 1 != pDVar2);\n  return;\n}" { (declaration "Output_section *od;" type_identifier (pointer_declarator "*od" * identifier) ;) (declaration "bool bVar1;" primitive_type identifier ;) (declaration "Define_symbol_in_section *pDVar2;" type_identifier (pointer_declarator "*pDVar2" * identifier) ;) (declaration "Define_symbol_in_section *pDVar3;" type_identifier (pointer_declarator "*pDVar3" * identifier) ;) (if_statement "if (count < 1) {\n    return;\n  }" if (parenthesized_expression "(count < 1)" ( (binary_expression "count < 1" identifier < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "pDVar3 = p;" (assignment_expression "pDVar3 = p" identifier = identifier) ;) (do_statement "do {\n    while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }\n    bVar1 = true;\n    if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }\n    pDVar2 = pDVar3 + 1;\n    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);\n    pDVar3 = pDVar2;\n  } while (p + (ulong)(count - 1) + 1 != pDVar2);" do (compound_statement "{\n    while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }\n    bVar1 = true;\n    if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }\n    pDVar2 = pDVar3 + 1;\n    define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);\n    pDVar3 = pDVar2;\n  }" { (while_statement "while (od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0) {\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }" while (parenthesized_expression "(od = Layout::find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0)" ( (ERROR "od = Layout::" (assignment_expression "od = Layout" identifier = identifier) : :) (comma_expression "find_output_section(layout,pDVar3->output_section),\n          od != (Output_section *)0x0" (call_expression "find_output_section(layout,pDVar3->output_section)" identifier (argument_list "(layout,pDVar3->output_section)" ( identifier , (field_expression "pDVar3->output_section" identifier -> field_identifier) ))) , (binary_expression "od != (Output_section *)0x0" identifier != (cast_expression "(Output_section *)0x0" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n      bVar1 = true;\n      if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }\n      pDVar2 = pDVar3 + 1;\n      define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);\n      pDVar3 = pDVar2;\n      if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (if_statement "if (!only_if_ref) {\n        bVar1 = pDVar3->only_if_ref;\n      }" if (parenthesized_expression "(!only_if_ref)" ( (unary_expression "!only_if_ref" ! identifier) )) (compound_statement "{\n        bVar1 = pDVar3->only_if_ref;\n      }" { (expression_statement "bVar1 = pDVar3->only_if_ref;" (assignment_expression "bVar1 = pDVar3->only_if_ref" identifier = (field_expression "pDVar3->only_if_ref" identifier -> field_identifier)) ;) })) (expression_statement "pDVar2 = pDVar3 + 1;" (assignment_expression "pDVar2 = pDVar3 + 1" identifier = (binary_expression "pDVar3 + 1" identifier + number_literal)) ;) (expression_statement "define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1);" (call_expression "define_in_output_data\n                (this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1)" identifier (argument_list "(this,pDVar3->name,(char *)0x0,PREDEFINED,&od->super_Output_data,pDVar3->value,\n                 pDVar3->size,pDVar3->type,pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,\n                 pDVar3->offset_is_from_end,bVar1)" ( identifier , (field_expression "pDVar3->name" identifier -> field_identifier) , (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , (pointer_expression "&od->super_Output_data" & (field_expression "od->super_Output_data" identifier -> field_identifier)) , (field_expression "pDVar3->value" identifier -> field_identifier) , (field_expression "pDVar3->size" identifier -> field_identifier) , (field_expression "pDVar3->type" identifier -> field_identifier) , (field_expression "pDVar3->binding" identifier -> field_identifier) , (field_expression "pDVar3->visibility" identifier -> field_identifier) , (field_expression "pDVar3->nonvis" identifier -> field_identifier) , (field_expression "pDVar3->offset_is_from_end" identifier -> field_identifier) , identifier ))) ;) (expression_statement "pDVar3 = pDVar2;" (assignment_expression "pDVar3 = pDVar2" identifier = identifier) ;) (if_statement "if (p + (ulong)(count - 1) + 1 == pDVar2) {\n        return;\n      }" if (parenthesized_expression "(p + (ulong)(count - 1) + 1 == pDVar2)" ( (binary_expression "p + (ulong)(count - 1) + 1 == pDVar2" (binary_expression "p + (ulong)(count - 1) + 1" (binary_expression "p + (ulong)(count - 1)" identifier + (call_expression "(ulong)(count - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(count - 1)" ( (binary_expression "count - 1" identifier - number_literal) )))) + number_literal) == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (if_statement "if (!only_if_ref) {\n      bVar1 = pDVar3->only_if_ref;\n    }" if (parenthesized_expression "(!only_if_ref)" ( (unary_expression "!only_if_ref" ! identifier) )) (compound_statement "{\n      bVar1 = pDVar3->only_if_ref;\n    }" { (expression_statement "bVar1 = pDVar3->only_if_ref;" (assignment_expression "bVar1 = pDVar3->only_if_ref" identifier = (field_expression "pDVar3->only_if_ref" identifier -> field_identifier)) ;) })) (expression_statement "pDVar2 = pDVar3 + 1;" (assignment_expression "pDVar2 = pDVar3 + 1" identifier = (binary_expression "pDVar3 + 1" identifier + number_literal)) ;) (expression_statement "define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false);" (call_expression "define_as_constant(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false)" identifier (argument_list "(this,pDVar3->name,(char *)0x0,PREDEFINED,0,pDVar3->size,pDVar3->type,\n                       pDVar3->binding,pDVar3->visibility,pDVar3->nonvis,bVar1,false)" ( identifier , (field_expression "pDVar3->name" identifier -> field_identifier) , (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , number_literal , (field_expression "pDVar3->size" identifier -> field_identifier) , (field_expression "pDVar3->type" identifier -> field_identifier) , (field_expression "pDVar3->binding" identifier -> field_identifier) , (field_expression "pDVar3->visibility" identifier -> field_identifier) , (field_expression "pDVar3->nonvis" identifier -> field_identifier) , identifier , false ))) ;) (expression_statement "pDVar3 = pDVar2;" (assignment_expression "pDVar3 = pDVar2" identifier = identifier) ;) }) while (parenthesized_expression "(p + (ulong)(count - 1) + 1 != pDVar2)" ( (binary_expression "p + (ulong)(count - 1) + 1 != pDVar2" (binary_expression "p + (ulong)(count - 1) + 1" (binary_expression "p + (ulong)(count - 1)" identifier + (call_expression "(ulong)(count - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(count - 1)" ( (binary_expression "count - 1" identifier - number_literal) )))) + number_literal) != identifier) )) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}\n\n" (function_definition "void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" primitive_type (function_declarator "FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "char param_5" primitive_type identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 uVar2;" type_identifier identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if (param_3 < 1) {\n    return;\n  }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar4 = param_4;" (assignment_expression "puVar4 = param_4" identifier = identifier) ;) (do_statement "do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);" do (compound_statement "{\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  }" { (while_statement "while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" while (parenthesized_expression "(lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0)" ( (comma_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0" (assignment_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1])" identifier = (call_expression "FUN_001b3d50(param_2,puVar4[1])" identifier (argument_list "(param_2,puVar4[1])" ( identifier , (subscript_expression "puVar4[1]" identifier [ number_literal ]) )))) , (binary_expression "lVar1 != 0" identifier != number_literal)) )) (compound_statement "{\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" { (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" { (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" identifier = (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2e)" ( (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" identifier = (binary_expression "puVar4 + 6" identifier + number_literal)) ;) (expression_statement "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);" (call_expression "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" identifier (argument_list "(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" ( identifier , (pointer_expression "*puVar4" * identifier) , number_literal , number_literal , identifier , (subscript_expression "puVar4[2]" identifier [ number_literal ]) , (subscript_expression "puVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x24)" ( (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined4 *)(puVar4 + 5)" * (cast_expression "(undefined4 *)(puVar4 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 5)" ( (binary_expression "puVar4 + 5" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2c)" ( (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2d)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2d)" ( (binary_expression "(long)puVar4 + 0x2d" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , identifier ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) (if_statement "if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }" if (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3)" ( (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" identifier + (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" ( (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) * number_literal) + number_literal) )) * number_literal)) == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" identifier = number_literal) ;) (if_statement "if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" { (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" identifier = (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2e)" ( (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" identifier = (binary_expression "puVar4 + 6" identifier + number_literal)) ;) (expression_statement "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);" (call_expression "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" identifier (argument_list "(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" ( identifier , (pointer_expression "*puVar4" * identifier) , number_literal , number_literal , number_literal , (subscript_expression "puVar4[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) , (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x24)" ( (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (pointer_expression "*(undefined4 *)(puVar4 + 5)" * (cast_expression "(undefined4 *)(puVar4 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 5)" ( (binary_expression "puVar4 + 5" identifier + number_literal) )))) , (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" * (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar4 + 0x2c)" ( (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , identifier , number_literal ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3)" ( (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" identifier + (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" ( (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_3 - 1)" ( (binary_expression "param_3 - 1" identifier - number_literal) ))) * number_literal) + number_literal) )) * number_literal)) != identifier) )) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) )))) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) , LIT , LIT , IDENT , (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (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) )))) , (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) )))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) * LIT) + LIT) )) * LIT)) == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) , LIT , LIT , LIT , (subscript_expression IDENT [ LIT ]) , (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) )))) , (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) )))) , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) * LIT) + LIT) )) * LIT)) != IDENT) )) ;) (return_statement return ;) })))
(function_definition "void FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )\n\n{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0024d510(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" (identifier "FUN_0024d510") (parameter_list "(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5\n                 )" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 *param_4" (type_identifier "undefined8") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "char param_5" (primitive_type "char") (identifier "param_5")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined1 uVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if (param_3 < 1) {\n    return;\n  }\n  puVar4 = param_4;\n  do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined1 uVar2;" (type_identifier "undefined1") (identifier "uVar2") (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (if_statement "if (param_3 < 1) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_3 < 1)" (( "(") (binary_expression "param_3 < 1" (identifier "param_3") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar4 = param_4;" (assignment_expression "puVar4 = param_4" (identifier "puVar4") (= "=") (identifier "param_4")) (; ";")) (do_statement "do {\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);" (do "do") (compound_statement "{\n    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }\n    uVar2 = 1;\n    if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }\n    puVar3 = puVar4 + 6;\n    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);\n    puVar4 = puVar3;\n  }" ({ "{") (while_statement "while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" (while "while") (parenthesized_expression "(lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0)" (( "(") (comma_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0" (assignment_expression "lVar1 = FUN_001b3d50(param_2,puVar4[1])" (identifier "lVar1") (= "=") (call_expression "FUN_001b3d50(param_2,puVar4[1])" (identifier "FUN_001b3d50") (argument_list "(param_2,puVar4[1])" (( "(") (identifier "param_2") (, ",") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) () ")")))) (, ",") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n      uVar2 = 1;\n      if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }\n      puVar3 = puVar4 + 6;\n      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);\n      puVar4 = puVar3;\n      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }\n    }" ({ "{") (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" (identifier "uVar2") (= "=") (number_literal "1")) (; ";")) (if_statement "if (param_5 == '\0') {\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" (if "if") (parenthesized_expression "(param_5 == '\0')" (( "(") (binary_expression "param_5 == '\0'" (identifier "param_5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n      }" ({ "{") (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" (identifier "uVar2") (= "=") (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" (* "*") (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x2e)" (( "(") (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x2e")) () ")"))))) (; ";")) (} "}"))) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" (identifier "puVar3") (= "=") (binary_expression "puVar4 + 6" (identifier "puVar4") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);" (call_expression "FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" (identifier "FUN_0024d310") (argument_list "(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),\n                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (, ",") (number_literal "0") (, ",") (number_literal "5") (, ",") (identifier "lVar1") (, ",") (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "puVar4[3]" (identifier "puVar4") ([ "[") (number_literal "3") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(puVar4 + 4)" (* "*") (cast_expression "(undefined4 *)(puVar4 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 4)" (( "(") (binary_expression "puVar4 + 4" (identifier "puVar4") (+ "+") (number_literal "4")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" (* "*") (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x24)" (( "(") (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x24")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(puVar4 + 5)" (* "*") (cast_expression "(undefined4 *)(puVar4 + 5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 5)" (( "(") (binary_expression "puVar4 + 5" (identifier "puVar4") (+ "+") (number_literal "5")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" (* "*") (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x2c)" (( "(") (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x2c")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2d)" (* "*") (cast_expression "(undefined1 *)((long)puVar4 + 0x2d)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x2d)" (( "(") (binary_expression "(long)puVar4 + 0x2d" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x2d")) () ")")))) (, ",") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" (identifier "puVar4") (= "=") (identifier "puVar3")) (; ";")) (if_statement "if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {\n        return;\n      }" (if "if") (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3)" (( "(") (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" (identifier "param_4") (+ "+") (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" (( "(") (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_3 - 1)" (( "(") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) () ")"))) (* "*") (number_literal "3")) (+ "+") (number_literal "3")) () ")")) (* "*") (number_literal "2"))) (== "==") (identifier "puVar3")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar2 = 1;" (assignment_expression "uVar2 = 1" (identifier "uVar2") (= "=") (number_literal "1")) (; ";")) (if_statement "if (param_5 == '\0') {\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" (if "if") (parenthesized_expression "(param_5 == '\0')" (( "(") (binary_expression "param_5 == '\0'" (identifier "param_5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);\n    }" ({ "{") (expression_statement "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);" (assignment_expression "uVar2 = *(undefined1 *)((long)puVar4 + 0x2e)" (identifier "uVar2") (= "=") (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2e)" (* "*") (cast_expression "(undefined1 *)((long)puVar4 + 0x2e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x2e)" (( "(") (binary_expression "(long)puVar4 + 0x2e" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x2e")) () ")"))))) (; ";")) (} "}"))) (expression_statement "puVar3 = puVar4 + 6;" (assignment_expression "puVar3 = puVar4 + 6" (identifier "puVar3") (= "=") (binary_expression "puVar4 + 6" (identifier "puVar4") (+ "+") (number_literal "6"))) (; ";")) (expression_statement "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);" (call_expression "FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" (identifier "FUN_0024d470") (argument_list "(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),\n                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),\n                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (, ",") (number_literal "0") (, ",") (number_literal "5") (, ",") (number_literal "0") (, ",") (subscript_expression "puVar4[3]" (identifier "puVar4") ([ "[") (number_literal "3") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(puVar4 + 4)" (* "*") (cast_expression "(undefined4 *)(puVar4 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 4)" (( "(") (binary_expression "puVar4 + 4" (identifier "puVar4") (+ "+") (number_literal "4")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)((long)puVar4 + 0x24)" (* "*") (cast_expression "(undefined4 *)((long)puVar4 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x24)" (( "(") (binary_expression "(long)puVar4 + 0x24" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x24")) () ")")))) (, ",") (pointer_expression "*(undefined4 *)(puVar4 + 5)" (* "*") (cast_expression "(undefined4 *)(puVar4 + 5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 5)" (( "(") (binary_expression "puVar4 + 5" (identifier "puVar4") (+ "+") (number_literal "5")) () ")")))) (, ",") (pointer_expression "*(undefined1 *)((long)puVar4 + 0x2c)" (* "*") (cast_expression "(undefined1 *)((long)puVar4 + 0x2c)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar4 + 0x2c)" (( "(") (binary_expression "(long)puVar4 + 0x2c" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (+ "+") (number_literal "0x2c")) () ")")))) (, ",") (identifier "uVar2") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" (identifier "puVar4") (= "=") (identifier "puVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3)" (( "(") (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3" (binary_expression "param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2" (identifier "param_4") (+ "+") (binary_expression "((ulong)(param_3 - 1) * 3 + 3) * 2" (parenthesized_expression "((ulong)(param_3 - 1) * 3 + 3)" (( "(") (binary_expression "(ulong)(param_3 - 1) * 3 + 3" (binary_expression "(ulong)(param_3 - 1) * 3" (call_expression "(ulong)(param_3 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_3 - 1)" (( "(") (binary_expression "param_3 - 1" (identifier "param_3") (- "-") (number_literal "1")) () ")"))) (* "*") (number_literal "3")) (+ "+") (number_literal "3")) () ")")) (* "*") (number_literal "2"))) (!= "!=") (identifier "puVar3")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "STT": Some values do not have unique names */
/* WARNING: Enum "STB": Some values do not have unique names */
/* DWARF original prototype: void define_symbols(Symbol_table * this, Layout * layout, int count,
   Define_symbol_in_section * p, bool only_if_ref) */

void __thiscall
gold::type_1::function_1
          (type_1 *this,type_2 *layout,int var_1,type_3 *var_6,bool only_if_ref)

{
  type_4 *var_3;
  bool bVar1;
  type_3 *var_7;
  type_3 *var_4;
  
  if (var_1 < 1) {
    return;
  }
  var_4 = var_6;
  do {
    while (var_3 = type_2::var_2(layout,var_4->output_section),
          var_3 != (type_4 *)0x0) {
      bVar1 = true;
      if (!only_if_ref) {
        bVar1 = var_4->only_if_ref;
      }
      var_7 = var_4 + 1;
      var_5
                (this,var_4->name,(char *)0x0,PREDEFINED,&var_3->super_Output_data,var_4->value,
                 var_4->size,var_4->type,var_4->binding,var_4->visibility,var_4->nonvis,
                 var_4->offset_is_from_end,bVar1);
      var_4 = var_7;
      if (var_6 + (ulong)(var_1 - 1) + 1 == var_7) {
        return;
      }
    }
    bVar1 = true;
    if (!only_if_ref) {
      bVar1 = var_4->only_if_ref;
    }
    var_7 = var_4 + 1;
    var_8(this,var_4->name,(char *)0x0,PREDEFINED,0,var_4->size,var_4->type,
                       var_4->binding,var_4->visibility,var_4->nonvis,bVar1,false);
    var_4 = var_7;
  } while (var_6 + (ulong)(var_1 - 1) + 1 != var_7);
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal) (number_literal) (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (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))))) (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))))) (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))))) (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))))) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)) right: (number_literal))) right: (number_literal))) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal) (number_literal) (number_literal) (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (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))))) (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))))) (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))))) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)) right: (number_literal))) right: (number_literal))) right: (identifier)))) (return_statement))))

void MASKED(undefined8 param_1,undefined8 param_2,int param_3,undefined8 *param_4,char param_5
                 )

{
  long lVar1;
  undefined1 uVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  if (param_3 < 1) {
    return;
  }
  puVar4 = param_4;
  do {
    while (lVar1 = FUN_001b3d50(param_2,puVar4[1]), lVar1 != 0) {
      uVar2 = 1;
      if (param_5 == '\0') {
        uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);
      }
      puVar3 = puVar4 + 6;
      FUN_0024d310(param_1,*puVar4,0,5,lVar1,puVar4[2],puVar4[3],*(undefined4 *)(puVar4 + 4),
                   *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),
                   *(undefined1 *)((long)puVar4 + 0x2c),*(undefined1 *)((long)puVar4 + 0x2d),uVar2);
      puVar4 = puVar3;
      if (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 == puVar3) {
        return;
      }
    }
    uVar2 = 1;
    if (param_5 == '\0') {
      uVar2 = *(undefined1 *)((long)puVar4 + 0x2e);
    }
    puVar3 = puVar4 + 6;
    FUN_0024d470(param_1,*puVar4,0,5,0,puVar4[3],*(undefined4 *)(puVar4 + 4),
                 *(undefined4 *)((long)puVar4 + 0x24),*(undefined4 *)(puVar4 + 5),
                 *(undefined1 *)((long)puVar4 + 0x2c),uVar2,0);
    puVar4 = puVar3;
  } while (param_4 + ((ulong)(param_3 - 1) * 3 + 3) * 2 != puVar3);
  return;
}

