
/* DWARF original prototype: void clear_abbrev_codes(Dwarf_abbrev_table * this) */

void __thiscall gold::Dwarf_abbrev_table::clear_abbrev_codes(Dwarf_abbrev_table *this)

{
  Abbrev_code *pAVar1;
  pointer pAVar2;
  _Hash_node_base *p_Var3;
  _Hash_node_base *p_Var4;
  Abbrev_code **ppAVar5;
  
  ppAVar5 = this->low_abbrev_codes_;
  do {
    pAVar1 = *ppAVar5;
    if (pAVar1 != (Abbrev_code *)0x0) {
      pAVar2 = (pAVar1->attributes).
               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>
               ._M_impl._M_start;
      if (pAVar2 != (pointer)0x0) {
        operator_delete(pAVar2);
      }
      operator_delete(pAVar1,0x20);
      *ppAVar5 = (Abbrev_code *)0x0;
    }
    ppAVar5 = ppAVar5 + 1;
  } while ((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_);
  for (p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;
      p_Var3 != (_Hash_node_base *)0x0; p_Var3 = p_Var3->_M_nxt) {
    p_Var4 = p_Var3[2]._M_nxt;
    if (p_Var4 != (_Hash_node_base *)0x0) {
      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {
        operator_delete(p_Var4[1]._M_nxt);
      }
      operator_delete(p_Var4,0x20);
    }
  }
  std::
  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>
  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>
           *)&this->high_abbrev_codes_);
  return;
}



void FUN_00467e30(long param_1)

{
  long lVar1;
  undefined8 *puVar2;
  long *plVar3;
  
  plVar3 = (long *)(param_1 + 0x30);
  do {
    lVar1 = *plVar3;
    if (lVar1 != 0) {
      if (*(long *)(lVar1 + 8) != 0) {
        FUN_0049e330();
      }
      thunk_FUN_0049e330(lVar1,0x20);
      *plVar3 = 0;
    }
    plVar3 = plVar3 + 1;
  } while (plVar3 != (long *)(param_1 + 0x830));
  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;
      puVar2 = (undefined8 *)*puVar2) {
    lVar1 = puVar2[2];
    if (lVar1 != 0) {
      if (*(long *)(lVar1 + 8) != 0) {
        FUN_0049e330();
      }
      thunk_FUN_0049e330(lVar1,0x20);
    }
  }
  FUN_0046b0f0((long *)(param_1 + 0x830));
  return;
}


