
/* DWARF original prototype: iterator
   find(_Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>
   * this, key_type * __k) */

iterator __thiscall
std::
_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
::find(_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
       *this,key_type *__k)

{
  byte bVar1;
  __node_base *p_Var2;
  ulong uVar3;
  byte *pbVar4;
  
  if (__k->r_sym_ == 0xffffffff) {
    pbVar4 = (byte *)((__k->u_).symbol)->name_;
  }
  else {
    pbVar4 = (byte *)((__k->u_).symbol)->version_;
  }
  uVar3 = 0x1505;
  bVar1 = *pbVar4;
  while (bVar1 != 0) {
    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;
    bVar1 = pbVar4[1];
    pbVar4 = pbVar4 + 1;
  }
  uVar3 = (long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)
          ^ uVar3;
  p_Var2 = _M_find_before_node(this,uVar3 % *(ulong *)(this + 8),__k,uVar3);
  if ((p_Var2 != (__node_base *)0x0) && ((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0)) {
    return (iterator)
           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>
            )p_Var2->_M_nxt;
  }
  return (iterator)(__node_type *)0x0;
}



long FUN_002f1770(long param_1,uint *param_2)

{
  byte bVar1;
  long *plVar2;
  ulong uVar3;
  byte *pbVar4;
  
  if (param_2[1] == 0xffffffff) {
    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);
  }
  else {
    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];
  }
  uVar3 = 0x1505;
  bVar1 = *pbVar4;
  while (bVar1 != 0) {
    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;
    bVar1 = pbVar4[1];
    pbVar4 = pbVar4 + 1;
  }
  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^
                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %
                                        *(ulong *)(param_1 + 8),param_2);
  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {
    return *plVar2;
  }
  return 0;
}


