
/* DWARF original prototype: size_type
   _M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
   * this, true_type param_1, key_type * __k) */

size_type __thiscall
std::
_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
::_M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)

{
  __node_base *__prev_n;
  ulong __code;
  ulong __n;
  
  __code = param_2->first ^ param_2->second;
  __n = __code % this->_M_bucket_count;
  __prev_n = _M_find_before_node(this,__n,param_2,__code);
  if (__prev_n != (__node_base *)0x0) {
    _M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt);
  }
  return (ulong)(__prev_n != (__node_base *)0x0);
}



bool FUN_002854b0(long param_1,ulong *param_2)

{
  undefined8 *puVar1;
  ulong uVar2;
  
  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);
  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);
  if (puVar1 != (undefined8 *)0x0) {
    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);
  }
  return puVar1 != (undefined8 *)0x0;
}


PUSH RBP
XOR EDX,EDX
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
MOV RCX,qword ptr [RSI]
XOR RCX,qword ptr [RSI + 0x8]
MOV RAX,RCX
DIV qword ptr [RDI + 0x8]
MOV RBP,RDX
MOV RDX,RSI
MOV RSI,RBP
CALL 0x0028c950
MOV RDX,RAX
XOR EAX,EAX
TEST RDX,RDX
JZ 0x002854f4
MOV RCX,qword ptr [RDX]
MOV RSI,RBP
MOV RDI,RBX
CALL 0x0028d7f0
MOV EAX,0x1
ADD RSP,0x8
POP RBX
POP RBP
RET
(translation_unit "bool FUN_002854b0(long param_1,ulong *param_2)\n\n{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}\n\n" (function_definition "bool FUN_002854b0(long param_1,ulong *param_2)\n\n{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" primitive_type (function_declarator "FUN_002854b0(long param_1,ulong *param_2)" identifier (parameter_list "(long param_1,ulong *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);" (assignment_expression "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" identifier = (binary_expression "(*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" (parenthesized_expression "(*param_2 ^ param_2[1])" ( (binary_expression "*param_2 ^ param_2[1]" (pointer_expression "*param_2" * identifier) ^ (subscript_expression "param_2[1]" identifier [ number_literal ])) )) % (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) )))))) ;) (expression_statement "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);" (assignment_expression "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" identifier = (cast_expression "(undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0028c950(param_1,uVar2,param_2)" identifier (argument_list "(param_1,uVar2,param_2)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" if (parenthesized_expression "(puVar1 != (undefined8 *)0x0)" ( (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" { (expression_statement "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);" (call_expression "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1)" identifier (argument_list "(param_1,uVar2,puVar1,*puVar1)" ( identifier , identifier , identifier , (pointer_expression "*puVar1" * identifier) ))) ;) })) (return_statement "return puVar1 != (undefined8 *)0x0;" return (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })))
(translation_unit "/* DWARF original prototype: size_type\n   _M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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, true_type param_1, key_type * __k) */\n\nsize_type __thiscall\nstd::\n_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n::_M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)\n\n{\n  __node_base *__prev_n;\n  ulong __code;\n  ulong __n;\n  \n  __code = param_2->first ^ param_2->second;\n  __n = __code % this->_M_bucket_count;\n  __prev_n = _M_find_before_node(this,__n,param_2,__code);\n  if (__prev_n != (__node_base *)0x0) {\n    _M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt);\n  }\n  return (ulong)(__prev_n != (__node_base *)0x0);\n}\n\n" comment (declaration "size_type __thiscall\nstd::\n_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>\n::_M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)\n\n{\n  __node_base *__prev_n;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\n_Hashtable<std::pair<" identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">" >) , (ERROR "_std::pair<const_std::pair<" identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">" >) , (ERROR "_gold::" identifier : :) identifier (ERROR "*>" * >) , (ERROR "_std::allocator<std::pair<const_std::pair<" identifier : : identifier < identifier : : identifier < identifier : : identifier <) identifier , identifier (ERROR ">" >) , (ERROR "_gold::Symbol*>" identifier : : identifier * >) identifier (ERROR ">" >) , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_gold::Symbol_table::" identifier : : identifier : :) identifier , (ERROR "_gold::Symbol_table::" identifier : : identifier : :) 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>_>\n::_M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)\n\n{\n  __node_base" identifier > identifier > : : (function_declarator "_M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)" identifier (parameter_list "(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)" ( (parameter_declaration "_Hashtable<std::pair<long_unsigned_int" type_identifier (ERROR "<std::pair<" < identifier : : identifier <) identifier) , (parameter_declaration "_long_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_std::pair<const_std::pair<long_unsigned_int" type_identifier (ERROR "::pair<const_std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_long_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_gold::Symbol" type_identifier (ERROR "::" : :) identifier) (ERROR "*>" * >) , (parameter_declaration "_std::allocator<std::pair<const_std::pair<long_unsigned_int" type_identifier (ERROR "::allocator<std::pair<const_std::pair<" : : identifier < identifier : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_long_unsigned_int" type_identifier) (ERROR ">" >) , (parameter_declaration "_gold::Symbol*>_" type_identifier (ERROR "::Symbol*>" : : identifier * >) identifier) (ERROR ">" >) , (parameter_declaration "_std::__detail::_Select1st" type_identifier (ERROR "::__detail::" : : identifier : :) identifier) , (parameter_declaration "_gold::Symbol_table::Symbol_table_eq" type_identifier (ERROR "::Symbol_table::" : : identifier : :) identifier) , (parameter_declaration "_gold::Symbol_table::Symbol_table_hash" type_identifier (ERROR "::Symbol_table::" : : identifier : :) identifier) , (parameter_declaration "_std::__detail::_Mod_range_hashing" type_identifier (ERROR "::__detail::" : : identifier : :) identifier) , (parameter_declaration "_std::__detail::_Default_ranged_hash" type_identifier (ERROR "::__detail::" : : identifier : :) identifier) , (parameter_declaration "_std::__detail::_Prime_rehash_policy" type_identifier (ERROR "::__detail::" : : identifier : :) identifier) , (parameter_declaration "_std::__detail::_Hashtable_traits" type_identifier (ERROR "::__detail::" : : identifier : :) identifier) (ERROR "<true" < true) , (parameter_declaration "_false" type_identifier) , (parameter_declaration "_true>_>\n           *this" type_identifier (ERROR ">_>" > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "key_type *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) { identifier) (pointer_declarator "*__prev_n" * identifier) ;) (declaration "ulong __code;" type_identifier identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (expression_statement "__code = param_2->first ^ param_2->second;" (assignment_expression "__code = param_2->first ^ param_2->second" identifier = (binary_expression "param_2->first ^ param_2->second" (field_expression "param_2->first" identifier -> field_identifier) ^ (field_expression "param_2->second" identifier -> field_identifier))) ;) (expression_statement "__n = __code % this->_M_bucket_count;" (assignment_expression "__n = __code % this->_M_bucket_count" identifier = (binary_expression "__code % this->_M_bucket_count" identifier % (field_expression "this->_M_bucket_count" identifier -> field_identifier))) ;) (expression_statement "__prev_n = _M_find_before_node(this,__n,param_2,__code);" (assignment_expression "__prev_n = _M_find_before_node(this,__n,param_2,__code)" identifier = (call_expression "_M_find_before_node(this,__n,param_2,__code)" identifier (argument_list "(this,__n,param_2,__code)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (__prev_n != (__node_base *)0x0) {\n    _M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt);\n  }" if (parenthesized_expression "(__prev_n != (__node_base *)0x0)" ( (binary_expression "__prev_n != (__node_base *)0x0" identifier != (cast_expression "(__node_base *)0x0" ( (type_descriptor "__node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    _M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt);\n  }" { (expression_statement "_M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt);" (call_expression "_M_erase(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt)" identifier (argument_list "(this,__n,__prev_n,(__node_type *)__prev_n->_M_nxt)" ( identifier , identifier , identifier , (cast_expression "(__node_type *)__prev_n->_M_nxt" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__prev_n->_M_nxt" identifier -> field_identifier)) ))) ;) })) (return_statement "return (ulong)(__prev_n != (__node_base *)0x0);" return (call_expression "(ulong)(__prev_n != (__node_base *)0x0)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(__prev_n != (__node_base *)0x0)" ( (binary_expression "__prev_n != (__node_base *)0x0" identifier != (cast_expression "(__node_base *)0x0" ( (type_descriptor "__node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) ;) (ERROR "}" }))
(translation_unit "bool FUN_002854b0(long param_1,ulong *param_2)\n\n{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}\n\n" (function_definition "bool FUN_002854b0(long param_1,ulong *param_2)\n\n{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" primitive_type (function_declarator "FUN_002854b0(long param_1,ulong *param_2)" identifier (parameter_list "(long param_1,ulong *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);" (assignment_expression "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" identifier = (binary_expression "(*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" (parenthesized_expression "(*param_2 ^ param_2[1])" ( (binary_expression "*param_2 ^ param_2[1]" (pointer_expression "*param_2" * identifier) ^ (subscript_expression "param_2[1]" identifier [ number_literal ])) )) % (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) )))))) ;) (expression_statement "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);" (assignment_expression "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" identifier = (cast_expression "(undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0028c950(param_1,uVar2,param_2)" identifier (argument_list "(param_1,uVar2,param_2)" ( identifier , identifier , identifier ))))) ;) (if_statement "if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" if (parenthesized_expression "(puVar1 != (undefined8 *)0x0)" ( (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" { (expression_statement "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);" (call_expression "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1)" identifier (argument_list "(param_1,uVar2,puVar1,*puVar1)" ( identifier , identifier , identifier , (pointer_expression "*puVar1" * identifier) ))) ;) })) (return_statement "return puVar1 != (undefined8 *)0x0;" return (binary_expression "puVar1 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) ^ (subscript_expression IDENT [ LIT ])) )) % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (pointer_expression * IDENT) ))) ;) })) (return_statement return (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) })))
(function_definition "bool FUN_002854b0(long param_1,ulong *param_2)\n\n{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" (primitive_type "bool") (function_declarator "FUN_002854b0(long param_1,ulong *param_2)" (identifier "FUN_002854b0") (parameter_list "(long param_1,ulong *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "ulong *param_2" (type_identifier "ulong") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  ulong uVar2;\n  \n  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);\n  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);\n  if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }\n  return puVar1 != (undefined8 *)0x0;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (expression_statement "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);" (assignment_expression "uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" (identifier "uVar2") (= "=") (binary_expression "(*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8)" (parenthesized_expression "(*param_2 ^ param_2[1])" (( "(") (binary_expression "*param_2 ^ param_2[1]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (^ "^") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) () ")")) (% "%") (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")) () ")")))))) (; ";")) (expression_statement "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);" (assignment_expression "puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)FUN_0028c950(param_1,uVar2,param_2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0028c950(param_1,uVar2,param_2)" (identifier "FUN_0028c950") (argument_list "(param_1,uVar2,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "uVar2") (, ",") (identifier "param_2") () ")"))))) (; ";")) (if_statement "if (puVar1 != (undefined8 *)0x0) {\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" (if "if") (parenthesized_expression "(puVar1 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar1 != (undefined8 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);\n  }" ({ "{") (expression_statement "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);" (call_expression "FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1)" (identifier "FUN_0028d7f0") (argument_list "(param_1,uVar2,puVar1,*puVar1)" (( "(") (identifier "param_1") (, ",") (identifier "uVar2") (, ",") (identifier "puVar1") (, ",") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) () ")"))) (; ";")) (} "}"))) (return_statement "return puVar1 != (undefined8 *)0x0;" (return "return") (binary_expression "puVar1 != (undefined8 *)0x0" (identifier "puVar1") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))

/* DWARF original prototype: size_type
   _M_erase(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
   * this, true_type param_1, key_type * __k) */

type_1 __thiscall
std::
_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_false,_true>_>
::var_4(_Hashtable<std::pair<long_unsigned_int,_long_unsigned_int>,_std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>,_std::allocator<std::pair<const_std::pair<long_unsigned_int,_long_unsigned_int>,_gold::Symbol*>_>,_std::__detail::_Select1st,_gold::Symbol_table::Symbol_table_eq,_gold::Symbol_table::Symbol_table_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 *param_2)

{
  type_3 *var_3;
  type_2 var_1;
  type_2 __n;
  
  var_1 = param_2->first ^ param_2->second;
  __n = var_1 % this->_M_bucket_count;
  var_3 = var_2(this,__n,param_2,var_1);
  if (var_3 != (type_3 *)0x0) {
    var_4(this,__n,var_3,(type_4 *)var_3->_M_nxt);
  }
  return (type_2)(var_3 != (type_3 *)0x0);
}


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

bool MASKED(long param_1,ulong *param_2)

{
  undefined8 *puVar1;
  ulong uVar2;
  
  uVar2 = (*param_2 ^ param_2[1]) % *(ulong *)(param_1 + 8);
  puVar1 = (undefined8 *)FUN_0028c950(param_1,uVar2,param_2);
  if (puVar1 != (undefined8 *)0x0) {
    FUN_0028d7f0(param_1,uVar2,puVar1,*puVar1);
  }
  return puVar1 != (undefined8 *)0x0;
}