PUSH R13
MOV R13,RDI
PUSH R12
LEA R12,[RDI + 0x830]
PUSH RBP
PUSH RBX
LEA RBX,[RDI + 0x30]
SUB RSP,0x8
NOP dword ptr [RAX + RAX*0x1]
MOV RBP,qword ptr [RBX]
TEST RBP,RBP
JZ 0x00467e7a
MOV RDI,qword ptr [RBP + 0x8]
TEST RDI,RDI
JZ 0x00467e66
CALL 0x0049e330
MOV ESI,0x20
MOV RDI,RBP
CALL 0x0049e320
MOV qword ptr [RBX],0x0
ADD RBX,0x8
CMP RBX,R12
JNZ 0x00467e50
MOV RBX,qword ptr [R13 + 0x840]
TEST RBX,RBX
JZ 0x00467ebc
NOP
MOV RBP,qword ptr [RBX + 0x10]
TEST RBP,RBP
JZ 0x00467eb4
MOV RDI,qword ptr [RBP + 0x8]
TEST RDI,RDI
JZ 0x00467ea7
CALL 0x0049e330
MOV ESI,0x20
MOV RDI,RBP
CALL 0x0049e320
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JNZ 0x00467e90
ADD RSP,0x8
MOV RDI,R12
POP RBX
POP RBP
POP R12
POP R13
JMP 0x0046b0f0
(translation_unit "void FUN_00467e30(long param_1)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}\n\n" (function_definition "void FUN_00467e30(long param_1)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" primitive_type (function_declarator "FUN_00467e30(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (expression_statement "plVar3 = (long *)(param_1 + 0x30);" (assignment_expression "plVar3 = (long *)(param_1 + 0x30)" identifier = (cast_expression "(long *)(param_1 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) ;) (do_statement "do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));" do (compound_statement "{\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  }" { (expression_statement "lVar1 = *plVar3;" (assignment_expression "lVar1 = *plVar3" identifier = (pointer_expression "*plVar3" * identifier)) ;) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" { (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" ( (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" identifier (argument_list "(lVar1,0x20)" ( identifier , number_literal ))) ;) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" * identifier) = number_literal) ;) })) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar3 != (long *)(param_1 + 0x830))" ( (binary_expression "plVar3 != (long *)(param_1 + 0x830)" identifier != (cast_expression "(long *)(param_1 + 0x830)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x830)" ( (binary_expression "param_1 + 0x830" identifier + number_literal) )))) )) ;) (for_statement "for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" for ( (assignment_expression "puVar2 = *(undefined8 **)(param_1 + 0x840)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x840)" * (cast_expression "(undefined8 **)(param_1 + 0x840)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x840)" ( (binary_expression "param_1 + 0x840" identifier + number_literal) ))))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" { (expression_statement "lVar1 = puVar2[2];" (assignment_expression "lVar1 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" { (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" ( (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" identifier (argument_list "(lVar1,0x20)" ( identifier , number_literal ))) ;) })) })) (expression_statement "FUN_0046b0f0((long *)(param_1 + 0x830));" (call_expression "FUN_0046b0f0((long *)(param_1 + 0x830))" identifier (argument_list "((long *)(param_1 + 0x830))" ( (cast_expression "(long *)(param_1 + 0x830)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x830)" ( (binary_expression "param_1 + 0x830" identifier + number_literal) ))) ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void clear_abbrev_codes(Dwarf_abbrev_table * this) */\n\nvoid __thiscall gold::Dwarf_abbrev_table::clear_abbrev_codes(Dwarf_abbrev_table *this)\n\n{\n  Abbrev_code *pAVar1;\n  pointer pAVar2;\n  _Hash_node_base *p_Var3;\n  _Hash_node_base *p_Var4;\n  Abbrev_code **ppAVar5;\n  \n  ppAVar5 = this->low_abbrev_codes_;\n  do {\n    pAVar1 = *ppAVar5;\n    if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }\n    ppAVar5 = ppAVar5 + 1;\n  } while ((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_);\n  for (p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;\n      p_Var3 != (_Hash_node_base *)0x0; p_Var3 = p_Var3->_M_nxt) {\n    p_Var4 = p_Var3[2]._M_nxt;\n    if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }\n  }\n  std::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_);\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Dwarf_abbrev_table::clear_abbrev_codes(Dwarf_abbrev_table *this)\n\n{\n  Abbrev_code *pAVar1;\n  pointer pAVar2;\n  _Hash_node_base *p_Var3;\n  _Hash_node_base *p_Var4;\n  Abbrev_code **ppAVar5;\n  \n  ppAVar5 = this->low_abbrev_codes_;\n  do {\n    pAVar1 = *ppAVar5;\n    if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }\n    ppAVar5 = ppAVar5 + 1;\n  } while ((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_);\n  for (p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;\n      p_Var3 != (_Hash_node_base *)0x0; p_Var3 = p_Var3->_M_nxt) {\n    p_Var4 = p_Var3[2]._M_nxt;\n    if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }\n  }\n  std::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_);\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwarf_abbrev_table::" identifier : : identifier : :) (function_declarator "clear_abbrev_codes(Dwarf_abbrev_table *this)" identifier (parameter_list "(Dwarf_abbrev_table *this)" ( (parameter_declaration "Dwarf_abbrev_table *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  Abbrev_code *pAVar1;\n  pointer pAVar2;\n  _Hash_node_base *p_Var3;\n  _Hash_node_base *p_Var4;\n  Abbrev_code **ppAVar5;\n  \n  ppAVar5 = this->low_abbrev_codes_;\n  do {\n    pAVar1 = *ppAVar5;\n    if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }\n    ppAVar5 = ppAVar5 + 1;\n  } while ((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_);\n  for (p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;\n      p_Var3 != (_Hash_node_base *)0x0; p_Var3 = p_Var3->_M_nxt) {\n    p_Var4 = p_Var3[2]._M_nxt;\n    if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }\n  }\n  std::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_);\n  return;\n}" { (declaration "Abbrev_code *pAVar1;" type_identifier (pointer_declarator "*pAVar1" * identifier) ;) (declaration "pointer pAVar2;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "_Hash_node_base *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "Abbrev_code **ppAVar5;" type_identifier (pointer_declarator "**ppAVar5" * (pointer_declarator "*ppAVar5" * identifier)) ;) (expression_statement "ppAVar5 = this->low_abbrev_codes_;" (assignment_expression "ppAVar5 = this->low_abbrev_codes_" identifier = (field_expression "this->low_abbrev_codes_" identifier -> field_identifier)) ;) (do_statement "do {\n    pAVar1 = *ppAVar5;\n    if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }\n    ppAVar5 = ppAVar5 + 1;\n  } while ((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_);" do (compound_statement "{\n    pAVar1 = *ppAVar5;\n    if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }\n    ppAVar5 = ppAVar5 + 1;\n  }" { (expression_statement "pAVar1 = *ppAVar5;" (assignment_expression "pAVar1 = *ppAVar5" identifier = (pointer_expression "*ppAVar5" * identifier)) ;) (if_statement "if (pAVar1 != (Abbrev_code *)0x0) {\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }" if (parenthesized_expression "(pAVar1 != (Abbrev_code *)0x0)" ( (binary_expression "pAVar1 != (Abbrev_code *)0x0" identifier != (cast_expression "(Abbrev_code *)0x0" ( (type_descriptor "Abbrev_code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;\n      if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }\n      operator_delete(pAVar1,0x20);\n      *ppAVar5 = (Abbrev_code *)0x0;\n    }" { (ERROR "pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold::" (assignment_expression "pAVar2 = (pAVar1->attributes).\n               super__Vector_base<gold" identifier = (binary_expression "(pAVar1->attributes).\n               super__Vector_base<gold" (field_expression "(pAVar1->attributes).\n               super__Vector_base" (parenthesized_expression "(pAVar1->attributes)" ( (field_expression "pAVar1->attributes" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Dwarf_abbrev_table::Attribute,_std::allocator<gold::Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;" statement_identifier (ERROR "::Attribute,_std::allocator<gold:" : : (comma_expression "Attribute,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Dwarf_abbrev_table::Attribute>_>\n               ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Attribute>_>\n               ._M_impl._M_start;" (field_expression "Attribute>_>\n               ._M_impl._M_start" (field_expression "Attribute>_>\n               ._M_impl" (binary_expression "Attribute>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if (pAVar2 != (pointer)0x0) {\n        operator_delete(pAVar2);\n      }" if (parenthesized_expression "(pAVar2 != (pointer)0x0)" ( (binary_expression "pAVar2 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n        operator_delete(pAVar2);\n      }" { (expression_statement "operator_delete(pAVar2);" (call_expression "operator_delete(pAVar2)" identifier (argument_list "(pAVar2)" ( identifier ))) ;) })) (expression_statement "operator_delete(pAVar1,0x20);" (call_expression "operator_delete(pAVar1,0x20)" identifier (argument_list "(pAVar1,0x20)" ( identifier , number_literal ))) ;) (expression_statement "*ppAVar5 = (Abbrev_code *)0x0;" (assignment_expression "*ppAVar5 = (Abbrev_code *)0x0" (pointer_expression "*ppAVar5" * identifier) = (cast_expression "(Abbrev_code *)0x0" ( (type_descriptor "Abbrev_code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (expression_statement "ppAVar5 = ppAVar5 + 1;" (assignment_expression "ppAVar5 = ppAVar5 + 1" identifier = (binary_expression "ppAVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_)" ( (binary_expression "(Abbrev_code_table *)ppAVar5 != &this->high_abbrev_codes_" (cast_expression "(Abbrev_code_table *)ppAVar5" ( (type_descriptor "Abbrev_code_table *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != (pointer_expression "&this->high_abbrev_codes_" & (field_expression "this->high_abbrev_codes_" identifier -> field_identifier))) )) ;) (for_statement "for (p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;\n      p_Var3 != (_Hash_node_base *)0x0; p_Var3 = p_Var3->_M_nxt) {\n    p_Var4 = p_Var3[2]._M_nxt;\n    if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }\n  }" for ( (assignment_expression "p_Var3 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt" identifier = (field_expression "(this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt" (field_expression "(this->high_abbrev_codes_)._M_h._M_before_begin" (field_expression "(this->high_abbrev_codes_)._M_h" (parenthesized_expression "(this->high_abbrev_codes_)" ( (field_expression "this->high_abbrev_codes_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ; (binary_expression "p_Var3 != (_Hash_node_base *)0x0" identifier != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "p_Var3 = p_Var3->_M_nxt" identifier = (field_expression "p_Var3->_M_nxt" identifier -> field_identifier)) ) (compound_statement "{\n    p_Var4 = p_Var3[2]._M_nxt;\n    if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }\n  }" { (expression_statement "p_Var4 = p_Var3[2]._M_nxt;" (assignment_expression "p_Var4 = p_Var3[2]._M_nxt" identifier = (field_expression "p_Var3[2]._M_nxt" (subscript_expression "p_Var3[2]" identifier [ number_literal ]) . field_identifier)) ;) (if_statement "if (p_Var4 != (_Hash_node_base *)0x0) {\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }" if (parenthesized_expression "(p_Var4 != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var4 != (_Hash_node_base *)0x0" identifier != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }\n      operator_delete(p_Var4,0x20);\n    }" { (if_statement "if (p_Var4[1]._M_nxt != (_Hash_node_base *)0x0) {\n        operator_delete(p_Var4[1]._M_nxt);\n      }" if (parenthesized_expression "(p_Var4[1]._M_nxt != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var4[1]._M_nxt != (_Hash_node_base *)0x0" (field_expression "p_Var4[1]._M_nxt" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        operator_delete(p_Var4[1]._M_nxt);\n      }" { (expression_statement "operator_delete(p_Var4[1]._M_nxt);" (call_expression "operator_delete(p_Var4[1]._M_nxt)" identifier (argument_list "(p_Var4[1]._M_nxt)" ( (field_expression "p_Var4[1]._M_nxt" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) ))) ;) })) (expression_statement "operator_delete(p_Var4,0x20);" (call_expression "operator_delete(p_Var4,0x20)" identifier (argument_list "(p_Var4,0x20)" ( identifier , number_literal ))) ;) })) })) (ERROR "std::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::" (comma_expression "std::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std" identifier (ERROR "::\n  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>" : : (comma_expression "_Hashtable<unsigned_int,_std" (binary_expression "_Hashtable<unsigned_int" identifier < identifier) , identifier) : : (comma_expression "pair<unsigned_int_const,_const_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (comma_expression "Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std" identifier (ERROR "::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>" : : (comma_expression "Abbrev_code*>,_std" identifier (ERROR "*>" * >) , identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_const_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : (binary_expression "Dwarf_abbrev_table::Abbrev_code*>_" identifier (ERROR "::Abbrev_code*" : : identifier *) > identifier) >) , identifier) : : (comma_expression "__detail::_Select1st,_std::equal_to<unsigned_int>,_std" identifier (ERROR "::_Select1st,_std::equal_to<unsigned_int>" : : (comma_expression "_Select1st,_std" identifier , identifier) : : (binary_expression "equal_to<unsigned_int" identifier < identifier) >) , identifier) : : (binary_expression "hash<unsigned_int" identifier < identifier) >) , identifier) : : identifier : : identifier , identifier : : identifier : : identifier , identifier : : identifier : : identifier , identifier : : identifier : :) (expression_statement "_Hashtable_traits<false,_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_);" (comma_expression "_Hashtable_traits<false,_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_)" (binary_expression "_Hashtable_traits<false" identifier < false) , (comma_expression "_false,_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_)" identifier , (binary_expression "_true>_>\n  ::clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_)" (binary_expression "_true>_" identifier > identifier) > (ERROR "::" : :) (call_expression "clear((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_)" identifier (argument_list "((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_)" ( (binary_expression "(_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)&this->high_abbrev_codes_" (parenthesized_expression "(_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n           *)" ( (ERROR "_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::Dwarf_abbrev_table::Abbrev_code*>_>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::" (comma_expression "_Hashtable<unsigned_int,_std" (binary_expression "_Hashtable<unsigned_int" identifier < identifier) , identifier) : : (comma_expression "pair<unsigned_int_const,_const_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : identifier : : (comma_expression "Abbrev_code*>,_std" identifier (ERROR "*>" * >) , identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<unsigned_int_const,_const_gold" (binary_expression "pair<unsigned_int_const" identifier < identifier) , identifier) : : identifier : : (binary_expression "Abbrev_code*>_>,_std" (binary_expression "Abbrev_code*>_" identifier * (ERROR ">" >) identifier) > (ERROR "," ,) identifier) : : identifier : : (comma_expression "_Select1st,_std" identifier , identifier) : : (binary_expression "equal_to<unsigned_int>,_std" (binary_expression "equal_to<unsigned_int" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "hash<unsigned_int>,_std" (binary_expression "hash<unsigned_int" identifier < identifier) > (ERROR "," ,) identifier) : : identifier : : (comma_expression "_Mod_range_hashing,_std" identifier , identifier) : : identifier : : (comma_expression "_Default_ranged_hash,_std" identifier , identifier) : : identifier : : (comma_expression "_Prime_rehash_policy,_std" identifier , identifier) : : identifier : :) (comma_expression "_Hashtable_traits<false,_false,_true>_>\n           *" (binary_expression "_Hashtable_traits<false" identifier < false) , (comma_expression "_false,_true>_>\n           *" identifier , (binary_expression "_true>_>\n           *" (binary_expression "_true>_" identifier > identifier) > (pointer_expression "*" * identifier)))) )) & (field_expression "this->high_abbrev_codes_" identifier -> field_identifier)) )))))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00467e30(long param_1)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}\n\n" (function_definition "void FUN_00467e30(long param_1)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" primitive_type (function_declarator "FUN_00467e30(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (expression_statement "plVar3 = (long *)(param_1 + 0x30);" (assignment_expression "plVar3 = (long *)(param_1 + 0x30)" identifier = (cast_expression "(long *)(param_1 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) ;) (do_statement "do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));" do (compound_statement "{\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  }" { (expression_statement "lVar1 = *plVar3;" (assignment_expression "lVar1 = *plVar3" identifier = (pointer_expression "*plVar3" * identifier)) ;) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" { (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" ( (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" identifier (argument_list "(lVar1,0x20)" ( identifier , number_literal ))) ;) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" * identifier) = number_literal) ;) })) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar3 != (long *)(param_1 + 0x830))" ( (binary_expression "plVar3 != (long *)(param_1 + 0x830)" identifier != (cast_expression "(long *)(param_1 + 0x830)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x830)" ( (binary_expression "param_1 + 0x830" identifier + number_literal) )))) )) ;) (for_statement "for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" for ( (assignment_expression "puVar2 = *(undefined8 **)(param_1 + 0x840)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 0x840)" * (cast_expression "(undefined8 **)(param_1 + 0x840)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x840)" ( (binary_expression "param_1 + 0x840" identifier + number_literal) ))))) ; (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined8 *)*puVar2" identifier = (cast_expression "(undefined8 *)*puVar2" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" { (expression_statement "lVar1 = puVar2[2];" (assignment_expression "lVar1 = puVar2[2]" identifier = (subscript_expression "puVar2[2]" identifier [ number_literal ])) ;) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" { (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" ( (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" * (cast_expression "(long *)(lVar1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" identifier (argument_list "(lVar1,0x20)" ( identifier , number_literal ))) ;) })) })) (expression_statement "FUN_0046b0f0((long *)(param_1 + 0x830));" (call_expression "FUN_0046b0f0((long *)(param_1 + 0x830))" identifier (argument_list "((long *)(param_1 + 0x830))" ( (cast_expression "(long *)(param_1 + 0x830)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x830)" ( (binary_expression "param_1 + 0x830" identifier + number_literal) ))) ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) ;) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))) ;) (return_statement return ;) })))
(function_definition "void FUN_00467e30(long param_1)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00467e30(long param_1)" (identifier "FUN_00467e30") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  long *plVar3;\n  \n  plVar3 = (long *)(param_1 + 0x30);\n  do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));\n  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }\n  FUN_0046b0f0((long *)(param_1 + 0x830));\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (expression_statement "plVar3 = (long *)(param_1 + 0x30);" (assignment_expression "plVar3 = (long *)(param_1 + 0x30)" (identifier "plVar3") (= "=") (cast_expression "(long *)(param_1 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (; ";")) (do_statement "do {\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  } while (plVar3 != (long *)(param_1 + 0x830));" (do "do") (compound_statement "{\n    lVar1 = *plVar3;\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }\n    plVar3 = plVar3 + 1;\n  }" ({ "{") (expression_statement "lVar1 = *plVar3;" (assignment_expression "lVar1 = *plVar3" (identifier "lVar1") (= "=") (pointer_expression "*plVar3" (* "*") (identifier "plVar3"))) (; ";")) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" (if "if") (parenthesized_expression "(lVar1 != 0)" (( "(") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n      *plVar3 = 0;\n    }" ({ "{") (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" (if "if") (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" (( "(") (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" (* "*") (cast_expression "(long *)(lVar1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 8)" (( "(") (binary_expression "lVar1 + 8" (identifier "lVar1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_0049e330();\n      }" ({ "{") (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" (identifier "FUN_0049e330") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" (identifier "thunk_FUN_0049e330") (argument_list "(lVar1,0x20)" (( "(") (identifier "lVar1") (, ",") (number_literal "0x20") () ")"))) (; ";")) (expression_statement "*plVar3 = 0;" (assignment_expression "*plVar3 = 0" (pointer_expression "*plVar3" (* "*") (identifier "plVar3")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" (identifier "plVar3") (= "=") (binary_expression "plVar3 + 1" (identifier "plVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar3 != (long *)(param_1 + 0x830))" (( "(") (binary_expression "plVar3 != (long *)(param_1 + 0x830)" (identifier "plVar3") (!= "!=") (cast_expression "(long *)(param_1 + 0x830)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x830)" (( "(") (binary_expression "param_1 + 0x830" (identifier "param_1") (+ "+") (number_literal "0x830")) () ")")))) () ")")) (; ";")) (for_statement "for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;\n      puVar2 = (undefined8 *)*puVar2) {\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" (for "for") (( "(") (assignment_expression "puVar2 = *(undefined8 **)(param_1 + 0x840)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined8 **)(param_1 + 0x840)" (* "*") (cast_expression "(undefined8 **)(param_1 + 0x840)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x840)" (( "(") (binary_expression "param_1 + 0x840" (identifier "param_1") (+ "+") (number_literal "0x840")) () ")"))))) (; ";") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined8 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*puVar2" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n    lVar1 = puVar2[2];\n    if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }\n  }" ({ "{") (expression_statement "lVar1 = puVar2[2];" (assignment_expression "lVar1 = puVar2[2]" (identifier "lVar1") (= "=") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (lVar1 != 0) {\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" (if "if") (parenthesized_expression "(lVar1 != 0)" (( "(") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }\n      thunk_FUN_0049e330(lVar1,0x20);\n    }" ({ "{") (if_statement "if (*(long *)(lVar1 + 8) != 0) {\n        FUN_0049e330();\n      }" (if "if") (parenthesized_expression "(*(long *)(lVar1 + 8) != 0)" (( "(") (binary_expression "*(long *)(lVar1 + 8) != 0" (pointer_expression "*(long *)(lVar1 + 8)" (* "*") (cast_expression "(long *)(lVar1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 8)" (( "(") (binary_expression "lVar1 + 8" (identifier "lVar1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_0049e330();\n      }" ({ "{") (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" (identifier "FUN_0049e330") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "thunk_FUN_0049e330(lVar1,0x20);" (call_expression "thunk_FUN_0049e330(lVar1,0x20)" (identifier "thunk_FUN_0049e330") (argument_list "(lVar1,0x20)" (( "(") (identifier "lVar1") (, ",") (number_literal "0x20") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_0046b0f0((long *)(param_1 + 0x830));" (call_expression "FUN_0046b0f0((long *)(param_1 + 0x830))" (identifier "FUN_0046b0f0") (argument_list "((long *)(param_1 + 0x830))" (( "(") (cast_expression "(long *)(param_1 + 0x830)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x830)" (( "(") (binary_expression "param_1 + 0x830" (identifier "param_1") (+ "+") (number_literal "0x830")) () ")"))) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void clear_abbrev_codes(Dwarf_abbrev_table * this) */

void __thiscall gold::type_1::function_1(type_1 *this)

{
  type_2 *var_1;
  type_3 var_4;
  type_4 *var_7;
  type_4 *var_8;
  type_2 **var_6;
  
  var_6 = this->low_abbrev_codes_;
  do {
    var_1 = *var_6;
    if (var_1 != (type_2 *)0x0) {
      var_4 = (var_1->attributes).
               super__Vector_base<gold::Dwarf_abbrev_table::var_2,_std::allocator<gold::Dwarf_abbrev_table::var_2>var_3>
               ._M_impl._M_start;
      if (var_4 != (type_3)0x0) {
        var_5(var_4);
      }
      var_5(var_1,0x20);
      *var_6 = (type_2 *)0x0;
    }
    var_6 = var_6 + 1;
  } while ((type_5 *)var_6 != &this->high_abbrev_codes_);
  for (var_7 = (this->high_abbrev_codes_)._M_h._M_before_begin._M_nxt;
      var_7 != (type_4 *)0x0; var_7 = var_7->_M_nxt) {
    var_8 = var_7[2]._M_nxt;
    if (var_8 != (type_4 *)0x0) {
      if (var_8[1]._M_nxt != (type_4 *)0x0) {
        var_5(var_8[1]._M_nxt);
      }
      var_5(var_8,0x20);
    }
  }
  std::
  _Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::type_1::type_2*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::type_1::type_2*>var_3>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::var_9<false,_false,var_10>var_3>
  ::var_11((_Hashtable<unsigned_int,_std::pair<unsigned_int_const,_const_gold::type_1::type_2*>,_std::allocator<std::pair<unsigned_int_const,_const_gold::type_1::type_2*>var_3>,_std::__detail::_Select1st,_std::equal_to<unsigned_int>,_std::hash<unsigned_int>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::var_9<false,_false,var_10>var_3>
           *)&this->high_abbrev_codes_);
  return;
}


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

void MASKED(long param_1)

{
  long lVar1;
  undefined8 *puVar2;
  long *plVar3;
  
  plVar3 = (long *)(param_1 + 0x30);
  do {
    lVar1 = *plVar3;
    if (lVar1 != 0) {
      if (*(long *)(lVar1 + 8) != 0) {
        FUN_0049e330();
      }
      thunk_FUN_0049e330(lVar1,0x20);
      *plVar3 = 0;
    }
    plVar3 = plVar3 + 1;
  } while (plVar3 != (long *)(param_1 + 0x830));
  for (puVar2 = *(undefined8 **)(param_1 + 0x840); puVar2 != (undefined8 *)0x0;
      puVar2 = (undefined8 *)*puVar2) {
    lVar1 = puVar2[2];
    if (lVar1 != 0) {
      if (*(long *)(lVar1 + 8) != 0) {
        FUN_0049e330();
      }
      thunk_FUN_0049e330(lVar1,0x20);
    }
  }
  FUN_0046b0f0((long *)(param_1 + 0x830));
  return;
}