MOV EAX,dword ptr [RSI + 0x4]
MOV RDX,qword ptr [RSI + 0x8]
CMP EAX,-0x1
JZ 0x002f1800
MOV R8,qword ptr [RDX + 0x8]
CMP byte ptr [R8],0x0
MOV EDX,0x1505
JNZ 0x002f17e0
MOV ECX,dword ptr [RSI]
MOV R8D,dword ptr [RSI + 0x10]
SHL EAX,0x2
AND EAX,0xfffc
SHL R8D,0x10
AND ECX,0x3
XOR ECX,R8D
MOVSXD RCX,ECX
XOR RCX,RAX
XOR RCX,RDX
XOR EDX,EDX
MOV RAX,RCX
DIV qword ptr [RDI + 0x8]
MOV R8,RDX
MOV RDX,RSI
MOV RSI,R8
CALL 0x002eaef0
TEST RAX,RAX
JZ 0x002f17d8
MOV RAX,qword ptr [RAX]
TEST RAX,RAX
JZ 0x002f17d8
RET
XOR EAX,EAX
RET
MOV RCX,RDX
ADD R8,0x1
SHL RCX,0x5
ADD RCX,RDX
MOVZX EDX,byte ptr [R8 + -0x1]
ADD RDX,RCX
CMP byte ptr [R8],0x0
JZ 0x002f178f
JMP 0x002f17e0
MOV R8,qword ptr [RDX]
JMP 0x002f1784
(translation_unit "long FUN_002f1770(long param_1,uint *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}\n\n" (function_definition "long FUN_002f1770(long param_1,uint *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002f1770(long param_1,uint *param_2)" identifier (parameter_list "(long param_1,uint *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (if_statement "if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" if (parenthesized_expression "(param_2[1] == 0xffffffff)" ( (binary_expression "param_2[1] == 0xffffffff" (subscript_expression "param_2[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }" { (expression_statement "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);" (assignment_expression "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2)" identifier = (cast_expression "(byte *)**(undefined8 **)(param_2 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined8 **)(param_2 + 2)" * (pointer_expression "*(undefined8 **)(param_2 + 2)" * (cast_expression "(undefined8 **)(param_2 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) ))))))) ;) }) (else_clause "else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" else (compound_statement "{\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" { (expression_statement "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];" (assignment_expression "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1]" identifier = (cast_expression "(byte *)(*(undefined8 **)(param_2 + 2))[1]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "(*(undefined8 **)(param_2 + 2))[1]" (parenthesized_expression "(*(undefined8 **)(param_2 + 2))" ( (pointer_expression "*(undefined8 **)(param_2 + 2)" * (cast_expression "(undefined8 **)(param_2 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) )))) )) [ number_literal ]))) ;) }))) (expression_statement "uVar3 = 0x1505;" (assignment_expression "uVar3 = 0x1505" identifier = number_literal) ;) (expression_statement "bVar1 = *pbVar4;" (assignment_expression "bVar1 = *pbVar4" identifier = (pointer_expression "*pbVar4" * identifier)) ;) (while_statement "while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" while (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" { (expression_statement "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;" (assignment_expression "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21" identifier = (binary_expression "(ulong)*pbVar4 + uVar3 * 0x21" (binary_expression "(ulong)*pbVar4" (parenthesized_expression "(ulong)" ( identifier )) * identifier) + (binary_expression "uVar3 * 0x21" identifier * number_literal))) ;) (expression_statement "bVar1 = pbVar4[1];" (assignment_expression "bVar1 = pbVar4[1]" identifier = (subscript_expression "pbVar4[1]" identifier [ number_literal ])) ;) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);" (assignment_expression "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" identifier = (cast_expression "(long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" identifier (argument_list "(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" ( identifier , (binary_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8)" (parenthesized_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3)" ( (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3" (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2)" (cast_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(*param_2 & 3 ^ param_2[4] << 0x10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(*param_2 & 3 ^ param_2[4] << 0x10)" ( (binary_expression "*param_2 & 3 ^ param_2[4] << 0x10" (binary_expression "*param_2 & 3" (pointer_expression "*param_2" * identifier) & number_literal) ^ (binary_expression "param_2[4] << 0x10" (subscript_expression "param_2[4]" identifier [ number_literal ]) << number_literal)) )))) ^ (call_expression "(ulong)((param_2[1] & 0x3fff) << 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((param_2[1] & 0x3fff) << 2)" ( (binary_expression "(param_2[1] & 0x3fff) << 2" (parenthesized_expression "(param_2[1] & 0x3fff)" ( (binary_expression "param_2[1] & 0x3fff" (subscript_expression "param_2[1]" identifier [ number_literal ]) & number_literal) )) << number_literal) )))) ^ identifier) )) % (pointer_expression "*(ulong *)(param_1 + 8)" * (cast_expression "(ulong *)(param_1 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) , identifier ))))) ;) (if_statement "if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }" if (parenthesized_expression "((plVar2 != (long *)0x0) && (*plVar2 != 0))" ( (binary_expression "(plVar2 != (long *)0x0) && (*plVar2 != 0)" (parenthesized_expression "(plVar2 != (long *)0x0)" ( (binary_expression "plVar2 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*plVar2 != 0)" ( (binary_expression "*plVar2 != 0" (pointer_expression "*plVar2" * identifier) != number_literal) ))) )) (compound_statement "{\n    return *plVar2;\n  }" { (return_statement "return *plVar2;" return (pointer_expression "*plVar2" * identifier) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: iterator\n   find(_Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n   * this, key_type * __k) */\n\niterator __thiscall\nstd::\n_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n::find(_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n       *this,key_type *__k)\n\n{\n  byte bVar1;\n  __node_base *p_Var2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (__k->r_sym_ == 0xffffffff) {\n    pbVar4 = (byte *)((__k->u_).symbol)->name_;\n  }\n  else {\n    pbVar4 = (byte *)((__k->u_).symbol)->version_;\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  uVar3 = (long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)\n          ^ uVar3;\n  p_Var2 = _M_find_before_node(this,uVar3 % *(ulong *)(this + 8),__k,uVar3);\n  if ((p_Var2 != (__node_base *)0x0) && ((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0)) {\n    return (iterator)\n           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt;\n  }\n  return (iterator)(__node_type *)0x0;\n}\n\n" comment (declaration "iterator __thiscall\nstd::\n_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n::find(_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n       *this,key_type *__k)\n\n{\n  byte bVar1;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\n_Hashtable<(anonymous_namespace)::" identifier : : identifier < ( identifier ) : :) identifier (ERROR "<64" < number_literal) , identifier (ERROR ">::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>" > : : identifier , (ERROR "_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>" identifier : : identifier < (function_declarator "const_(anonymous_namespace)::Reloc_stub<64,_true>::Key" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier) >) * >) , (ERROR "_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>" identifier : : identifier < identifier : : identifier < (function_declarator "const_(anonymous_namespace)::Reloc_stub<64,_true>::Key" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier) >) (pointer_declarator "*>_" * (ERROR ">" >) identifier) (ERROR ">" >) , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash,_std::__detail::" (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier (ERROR "::" : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier (ERROR "::" : :) identifier) , identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier (ERROR "<true" < true) , identifier , (ERROR "_true>_>\n::find(_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key,_std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>" identifier > identifier > : : (function_declarator "find(_Hashtable<(anonymous_namespace)::Reloc_stub<64,_true>::Key" identifier (parameter_list "(_Hashtable<(anonymous_namespace)" ( (parameter_declaration "_Hashtable<(anonymous_namespace" type_identifier (ERROR "<(" < () identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier) , identifier : : identifier < (function_declarator "const_(anonymous_namespace)::Reloc_stub<64,_true>::Key" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier) >) (pointer_declarator "*>,_std::allocator<std::pair<const_(anonymous_namespace)::Reloc_stub" * (ERROR ">,_std::allocator<std::pair<" > , identifier : : identifier < identifier : : identifier <) (function_declarator "const_(anonymous_namespace)::Reloc_stub" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier)) (ERROR "<64" < number_literal) , identifier (ERROR ">::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to,_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash" > : : identifier , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true>*>_>,_std::__detail::_Select1st" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">*>" > * >) identifier (ERROR ">," > ,) identifier (ERROR "::" : :) identifier (ERROR "::" : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true>::Key::equal_to" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier (ERROR "::" : :) identifier) , (function_declarator "_(anonymous_namespace)::Reloc_stub<64,_true>::Key::hash" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<64," < number_literal ,) identifier (ERROR ">::" > : :) identifier (ERROR "::" : :) identifier)) , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier (ERROR "<true" < true) , identifier , (ERROR "_true>_>" identifier > identifier >) (pointer_declarator "*this" * identifier) , (ERROR "key_type *__k)\n\n{\n  byte" identifier (pointer_declarator "*__k" * identifier) ) { identifier) identifier ;) (declaration "__node_base *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (if_statement "if (__k->r_sym_ == 0xffffffff) {\n    pbVar4 = (byte *)((__k->u_).symbol)->name_;\n  }\n  else {\n    pbVar4 = (byte *)((__k->u_).symbol)->version_;\n  }" if (parenthesized_expression "(__k->r_sym_ == 0xffffffff)" ( (binary_expression "__k->r_sym_ == 0xffffffff" (field_expression "__k->r_sym_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n    pbVar4 = (byte *)((__k->u_).symbol)->name_;\n  }" { (expression_statement "pbVar4 = (byte *)((__k->u_).symbol)->name_;" (assignment_expression "pbVar4 = (byte *)((__k->u_).symbol)->name_" identifier = (cast_expression "(byte *)((__k->u_).symbol)->name_" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "((__k->u_).symbol)->name_" (parenthesized_expression "((__k->u_).symbol)" ( (field_expression "(__k->u_).symbol" (parenthesized_expression "(__k->u_)" ( (field_expression "__k->u_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier))) ;) }) (else_clause "else {\n    pbVar4 = (byte *)((__k->u_).symbol)->version_;\n  }" else (compound_statement "{\n    pbVar4 = (byte *)((__k->u_).symbol)->version_;\n  }" { (expression_statement "pbVar4 = (byte *)((__k->u_).symbol)->version_;" (assignment_expression "pbVar4 = (byte *)((__k->u_).symbol)->version_" identifier = (cast_expression "(byte *)((__k->u_).symbol)->version_" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "((__k->u_).symbol)->version_" (parenthesized_expression "((__k->u_).symbol)" ( (field_expression "(__k->u_).symbol" (parenthesized_expression "(__k->u_)" ( (field_expression "__k->u_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier))) ;) }))) (expression_statement "uVar3 = 0x1505;" (assignment_expression "uVar3 = 0x1505" identifier = number_literal) ;) (expression_statement "bVar1 = *pbVar4;" (assignment_expression "bVar1 = *pbVar4" identifier = (pointer_expression "*pbVar4" * identifier)) ;) (while_statement "while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" while (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" { (expression_statement "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;" (assignment_expression "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21" identifier = (binary_expression "(ulong)*pbVar4 + uVar3 * 0x21" (binary_expression "(ulong)*pbVar4" (parenthesized_expression "(ulong)" ( identifier )) * identifier) + (binary_expression "uVar3 * 0x21" identifier * number_literal))) ;) (expression_statement "bVar1 = pbVar4[1];" (assignment_expression "bVar1 = pbVar4[1]" identifier = (subscript_expression "pbVar4[1]" identifier [ number_literal ])) ;) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar3 = (long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)\n          ^ uVar3;" (assignment_expression "uVar3 = (long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)\n          ^ uVar3" identifier = (binary_expression "(long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)\n          ^ uVar3" (binary_expression "(long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (ulong)((__k->r_sym_ & 0x3fff) << 2)" (cast_expression "(long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(__k->type_ & 3U ^ __k->addend_ << 0x10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__k->type_ & 3U ^ __k->addend_ << 0x10)" ( (binary_expression "__k->type_ & 3U ^ __k->addend_ << 0x10" (binary_expression "__k->type_ & 3U" (field_expression "__k->type_" identifier -> field_identifier) & number_literal) ^ (binary_expression "__k->addend_ << 0x10" (field_expression "__k->addend_" identifier -> field_identifier) << number_literal)) )))) ^ (call_expression "(ulong)((__k->r_sym_ & 0x3fff) << 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((__k->r_sym_ & 0x3fff) << 2)" ( (binary_expression "(__k->r_sym_ & 0x3fff) << 2" (parenthesized_expression "(__k->r_sym_ & 0x3fff)" ( (binary_expression "__k->r_sym_ & 0x3fff" (field_expression "__k->r_sym_" identifier -> field_identifier) & number_literal) )) << number_literal) )))) ^ identifier)) ;) (expression_statement "p_Var2 = _M_find_before_node(this,uVar3 % *(ulong *)(this + 8),__k,uVar3);" (assignment_expression "p_Var2 = _M_find_before_node(this,uVar3 % *(ulong *)(this + 8),__k,uVar3)" identifier = (call_expression "_M_find_before_node(this,uVar3 % *(ulong *)(this + 8),__k,uVar3)" identifier (argument_list "(this,uVar3 % *(ulong *)(this + 8),__k,uVar3)" ( identifier , (binary_expression "uVar3 % *(ulong *)(this + 8)" identifier % (pointer_expression "*(ulong *)(this + 8)" * (cast_expression "(ulong *)(this + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) , identifier , identifier )))) ;) (if_statement "if ((p_Var2 != (__node_base *)0x0) && ((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0)) {\n    return (iterator)\n           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt;\n  }" if (parenthesized_expression "((p_Var2 != (__node_base *)0x0) && ((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0))" ( (binary_expression "(p_Var2 != (__node_base *)0x0) && ((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0)" (parenthesized_expression "(p_Var2 != (__node_base *)0x0)" ( (binary_expression "p_Var2 != (__node_base *)0x0" identifier != (cast_expression "(__node_base *)0x0" ( (type_descriptor "__node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((__node_type *)p_Var2->_M_nxt != (__node_type *)0x0)" ( (binary_expression "(__node_type *)p_Var2->_M_nxt != (__node_type *)0x0" (cast_expression "(__node_type *)p_Var2->_M_nxt" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var2->_M_nxt" identifier -> field_identifier)) != (cast_expression "(__node_type *)0x0" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    return (iterator)\n           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt;\n  }" { (return_statement "return (iterator)\n           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt;" return (call_expression "(iterator)\n           (_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt" (parenthesized_expression "(iterator)" ( identifier )) (argument_list "(_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64,_true>::Key,_(anonymous_namespace)::Reloc_stub<64,_true>*>,_true>\n            )p_Var2->_M_nxt" ( (binary_expression "_Node_iterator_base<std::pair<const_(anonymous_namespace)::Reloc_stub<64" (binary_expression "_Node_iterator_base<std::pair<const_(anonymous_namespace)" (binary_expression "_Node_iterator_base<std" identifier < identifier) (ERROR "::pair" : : identifier) < (call_expression "const_(anonymous_namespace)" identifier (argument_list "(anonymous_namespace)" ( identifier )))) (ERROR "::Reloc_stub" : : identifier) < number_literal) , (binary_expression "_true>::Key" identifier > (ERROR "::" : :) identifier) , (binary_expression "_(anonymous_namespace)::Reloc_stub<64" (call_expression "_(anonymous_namespace)" identifier (argument_list "(anonymous_namespace)" ( identifier ))) (ERROR "::Reloc_stub" : : identifier) < number_literal) , (binary_expression "_true>*>,_true>\n            )p_Var2->_M_nxt" (binary_expression "_true>*>,_true" identifier > (pointer_expression "*>,_true" * (ERROR ">," > ,) identifier)) > (ERROR ")" )) (field_expression "p_Var2->_M_nxt" identifier -> field_identifier)) ))) ;) })) (return_statement "return (iterator)(__node_type *)0x0;" return (cast_expression "(iterator)(__node_type *)0x0" ( (type_descriptor "iterator" type_identifier) ) (cast_expression "(__node_type *)0x0" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (ERROR "}" }))
(translation_unit "long FUN_002f1770(long param_1,uint *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}\n\n" (function_definition "long FUN_002f1770(long param_1,uint *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_002f1770(long param_1,uint *param_2)" identifier (parameter_list "(long param_1,uint *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (if_statement "if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" if (parenthesized_expression "(param_2[1] == 0xffffffff)" ( (binary_expression "param_2[1] == 0xffffffff" (subscript_expression "param_2[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }" { (expression_statement "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);" (assignment_expression "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2)" identifier = (cast_expression "(byte *)**(undefined8 **)(param_2 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined8 **)(param_2 + 2)" * (pointer_expression "*(undefined8 **)(param_2 + 2)" * (cast_expression "(undefined8 **)(param_2 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) ))))))) ;) }) (else_clause "else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" else (compound_statement "{\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" { (expression_statement "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];" (assignment_expression "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1]" identifier = (cast_expression "(byte *)(*(undefined8 **)(param_2 + 2))[1]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "(*(undefined8 **)(param_2 + 2))[1]" (parenthesized_expression "(*(undefined8 **)(param_2 + 2))" ( (pointer_expression "*(undefined8 **)(param_2 + 2)" * (cast_expression "(undefined8 **)(param_2 + 2)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) )))) )) [ number_literal ]))) ;) }))) (expression_statement "uVar3 = 0x1505;" (assignment_expression "uVar3 = 0x1505" identifier = number_literal) ;) (expression_statement "bVar1 = *pbVar4;" (assignment_expression "bVar1 = *pbVar4" identifier = (pointer_expression "*pbVar4" * identifier)) ;) (while_statement "while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" while (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" { (expression_statement "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;" (assignment_expression "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21" identifier = (binary_expression "(ulong)*pbVar4 + uVar3 * 0x21" (binary_expression "(ulong)*pbVar4" (parenthesized_expression "(ulong)" ( identifier )) * identifier) + (binary_expression "uVar3 * 0x21" identifier * number_literal))) ;) (expression_statement "bVar1 = pbVar4[1];" (assignment_expression "bVar1 = pbVar4[1]" identifier = (subscript_expression "pbVar4[1]" identifier [ number_literal ])) ;) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) })) (expression_statement "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);" (assignment_expression "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" identifier = (cast_expression "(long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" identifier (argument_list "(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" ( identifier , (binary_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8)" (parenthesized_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3)" ( (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3" (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2)" (cast_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(*param_2 & 3 ^ param_2[4] << 0x10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(*param_2 & 3 ^ param_2[4] << 0x10)" ( (binary_expression "*param_2 & 3 ^ param_2[4] << 0x10" (binary_expression "*param_2 & 3" (pointer_expression "*param_2" * identifier) & number_literal) ^ (binary_expression "param_2[4] << 0x10" (subscript_expression "param_2[4]" identifier [ number_literal ]) << number_literal)) )))) ^ (call_expression "(ulong)((param_2[1] & 0x3fff) << 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((param_2[1] & 0x3fff) << 2)" ( (binary_expression "(param_2[1] & 0x3fff) << 2" (parenthesized_expression "(param_2[1] & 0x3fff)" ( (binary_expression "param_2[1] & 0x3fff" (subscript_expression "param_2[1]" identifier [ number_literal ]) & number_literal) )) << number_literal) )))) ^ identifier) )) % (pointer_expression "*(ulong *)(param_1 + 8)" * (cast_expression "(ulong *)(param_1 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) , identifier ))))) ;) (if_statement "if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }" if (parenthesized_expression "((plVar2 != (long *)0x0) && (*plVar2 != 0))" ( (binary_expression "(plVar2 != (long *)0x0) && (*plVar2 != 0)" (parenthesized_expression "(plVar2 != (long *)0x0)" ( (binary_expression "plVar2 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*plVar2 != 0)" ( (binary_expression "*plVar2 != 0" (pointer_expression "*plVar2" * identifier) != number_literal) ))) )) (compound_statement "{\n    return *plVar2;\n  }" { (return_statement "return *plVar2;" return (pointer_expression "*plVar2" * identifier) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) [ LIT ]))) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) & LIT) ^ (binary_expression (subscript_expression IDENT [ LIT ]) << LIT)) )))) ^ (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) << LIT) )))) ^ IDENT) )) % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (return_statement return (pointer_expression * IDENT) ;) })) (return_statement return LIT ;) })))
(function_definition "long FUN_002f1770(long param_1,uint *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_002f1770(long param_1,uint *param_2)" (identifier "FUN_002f1770") (parameter_list "(long param_1,uint *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  ulong uVar3;\n  byte *pbVar4;\n  \n  if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }\n  uVar3 = 0x1505;\n  bVar1 = *pbVar4;\n  while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }\n  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);\n  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }\n  return 0;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "byte *pbVar4;" (type_identifier "byte") (pointer_declarator "*pbVar4" (* "*") (identifier "pbVar4")) (; ";")) (if_statement "if (param_2[1] == 0xffffffff) {\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }\n  else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" (if "if") (parenthesized_expression "(param_2[1] == 0xffffffff)" (( "(") (binary_expression "param_2[1] == 0xffffffff" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);\n  }" ({ "{") (expression_statement "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);" (assignment_expression "pbVar4 = (byte *)**(undefined8 **)(param_2 + 2)" (identifier "pbVar4") (= "=") (cast_expression "(byte *)**(undefined8 **)(param_2 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "**(undefined8 **)(param_2 + 2)" (* "*") (pointer_expression "*(undefined8 **)(param_2 + 2)" (* "*") (cast_expression "(undefined8 **)(param_2 + 2)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 2)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) () ")"))))))) (; ";")) (} "}")) (else_clause "else {\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" (else "else") (compound_statement "{\n    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];\n  }" ({ "{") (expression_statement "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];" (assignment_expression "pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1]" (identifier "pbVar4") (= "=") (cast_expression "(byte *)(*(undefined8 **)(param_2 + 2))[1]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "(*(undefined8 **)(param_2 + 2))[1]" (parenthesized_expression "(*(undefined8 **)(param_2 + 2))" (( "(") (pointer_expression "*(undefined8 **)(param_2 + 2)" (* "*") (cast_expression "(undefined8 **)(param_2 + 2)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 2)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) () ")")))) () ")")) ([ "[") (number_literal "1") (] "]")))) (; ";")) (} "}")))) (expression_statement "uVar3 = 0x1505;" (assignment_expression "uVar3 = 0x1505" (identifier "uVar3") (= "=") (number_literal "0x1505")) (; ";")) (expression_statement "bVar1 = *pbVar4;" (assignment_expression "bVar1 = *pbVar4" (identifier "bVar1") (= "=") (pointer_expression "*pbVar4" (* "*") (identifier "pbVar4"))) (; ";")) (while_statement "while (bVar1 != 0) {\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" (while "while") (parenthesized_expression "(bVar1 != 0)" (( "(") (binary_expression "bVar1 != 0" (identifier "bVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;\n    bVar1 = pbVar4[1];\n    pbVar4 = pbVar4 + 1;\n  }" ({ "{") (expression_statement "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;" (assignment_expression "uVar3 = (ulong)*pbVar4 + uVar3 * 0x21" (identifier "uVar3") (= "=") (binary_expression "(ulong)*pbVar4 + uVar3 * 0x21" (binary_expression "(ulong)*pbVar4" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "pbVar4")) (+ "+") (binary_expression "uVar3 * 0x21" (identifier "uVar3") (* "*") (number_literal "0x21")))) (; ";")) (expression_statement "bVar1 = pbVar4[1];" (assignment_expression "bVar1 = pbVar4[1]" (identifier "bVar1") (= "=") (subscript_expression "pbVar4[1]" (identifier "pbVar4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "pbVar4 = pbVar4 + 1;" (assignment_expression "pbVar4 = pbVar4 + 1" (identifier "pbVar4") (= "=") (binary_expression "pbVar4 + 1" (identifier "pbVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2);" (assignment_expression "plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" (identifier "plVar2") (= "=") (cast_expression "(long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" (identifier "FUN_002eaef0") (argument_list "(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8),param_2)" (( "(") (identifier "param_1") (, ",") (binary_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %\n                                        *(ulong *)(param_1 + 8)" (parenthesized_expression "((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3)" (( "(") (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3" (binary_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^\n                                         (ulong)((param_2[1] & 0x3fff) << 2)" (cast_expression "(long)(int)(*param_2 & 3 ^ param_2[4] << 0x10)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(*param_2 & 3 ^ param_2[4] << 0x10)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(*param_2 & 3 ^ param_2[4] << 0x10)" (( "(") (binary_expression "*param_2 & 3 ^ param_2[4] << 0x10" (binary_expression "*param_2 & 3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (& "&") (number_literal "3")) (^ "^") (binary_expression "param_2[4] << 0x10" (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]")) (<< "<<") (number_literal "0x10"))) () ")")))) (^ "^") (call_expression "(ulong)((param_2[1] & 0x3fff) << 2)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((param_2[1] & 0x3fff) << 2)" (( "(") (binary_expression "(param_2[1] & 0x3fff) << 2" (parenthesized_expression "(param_2[1] & 0x3fff)" (( "(") (binary_expression "param_2[1] & 0x3fff" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (& "&") (number_literal "0x3fff")) () ")")) (<< "<<") (number_literal "2")) () ")")))) (^ "^") (identifier "uVar3")) () ")")) (% "%") (pointer_expression "*(ulong *)(param_1 + 8)" (* "*") (cast_expression "(ulong *)(param_1 + 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (, ",") (identifier "param_2") () ")"))))) (; ";")) (if_statement "if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {\n    return *plVar2;\n  }" (if "if") (parenthesized_expression "((plVar2 != (long *)0x0) && (*plVar2 != 0))" (( "(") (binary_expression "(plVar2 != (long *)0x0) && (*plVar2 != 0)" (parenthesized_expression "(plVar2 != (long *)0x0)" (( "(") (binary_expression "plVar2 != (long *)0x0" (identifier "plVar2") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*plVar2 != 0)" (( "(") (binary_expression "*plVar2 != 0" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return *plVar2;\n  }" ({ "{") (return_statement "return *plVar2;" (return "return") (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: iterator
   find(_Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>
   * this, key_type * __k) */

type_1 __thiscall
var_8::
_Hashtable<(type_2)::function_2<64,var_9>::var_10,_std::pair<function_1(type_2)::function_2<64,var_9>::var_10,var_11(type_2)::function_2<64,var_9>*>,_std::allocator<var_8::pair<function_1(type_2)::function_2<64,var_9>::var_10,var_11(type_2)::function_2<64,var_9>*>var_11>,_std::__detail::_Select1st,var_11(type_2)::function_2<64,var_9>::var_10::equal_to,var_11(type_2)::function_2<64,var_9>::var_10::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,var_9>var_11>
::find(_Hashtable<(type_2)::function_2<64,var_9>::var_10,_std::pair<function_1(type_2)::function_2<64,var_9>::var_10,var_11(type_2)::function_2<64,var_9>*>,_std::allocator<var_8::pair<function_1(type_2)::function_2<64,var_9>::var_10,var_11(type_2)::function_2<64,var_9>*>var_11>,_std::__detail::_Select1st,var_11(type_2)::function_2<64,var_9>::var_10::equal_to,var_11(type_2)::function_2<64,var_9>::var_10::hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,var_9>var_11>
       *var_5,key_type *__k)

{
  type_5 var_1;
  type_3 *var_6;
  type_4 var_3;
  type_5 *var_2;
  
  if (__k->r_sym_ == 0xffffffff) {
    var_2 = (type_5 *)((__k->u_).symbol)->name_;
  }
  else {
    var_2 = (type_5 *)((__k->u_).symbol)->version_;
  }
  var_3 = 0x1505;
  var_1 = *var_2;
  while (var_1 != 0) {
    var_3 = (type_4)*var_2 + var_3 * 0x21;
    var_1 = var_2[1];
    var_2 = var_2 + 1;
  }
  var_3 = (long)(int)(__k->type_ & 3U ^ __k->addend_ << 0x10) ^ (type_4)((__k->r_sym_ & 0x3fff) << 2)
          ^ var_3;
  var_6 = var_4(var_5,var_3 % *(type_4 *)(var_5 + 8),__k,var_3);
  if ((var_6 != (type_3 *)0x0) && ((type_6 *)var_6->_M_nxt != (type_6 *)0x0)) {
    return (type_1)
           (var_7<var_8::pair<function_1(type_2)::function_2<64,var_9>::var_10,var_11(type_2)::function_2<64,var_9>*>,var_9>
            )var_6->_M_nxt;
  }
  return (type_1)(type_6 *)0x0;
}


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

long MASKED(long param_1,uint *param_2)

{
  byte bVar1;
  long *plVar2;
  ulong uVar3;
  byte *pbVar4;
  
  if (param_2[1] == 0xffffffff) {
    pbVar4 = (byte *)**(undefined8 **)(param_2 + 2);
  }
  else {
    pbVar4 = (byte *)(*(undefined8 **)(param_2 + 2))[1];
  }
  uVar3 = 0x1505;
  bVar1 = *pbVar4;
  while (bVar1 != 0) {
    uVar3 = (ulong)*pbVar4 + uVar3 * 0x21;
    bVar1 = pbVar4[1];
    pbVar4 = pbVar4 + 1;
  }
  plVar2 = (long *)FUN_002eaef0(param_1,((long)(int)(*param_2 & 3 ^ param_2[4] << 0x10) ^
                                         (ulong)((param_2[1] & 0x3fff) << 2) ^ uVar3) %
                                        *(ulong *)(param_1 + 8),param_2);
  if ((plVar2 != (long *)0x0) && (*plVar2 != 0)) {
    return *plVar2;
  }
  return 0;
}

