
/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_unique_pos(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
   * this, key_type.conflict * __k) */

pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall
std::
_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
::_M_get_insert_unique_pos
          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
           *this,key_type_conflict *__k)

{
  _Rb_tree_node_base *p_Var1;
  long lVar2;
  _Rb_tree_node_base *p_Var3;
  long lVar4;
  _Rb_tree_node_base *p_Var5;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;
  
  p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;
  if (p_Var1 == (_Rb_tree_node_base *)0x0) {
    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;
LAB_0017c014:
    p_Var1 = (_Rb_tree_node_base *)0x0;
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;
    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);
    lVar4 = *__k;
    lVar2 = *(long *)(p_Var1 + 1);
    p_Var5 = p_Var3;
  }
  else {
    lVar4 = *__k;
    do {
      p_Var3 = p_Var1;
      lVar2 = *(long *)(p_Var3 + 1);
      if (lVar4 < lVar2) {
        p_Var1 = p_Var3->_M_left;
      }
      else {
        p_Var1 = p_Var3->_M_right;
      }
    } while (p_Var1 != (_Base_ptr)0x0);
    p_Var1 = p_Var3;
    p_Var5 = p_Var3;
    if (lVar4 < lVar2) goto LAB_0017c014;
  }
  p_Var3 = (_Rb_tree_node_base *)0x0;
  if (lVar2 < lVar4) {
    p_Var1 = (_Rb_tree_node_base *)0x0;
    p_Var3 = p_Var5;
  }
LAB_0017c007:
  pVar6.second = p_Var3;
  pVar6.first = p_Var1;
  return pVar6;
}



undefined1  [16] FUN_0017bfb0(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined1 auVar6 [16];
  
  if (*(long *)(param_1 + 0x10) == 0) {
    lVar3 = param_1 + 8;
LAB_0017c014:
    lVar1 = 0;
    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;
    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);
    lVar4 = *param_2;
    lVar2 = *(long *)(lVar1 + 0x20);
    lVar5 = lVar3;
  }
  else {
    lVar4 = *param_2;
    lVar1 = *(long *)(param_1 + 0x10);
    do {
      lVar3 = lVar1;
      lVar2 = *(long *)(lVar3 + 0x20);
      if (lVar4 < lVar2) {
        lVar1 = *(long *)(lVar3 + 0x10);
      }
      else {
        lVar1 = *(long *)(lVar3 + 0x18);
      }
    } while (lVar1 != 0);
    lVar1 = lVar3;
    lVar5 = lVar3;
    if (lVar4 < lVar2) goto LAB_0017c014;
  }
  lVar3 = 0;
  if (lVar2 < lVar4) {
    lVar1 = 0;
    lVar3 = lVar5;
  }
LAB_0017c007:
  auVar6._8_8_ = lVar3;
  auVar6._0_8_ = lVar1;
  return auVar6;
}


PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBX,qword ptr [RDI + 0x10]
TEST RBX,RBX
JZ 0x0017c010
MOV R8,qword ptr [RSI]
JMP 0x0017bfda
MOV RAX,qword ptr [RBX + 0x10]
MOV R9D,0x1
TEST RAX,RAX
JZ 0x0017bfef
MOV RBX,RAX
MOV RCX,qword ptr [RBX + 0x20]
CMP R8,RCX
JL 0x0017bfc8
MOV RAX,qword ptr [RBX + 0x18]
XOR R9D,R9D
TEST RAX,RAX
JNZ 0x0017bfd7
MOV R10,RBX
TEST R9B,R9B
JNZ 0x0017c014
XOR EDX,EDX
MOV RAX,RBX
CMP R8,RCX
CMOVG RAX,RDX
CMOVG RDX,R10
ADD RSP,0x8
POP RBX
POP RBP
RET
LEA RBX,[RDI + 0x8]
XOR EAX,EAX
MOV RDX,RBX
CMP qword ptr [RDI + 0x18],RBX
JZ 0x0017c007
MOV RDI,RBX
MOV RBP,RSI
CALL 0x002f1370
MOV R10,RBX
MOV R8,qword ptr [RBP]
MOV RCX,qword ptr [RAX + 0x20]
MOV RBX,RAX
JMP 0x0017bff7
(translation_unit "undefined1  [16] FUN_0017bfb0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined1 auVar6 [16];\n  \n  if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  lVar3 = 0;\n  if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }\nLAB_0017c007:\n  auVar6._8_8_ = lVar3;\n  auVar6._0_8_ = lVar1;\n  return auVar6;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (macro_type_specifier "FUN_0017bfb0(long param_1,long *param_2)" identifier ( (ERROR "long param_1,long *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) , (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *))) (type_descriptor "param_2" type_identifier) )) ; (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined1 auVar6 [16];\n  \n  if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  lVar3 = 0;\n  if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }\nLAB_0017c007:\n  auVar6._8_8_ = lVar3;\n  auVar6._0_8_ = lVar1;\n  return auVar6;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" ( (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }" { (expression_statement "lVar3 = param_1 + 8;" (assignment_expression "lVar3 = param_1 + 8" identifier = (binary_expression "param_1 + 8" identifier + number_literal)) ;) (labeled_statement "LAB_0017c014:\n    lVar1 = 0;" statement_identifier : (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" identifier = number_literal) ;)) (if_statement "if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;" if (parenthesized_expression "(*(long *)(param_1 + 0x18) == lVar3)" ( (binary_expression "*(long *)(param_1 + 0x18) == lVar3" (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_0017c007;" goto statement_identifier ;)) (expression_statement "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);" (assignment_expression "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3)" identifier = (call_expression "thunk_FUN_002f12b0(lVar3,param_2,lVar3)" identifier (argument_list "(lVar3,param_2,lVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "lVar2 = *(long *)(lVar1 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar1 + 0x20)" identifier = (pointer_expression "*(long *)(lVar1 + 0x20)" * (cast_expression "(long *)(lVar1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x20)" ( (binary_expression "lVar1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) }) (else_clause "else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" else (compound_statement "{\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" { (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "lVar1 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (do_statement "do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);" do (compound_statement "{\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    }" { (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "lVar2 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar3 + 0x20)" identifier = (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }" { (expression_statement "lVar1 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x10)" identifier = (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" else (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" { (expression_statement "lVar1 = *(long *)(lVar3 + 0x18);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x18)" identifier = (pointer_expression "*(long *)(lVar3 + 0x18)" * (cast_expression "(long *)(lVar3 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) ))))) ;) }))) }) while (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) ;) (expression_statement "lVar1 = lVar3;" (assignment_expression "lVar1 = lVar3" identifier = identifier) ;) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) (if_statement "if (lVar4 < lVar2) goto LAB_0017c014;" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (goto_statement "goto LAB_0017c014;" goto statement_identifier ;)) }))) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (if_statement "if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" if (parenthesized_expression "(lVar2 < lVar4)" ( (binary_expression "lVar2 < lVar4" identifier < identifier) )) (compound_statement "{\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" { (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" identifier = number_literal) ;) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" identifier = identifier) ;) })) (labeled_statement "LAB_0017c007:\n  auVar6._8_8_ = lVar3;" statement_identifier : (expression_statement "auVar6._8_8_ = lVar3;" (assignment_expression "auVar6._8_8_ = lVar3" (field_expression "auVar6._8_8_" identifier . field_identifier) = identifier) ;)) (expression_statement "auVar6._0_8_ = lVar1;" (assignment_expression "auVar6._0_8_ = lVar1" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) }))
(translation_unit "/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>\n   _M_get_insert_unique_pos(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n   * this, key_type.conflict * __k) */\n\npair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> __thiscall\nstd::\n_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n::_M_get_insert_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,key_type_conflict *__k)\n\n{\n  _Rb_tree_node_base *p_Var1;\n  long lVar2;\n  _Rb_tree_node_base *p_Var3;\n  long lVar4;\n  _Rb_tree_node_base *p_Var5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  \n  p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n  if (p_Var1 == (_Rb_tree_node_base *)0x0) {\n    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;\nLAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;\n    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);\n    lVar4 = *__k;\n    lVar2 = *(long *)(p_Var1 + 1);\n    p_Var5 = p_Var3;\n  }\n  else {\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  p_Var3 = (_Rb_tree_node_base *)0x0;\n  if (lVar2 < lVar4) {\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    p_Var3 = p_Var5;\n  }\nLAB_0017c007:\n  pVar6.second = p_Var3;\n  pVar6.first = p_Var1;\n  return pVar6;\n}\n\n" comment (ERROR "pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : : identifier * >) (function_definition "__thiscall\nstd::\n_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n::_M_get_insert_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,key_type_conflict *__k)\n\n{\n  _Rb_tree_node_base *p_Var1;\n  long lVar2;\n  _Rb_tree_node_base *p_Var3;\n  long lVar4;\n  _Rb_tree_node_base *p_Var5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  \n  p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n  if (p_Var1 == (_Rb_tree_node_base *)0x0) {\n    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;\nLAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;\n    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);\n    lVar4 = *__k;\n    lVar2 = *(long *)(p_Var1 + 1);\n    p_Var5 = p_Var3;\n  }\n  else {\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  p_Var3 = (_Rb_tree_node_base *)0x0;\n  if (lVar2 < lVar4) {\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    p_Var3 = p_Var5;\n  }\nLAB_0017c007:\n  pVar6.second = p_Var3;\n  pVar6.first = p_Var1;\n  return pVar6;\n}" (ms_call_modifier "__thiscall" __thiscall) type_identifier (ERROR "::\n_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n::" : : identifier < identifier , identifier : : identifier < identifier , identifier : : identifier > , identifier : : identifier < identifier : : identifier < identifier , identifier : : identifier > identifier > , identifier : : identifier < identifier > , identifier : : identifier < identifier : : identifier < identifier , identifier : : identifier > identifier > identifier > : :) (function_declarator "_M_get_insert_unique_pos\n          (_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,key_type_conflict *__k)" identifier (parameter_list "(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>\n           *this,key_type_conflict *__k)" ( (parameter_declaration "_Rb_tree<long_int" type_identifier (ERROR "<" <) identifier) , (parameter_declaration "_std::pair<long_int_const" type_identifier (ERROR "::pair<" : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member" type_identifier (ERROR "::" : :) identifier) (ERROR ">" >) , (parameter_declaration "_std::_Select1st<std::pair<long_int_const" type_identifier (ERROR "::_Select1st<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member>_" type_identifier (ERROR "::Archive_member>" : : identifier >) identifier) (ERROR ">" >) , (parameter_declaration "_std::less<long_int" type_identifier (ERROR "::less<" : : identifier <) identifier) (ERROR ">" >) , (parameter_declaration "_std::allocator<std::pair<long_int_const" type_identifier (ERROR "::allocator<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Archive_member>_>_>\n           *this" type_identifier (ERROR "::Archive_member>_>_>" : : identifier > identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "key_type_conflict *__k" type_identifier (pointer_declarator "*__k" * identifier)) ))) (compound_statement "{\n  _Rb_tree_node_base *p_Var1;\n  long lVar2;\n  _Rb_tree_node_base *p_Var3;\n  long lVar4;\n  _Rb_tree_node_base *p_Var5;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar6;\n  \n  p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;\n  if (p_Var1 == (_Rb_tree_node_base *)0x0) {\n    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;\nLAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;\n    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);\n    lVar4 = *__k;\n    lVar2 = *(long *)(p_Var1 + 1);\n    p_Var5 = p_Var3;\n  }\n  else {\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  p_Var3 = (_Rb_tree_node_base *)0x0;\n  if (lVar2 < lVar4) {\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    p_Var3 = p_Var5;\n  }\nLAB_0017c007:\n  pVar6.second = p_Var3;\n  pVar6.first = p_Var1;\n  return pVar6;\n}" { (declaration "_Rb_tree_node_base *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "_Rb_tree_node_base *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "_Rb_tree_node_base *p_Var5;" type_identifier (pointer_declarator "*p_Var5" * identifier) ;) (ERROR "pair<std::_Rb_tree_node_base*,_std::" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : :) (expression_statement "_Rb_tree_node_base*> pVar6;" (binary_expression "_Rb_tree_node_base*> pVar6" identifier * (ERROR ">" >) identifier) ;) (expression_statement "p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;" (assignment_expression "p_Var1 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent" identifier = (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_parent" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ;) (if_statement "if (p_Var1 == (_Rb_tree_node_base *)0x0) {\n    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;\nLAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;\n    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);\n    lVar4 = *__k;\n    lVar2 = *(long *)(p_Var1 + 1);\n    p_Var5 = p_Var3;\n  }\n  else {\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" if (parenthesized_expression "(p_Var1 == (_Rb_tree_node_base *)0x0)" ( (binary_expression "p_Var1 == (_Rb_tree_node_base *)0x0" identifier == (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;\nLAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;\n    p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);\n    lVar4 = *__k;\n    lVar2 = *(long *)(p_Var1 + 1);\n    p_Var5 = p_Var3;\n  }" { (expression_statement "p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header;" (assignment_expression "p_Var3 = &(this->_M_impl).super__Rb_tree_header._M_header" identifier = (pointer_expression "&(this->_M_impl).super__Rb_tree_header._M_header" & (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (labeled_statement "LAB_0017c014:\n    p_Var1 = (_Rb_tree_node_base *)0x0;" statement_identifier : (expression_statement "p_Var1 = (_Rb_tree_node_base *)0x0;" (assignment_expression "p_Var1 = (_Rb_tree_node_base *)0x0" identifier = (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) (if_statement "if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3) goto LAB_0017c007;" if (parenthesized_expression "((this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3)" ( (binary_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left == p_Var3" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header._M_left" (field_expression "(this->_M_impl).super__Rb_tree_header._M_header" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) == identifier) )) (goto_statement "goto LAB_0017c007;" goto statement_identifier ;)) (expression_statement "p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3);" (assignment_expression "p_Var1 = (_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3)" identifier = (cast_expression "(_Rb_tree_node_base *)_Rb_tree_decrement(p_Var3)" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "_Rb_tree_decrement(p_Var3)" identifier (argument_list "(p_Var3)" ( identifier ))))) ;) (expression_statement "lVar4 = *__k;" (assignment_expression "lVar4 = *__k" identifier = (pointer_expression "*__k" * identifier)) ;) (expression_statement "lVar2 = *(long *)(p_Var1 + 1);" (assignment_expression "lVar2 = *(long *)(p_Var1 + 1)" identifier = (pointer_expression "*(long *)(p_Var1 + 1)" * (cast_expression "(long *)(p_Var1 + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var1 + 1)" ( (binary_expression "p_Var1 + 1" identifier + number_literal) ))))) ;) (expression_statement "p_Var5 = p_Var3;" (assignment_expression "p_Var5 = p_Var3" identifier = identifier) ;) }) (else_clause "else {\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" else (compound_statement "{\n    lVar4 = *__k;\n    do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);\n    p_Var1 = p_Var3;\n    p_Var5 = p_Var3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" { (expression_statement "lVar4 = *__k;" (assignment_expression "lVar4 = *__k" identifier = (pointer_expression "*__k" * identifier)) ;) (do_statement "do {\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    } while (p_Var1 != (_Base_ptr)0x0);" do (compound_statement "{\n      p_Var3 = p_Var1;\n      lVar2 = *(long *)(p_Var3 + 1);\n      if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }\n    }" { (expression_statement "p_Var3 = p_Var1;" (assignment_expression "p_Var3 = p_Var1" identifier = identifier) ;) (expression_statement "lVar2 = *(long *)(p_Var3 + 1);" (assignment_expression "lVar2 = *(long *)(p_Var3 + 1)" identifier = (pointer_expression "*(long *)(p_Var3 + 1)" * (cast_expression "(long *)(p_Var3 + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var3 + 1)" ( (binary_expression "p_Var3 + 1" identifier + number_literal) ))))) ;) (if_statement "if (lVar4 < lVar2) {\n        p_Var1 = p_Var3->_M_left;\n      }\n      else {\n        p_Var1 = p_Var3->_M_right;\n      }" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (compound_statement "{\n        p_Var1 = p_Var3->_M_left;\n      }" { (expression_statement "p_Var1 = p_Var3->_M_left;" (assignment_expression "p_Var1 = p_Var3->_M_left" identifier = (field_expression "p_Var3->_M_left" identifier -> field_identifier)) ;) }) (else_clause "else {\n        p_Var1 = p_Var3->_M_right;\n      }" else (compound_statement "{\n        p_Var1 = p_Var3->_M_right;\n      }" { (expression_statement "p_Var1 = p_Var3->_M_right;" (assignment_expression "p_Var1 = p_Var3->_M_right" identifier = (field_expression "p_Var3->_M_right" identifier -> field_identifier)) ;) }))) }) while (parenthesized_expression "(p_Var1 != (_Base_ptr)0x0)" ( (binary_expression "p_Var1 != (_Base_ptr)0x0" identifier != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) ;) (expression_statement "p_Var1 = p_Var3;" (assignment_expression "p_Var1 = p_Var3" identifier = identifier) ;) (expression_statement "p_Var5 = p_Var3;" (assignment_expression "p_Var5 = p_Var3" identifier = identifier) ;) (if_statement "if (lVar4 < lVar2) goto LAB_0017c014;" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (goto_statement "goto LAB_0017c014;" goto statement_identifier ;)) }))) (expression_statement "p_Var3 = (_Rb_tree_node_base *)0x0;" (assignment_expression "p_Var3 = (_Rb_tree_node_base *)0x0" identifier = (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (lVar2 < lVar4) {\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    p_Var3 = p_Var5;\n  }" if (parenthesized_expression "(lVar2 < lVar4)" ( (binary_expression "lVar2 < lVar4" identifier < identifier) )) (compound_statement "{\n    p_Var1 = (_Rb_tree_node_base *)0x0;\n    p_Var3 = p_Var5;\n  }" { (expression_statement "p_Var1 = (_Rb_tree_node_base *)0x0;" (assignment_expression "p_Var1 = (_Rb_tree_node_base *)0x0" identifier = (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "p_Var3 = p_Var5;" (assignment_expression "p_Var3 = p_Var5" identifier = identifier) ;) })) (labeled_statement "LAB_0017c007:\n  pVar6.second = p_Var3;" statement_identifier : (expression_statement "pVar6.second = p_Var3;" (assignment_expression "pVar6.second = p_Var3" (field_expression "pVar6.second" identifier . field_identifier) = identifier) ;)) (expression_statement "pVar6.first = p_Var1;" (assignment_expression "pVar6.first = p_Var1" (field_expression "pVar6.first" identifier . field_identifier) = identifier) ;) (return_statement "return pVar6;" return identifier ;) })))
(translation_unit "undefined1  [16] FUN_0017bfb0(long param_1,long *param_2)\n\n{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined1 auVar6 [16];\n  \n  if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  lVar3 = 0;\n  if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }\nLAB_0017c007:\n  auVar6._8_8_ = lVar3;\n  auVar6._0_8_ = lVar1;\n  return auVar6;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (macro_type_specifier "FUN_0017bfb0(long param_1,long *param_2)" identifier ( (ERROR "long param_1,long *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" long type_identifier)) , (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *))) (type_descriptor "param_2" type_identifier) )) ; (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined1 auVar6 [16];\n  \n  if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  lVar3 = 0;\n  if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }\nLAB_0017c007:\n  auVar6._8_8_ = lVar3;\n  auVar6._0_8_ = lVar1;\n  return auVar6;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 auVar6 [16];" type_identifier (array_declarator "auVar6 [16]" identifier [ number_literal ]) ;) (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" ( (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }" { (expression_statement "lVar3 = param_1 + 8;" (assignment_expression "lVar3 = param_1 + 8" identifier = (binary_expression "param_1 + 8" identifier + number_literal)) ;) (labeled_statement "LAB_0017c014:\n    lVar1 = 0;" statement_identifier : (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" identifier = number_literal) ;)) (if_statement "if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;" if (parenthesized_expression "(*(long *)(param_1 + 0x18) == lVar3)" ( (binary_expression "*(long *)(param_1 + 0x18) == lVar3" (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_0017c007;" goto statement_identifier ;)) (expression_statement "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);" (assignment_expression "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3)" identifier = (call_expression "thunk_FUN_002f12b0(lVar3,param_2,lVar3)" identifier (argument_list "(lVar3,param_2,lVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "lVar2 = *(long *)(lVar1 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar1 + 0x20)" identifier = (pointer_expression "*(long *)(lVar1 + 0x20)" * (cast_expression "(long *)(lVar1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x20)" ( (binary_expression "lVar1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) }) (else_clause "else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" else (compound_statement "{\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" { (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "lVar1 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + 0x10)" * (cast_expression "(long *)(param_1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (do_statement "do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);" do (compound_statement "{\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    }" { (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" identifier = identifier) ;) (expression_statement "lVar2 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar3 + 0x20)" identifier = (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }" { (expression_statement "lVar1 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x10)" identifier = (pointer_expression "*(long *)(lVar3 + 0x10)" * (cast_expression "(long *)(lVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x10)" ( (binary_expression "lVar3 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" else (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" { (expression_statement "lVar1 = *(long *)(lVar3 + 0x18);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x18)" identifier = (pointer_expression "*(long *)(lVar3 + 0x18)" * (cast_expression "(long *)(lVar3 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x18)" ( (binary_expression "lVar3 + 0x18" identifier + number_literal) ))))) ;) }))) }) while (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) ;) (expression_statement "lVar1 = lVar3;" (assignment_expression "lVar1 = lVar3" identifier = identifier) ;) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" identifier = identifier) ;) (if_statement "if (lVar4 < lVar2) goto LAB_0017c014;" if (parenthesized_expression "(lVar4 < lVar2)" ( (binary_expression "lVar4 < lVar2" identifier < identifier) )) (goto_statement "goto LAB_0017c014;" goto statement_identifier ;)) }))) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" identifier = number_literal) ;) (if_statement "if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" if (parenthesized_expression "(lVar2 < lVar4)" ( (binary_expression "lVar2 < lVar4" identifier < identifier) )) (compound_statement "{\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" { (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" identifier = number_literal) ;) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" identifier = identifier) ;) })) (labeled_statement "LAB_0017c007:\n  auVar6._8_8_ = lVar3;" statement_identifier : (expression_statement "auVar6._8_8_ = lVar3;" (assignment_expression "auVar6._8_8_ = lVar3" (field_expression "auVar6._8_8_" identifier . field_identifier) = identifier) ;)) (expression_statement "auVar6._0_8_ = lVar1;" (assignment_expression "auVar6._0_8_ = lVar1" (field_expression "auVar6._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar6;" return identifier ;) }))
(translation_unit (expression_statement (subscript_expression IDENT [ LIT ]) ;) (macro_type_specifier IDENT ( (ERROR (type_descriptor (sized_type_specifier long TYPE)) , (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *))) (type_descriptor TYPE) )) ; (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (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 (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (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) )))) == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (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 = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;)) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return IDENT ;) }))
(expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" (identifier "undefined1") ([ "[") (number_literal "16") (] "]")) (; "")) (macro_type_specifier "FUN_0017bfb0(long param_1,long *param_2)" (identifier "FUN_0017bfb0") (( "(") (ERROR "long param_1,long *" (type_descriptor "long param_1" (sized_type_specifier "long param_1" (long "long") (type_identifier "param_1"))) (, ",") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*")))) (type_descriptor "param_2" (type_identifier "param_2")) () ")")) (; "") (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  long lVar5;\n  undefined1 auVar6 [16];\n  \n  if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }\n  lVar3 = 0;\n  if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }\nLAB_0017c007:\n  auVar6._8_8_ = lVar3;\n  auVar6._0_8_ = lVar1;\n  return auVar6;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "undefined1 auVar6 [16];" (type_identifier "undefined1") (array_declarator "auVar6 [16]" (identifier "auVar6") ([ "[") (number_literal "16") (] "]")) (; ";")) (if_statement "if (*(long *)(param_1 + 0x10) == 0) {\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }\n  else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x10) == 0" (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    lVar3 = param_1 + 8;\nLAB_0017c014:\n    lVar1 = 0;\n    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;\n    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);\n    lVar4 = *param_2;\n    lVar2 = *(long *)(lVar1 + 0x20);\n    lVar5 = lVar3;\n  }" ({ "{") (expression_statement "lVar3 = param_1 + 8;" (assignment_expression "lVar3 = param_1 + 8" (identifier "lVar3") (= "=") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8"))) (; ";")) (labeled_statement "LAB_0017c014:\n    lVar1 = 0;" (statement_identifier "LAB_0017c014") (: ":") (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" (identifier "lVar1") (= "=") (number_literal "0")) (; ";"))) (if_statement "if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x18) == lVar3)" (( "(") (binary_expression "*(long *)(param_1 + 0x18) == lVar3" (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (identifier "lVar3")) () ")")) (goto_statement "goto LAB_0017c007;" (goto "goto") (statement_identifier "LAB_0017c007") (; ";"))) (expression_statement "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);" (assignment_expression "lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3)" (identifier "lVar1") (= "=") (call_expression "thunk_FUN_002f12b0(lVar3,param_2,lVar3)" (identifier "thunk_FUN_002f12b0") (argument_list "(lVar3,param_2,lVar3)" (( "(") (identifier "lVar3") (, ",") (identifier "param_2") (, ",") (identifier "lVar3") () ")")))) (; ";")) (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" (identifier "lVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "lVar2 = *(long *)(lVar1 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar1 + 0x20)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(lVar1 + 0x20)" (* "*") (cast_expression "(long *)(lVar1 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x20)" (( "(") (binary_expression "lVar1 + 0x20" (identifier "lVar1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" (identifier "lVar5") (= "=") (identifier "lVar3")) (; ";")) (} "}")) (else_clause "else {\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" (else "else") (compound_statement "{\n    lVar4 = *param_2;\n    lVar1 = *(long *)(param_1 + 0x10);\n    do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);\n    lVar1 = lVar3;\n    lVar5 = lVar3;\n    if (lVar4 < lVar2) goto LAB_0017c014;\n  }" ({ "{") (expression_statement "lVar4 = *param_2;" (assignment_expression "lVar4 = *param_2" (identifier "lVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "lVar1 = *(long *)(param_1 + 0x10);" (assignment_expression "lVar1 = *(long *)(param_1 + 0x10)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(param_1 + 0x10)" (* "*") (cast_expression "(long *)(param_1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (do_statement "do {\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    } while (lVar1 != 0);" (do "do") (compound_statement "{\n      lVar3 = lVar1;\n      lVar2 = *(long *)(lVar3 + 0x20);\n      if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }\n    }" ({ "{") (expression_statement "lVar3 = lVar1;" (assignment_expression "lVar3 = lVar1" (identifier "lVar3") (= "=") (identifier "lVar1")) (; ";")) (expression_statement "lVar2 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar2 = *(long *)(lVar3 + 0x20)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(lVar3 + 0x20)" (* "*") (cast_expression "(long *)(lVar3 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x20)" (( "(") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if (lVar4 < lVar2) {\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }\n      else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" (if "if") (parenthesized_expression "(lVar4 < lVar2)" (( "(") (binary_expression "lVar4 < lVar2" (identifier "lVar4") (< "<") (identifier "lVar2")) () ")")) (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x10);\n      }" ({ "{") (expression_statement "lVar1 = *(long *)(lVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x10)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(lVar3 + 0x10)" (* "*") (cast_expression "(long *)(lVar3 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x10)" (( "(") (binary_expression "lVar3 + 0x10" (identifier "lVar3") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" (else "else") (compound_statement "{\n        lVar1 = *(long *)(lVar3 + 0x18);\n      }" ({ "{") (expression_statement "lVar1 = *(long *)(lVar3 + 0x18);" (assignment_expression "lVar1 = *(long *)(lVar3 + 0x18)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(lVar3 + 0x18)" (* "*") (cast_expression "(long *)(lVar3 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x18)" (( "(") (binary_expression "lVar3 + 0x18" (identifier "lVar3") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}")))) (} "}")) (while "while") (parenthesized_expression "(lVar1 != 0)" (( "(") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "lVar1 = lVar3;" (assignment_expression "lVar1 = lVar3" (identifier "lVar1") (= "=") (identifier "lVar3")) (; ";")) (expression_statement "lVar5 = lVar3;" (assignment_expression "lVar5 = lVar3" (identifier "lVar5") (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (lVar4 < lVar2) goto LAB_0017c014;" (if "if") (parenthesized_expression "(lVar4 < lVar2)" (( "(") (binary_expression "lVar4 < lVar2" (identifier "lVar4") (< "<") (identifier "lVar2")) () ")")) (goto_statement "goto LAB_0017c014;" (goto "goto") (statement_identifier "LAB_0017c014") (; ";"))) (} "}")))) (expression_statement "lVar3 = 0;" (assignment_expression "lVar3 = 0" (identifier "lVar3") (= "=") (number_literal "0")) (; ";")) (if_statement "if (lVar2 < lVar4) {\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" (if "if") (parenthesized_expression "(lVar2 < lVar4)" (( "(") (binary_expression "lVar2 < lVar4" (identifier "lVar2") (< "<") (identifier "lVar4")) () ")")) (compound_statement "{\n    lVar1 = 0;\n    lVar3 = lVar5;\n  }" ({ "{") (expression_statement "lVar1 = 0;" (assignment_expression "lVar1 = 0" (identifier "lVar1") (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar3 = lVar5;" (assignment_expression "lVar3 = lVar5" (identifier "lVar3") (= "=") (identifier "lVar5")) (; ";")) (} "}"))) (labeled_statement "LAB_0017c007:\n  auVar6._8_8_ = lVar3;" (statement_identifier "LAB_0017c007") (: ":") (expression_statement "auVar6._8_8_ = lVar3;" (assignment_expression "auVar6._8_8_ = lVar3" (field_expression "auVar6._8_8_" (identifier "auVar6") (. ".") (field_identifier "_8_8_")) (= "=") (identifier "lVar3")) (; ";"))) (expression_statement "auVar6._0_8_ = lVar1;" (assignment_expression "auVar6._0_8_ = lVar1" (field_expression "auVar6._0_8_" (identifier "auVar6") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "lVar1")) (; ";")) (return_statement "return auVar6;" (return "return") (identifier "auVar6") (; ";")) (} "}"))

/* DWARF original prototype: pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*>
   _M_get_insert_unique_pos(_Rb_tree<long_int,_std::pair<long_int_const,_gold::Archive_member>,_std::_Select1st<std::pair<long_int_const,_gold::Archive_member>_>,_std::less<long_int>,_std::allocator<std::pair<long_int_const,_gold::Archive_member>_>_>
   * this, key_type.conflict * __k) */

pair<type_1::type_6*,type_3::type_6*> __thiscall
type_1::
type_2<long_int,type_3::pair<long_int_const,type_4::Archive_member>,type_3::_Select1st<type_1::pair<long_int_const,type_4::Archive_member>_>,type_3::less<long_int>,type_3::allocator<type_1::pair<long_int_const,type_4::Archive_member>_>_>
::function_1
          (type_2<long_int,type_3::pair<long_int_const,type_4::Archive_member>,type_3::_Select1st<type_1::pair<long_int_const,type_4::Archive_member>_>,type_3::less<long_int>,type_3::allocator<type_1::pair<long_int_const,type_4::Archive_member>_>_>
           *this,type_5 *__k)

{
  type_6 *var_2;
  long var_6;
  type_6 *var_3;
  long var_5;
  type_6 *p_Var5;
  pair<type_1::type_6*,type_3::type_6*> var_1;
  
  var_2 = (this->_M_impl).super__Rb_tree_header._M_header._M_parent;
  if (var_2 == (type_6 *)0x0) {
    var_3 = &(this->_M_impl).super__Rb_tree_header._M_header;
LAB_0017c014:
    var_2 = (type_6 *)0x0;
    if ((this->_M_impl).super__Rb_tree_header._M_header._M_left == var_3) goto LAB_0017c007;
    var_2 = (type_6 *)var_4(var_3);
    var_5 = *__k;
    var_6 = *(long *)(var_2 + 1);
    p_Var5 = var_3;
  }
  else {
    var_5 = *__k;
    do {
      var_3 = var_2;
      var_6 = *(long *)(var_3 + 1);
      if (var_5 < var_6) {
        var_2 = var_3->_M_left;
      }
      else {
        var_2 = var_3->_M_right;
      }
    } while (var_2 != (type_7)0x0);
    var_2 = var_3;
    p_Var5 = var_3;
    if (var_5 < var_6) goto LAB_0017c014;
  }
  var_3 = (type_6 *)0x0;
  if (var_6 < var_5) {
    var_2 = (type_6 *)0x0;
    var_3 = p_Var5;
  }
LAB_0017c007:
  var_1.second = var_3;
  var_1.first = var_2;
  return var_1;
}


(translation_unit (expression_statement (subscript_expression argument: (identifier) index: (number_literal)) (MISSING ";")) (macro_type_specifier name: (identifier) (ERROR (type_descriptor type: (sized_type_specifier type: (type_identifier))) (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator))) type: (type_descriptor type: (type_identifier))) (MISSING ";") (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (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 (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (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: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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))))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (return_statement (identifier))))

undefined1  [16] MASKED(long param_1,long *param_2)

{
  long lVar1;
  long lVar2;
  long lVar3;
  long lVar4;
  long lVar5;
  undefined1 auVar6 [16];
  
  if (*(long *)(param_1 + 0x10) == 0) {
    lVar3 = param_1 + 8;
LAB_0017c014:
    lVar1 = 0;
    if (*(long *)(param_1 + 0x18) == lVar3) goto LAB_0017c007;
    lVar1 = thunk_FUN_002f12b0(lVar3,param_2,lVar3);
    lVar4 = *param_2;
    lVar2 = *(long *)(lVar1 + 0x20);
    lVar5 = lVar3;
  }
  else {
    lVar4 = *param_2;
    lVar1 = *(long *)(param_1 + 0x10);
    do {
      lVar3 = lVar1;
      lVar2 = *(long *)(lVar3 + 0x20);
      if (lVar4 < lVar2) {
        lVar1 = *(long *)(lVar3 + 0x10);
      }
      else {
        lVar1 = *(long *)(lVar3 + 0x18);
      }
    } while (lVar1 != 0);
    lVar1 = lVar3;
    lVar5 = lVar3;
    if (lVar4 < lVar2) goto LAB_0017c014;
  }
  lVar3 = 0;
  if (lVar2 < lVar4) {
    lVar1 = 0;
    lVar3 = lVar5;
  }
LAB_0017c007:
  auVar6._8_8_ = lVar3;
  auVar6._0_8_ = lVar1;
  return auVar6;
}

