
/* DWARF original prototype: off_t find_pubtype_offset(Gdb_index * this, off_t cu_offset) */

off_t __thiscall gold::Gdb_index::find_pubtype_offset(Gdb_index *this,off_t cu_offset)

{
  ulong uVar1;
  _Hash_node_base *p_Var2;
  ulong uVar3;
  __hash_code __code;
  _Hash_node_base *p_Var4;
  __bucket_type p_Var5;
  __bucket_type p_Var6;
  
  uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;
  uVar3 = (ulong)cu_offset % uVar1;
  p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3];
  if (p_Var6 != (__bucket_type)0x0) {
    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;
    p_Var2 = p_Var6->_M_nxt;
    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {
      p_Var2 = p_Var5->_M_nxt;
      if (p_Var2 == (_Hash_node_base *)0x0) {
        return -1;
      }
      p_Var4 = p_Var2[1]._M_nxt;
      p_Var6 = p_Var5;
      if (uVar3 != (ulong)p_Var4 % uVar1) {
        return -1;
      }
    }
    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {
      return (off_t)p_Var6->_M_nxt[2]._M_nxt;
    }
  }
  return -1;
}



undefined8 FUN_002b6fd0(long param_1,ulong param_2)

{
  long *plVar1;
  ulong uVar2;
  ulong uVar3;
  long *plVar4;
  long *plVar5;
  
  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);
  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);
  if (plVar5 != (long *)0x0) {
    uVar3 = ((long *)*plVar5)[1];
    plVar1 = (long *)*plVar5;
    while (plVar4 = plVar1, uVar3 != param_2) {
      plVar1 = (long *)*plVar4;
      if (plVar1 == (long *)0x0) {
        return 0xffffffffffffffff;
      }
      uVar3 = plVar1[1];
      plVar5 = plVar4;
      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {
        return 0xffffffffffffffff;
      }
    }
    if (*plVar5 != 0) {
      return *(undefined8 *)(*plVar5 + 0x10);
    }
  }
  return 0xffffffffffffffff;
}


MOV RCX,qword ptr [RDI + 0x78]
MOV RAX,RSI
XOR EDX,EDX
DIV RCX
MOV RAX,qword ptr [RDI + 0x70]
MOV R9,qword ptr [RAX + RDX*0x8]
MOV R10,RDX
MOV RAX,-0x1
TEST R9,R9
JZ 0x002b703f
MOV R8,qword ptr [R9]
MOV RDI,qword ptr [R8 + 0x8]
JMP 0x002b701f
MOV RAX,qword ptr [R8]
TEST RAX,RAX
JZ 0x002b7038
MOV RDI,qword ptr [RAX + 0x8]
MOV R9,R8
XOR EDX,EDX
MOV R8,RAX
MOV RAX,RDI
DIV RCX
CMP R10,RDX
JNZ 0x002b7038
CMP RDI,RSI
JNZ 0x002b7000
MOV RAX,qword ptr [R9]
TEST RAX,RAX
JZ 0x002b7038
MOV RAX,qword ptr [RAX + 0x10]
RET
MOV RAX,-0x1
RET
(translation_unit "undefined8 FUN_002b6fd0(long param_1,ulong param_2)\n\n{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}\n\n" (function_definition "undefined8 FUN_002b6fd0(long param_1,ulong param_2)\n\n{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" type_identifier (function_declarator "FUN_002b6fd0(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 identifier) ))) (compound_statement "{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (expression_statement "uVar2 = param_2 % *(ulong *)(param_1 + 0x78);" (assignment_expression "uVar2 = param_2 % *(ulong *)(param_1 + 0x78)" identifier = (binary_expression "param_2 % *(ulong *)(param_1 + 0x78)" identifier % (pointer_expression "*(ulong *)(param_1 + 0x78)" * (cast_expression "(ulong *)(param_1 + 0x78)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))))) ;) (expression_statement "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);" (assignment_expression "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" identifier = (pointer_expression "*(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" * (cast_expression "(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x70) + uVar2 * 8)" ( (binary_expression "*(long *)(param_1 + 0x70) + uVar2 * 8" (pointer_expression "*(long *)(param_1 + 0x70)" * (cast_expression "(long *)(param_1 + 0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) + (binary_expression "uVar2 * 8" identifier * number_literal)) ))))) ;) (if_statement "if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" if (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" { (expression_statement "uVar3 = ((long *)*plVar5)[1];" (assignment_expression "uVar3 = ((long *)*plVar5)[1]" identifier = (subscript_expression "((long *)*plVar5)[1]" (parenthesized_expression "((long *)*plVar5)" ( (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier)) )) [ number_literal ])) ;) (expression_statement "plVar1 = (long *)*plVar5;" (assignment_expression "plVar1 = (long *)*plVar5" identifier = (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier))) ;) (while_statement "while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" while (parenthesized_expression "(plVar4 = plVar1, uVar3 != param_2)" ( (comma_expression "plVar4 = plVar1, uVar3 != param_2" (assignment_expression "plVar4 = plVar1" identifier = identifier) , (binary_expression "uVar3 != param_2" identifier != identifier)) )) (compound_statement "{\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" { (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" { (return_statement "return 0xffffffffffffffff;" return number_literal ;) })) (expression_statement "uVar3 = plVar1[1];" (assignment_expression "uVar3 = plVar1[1]" identifier = (subscript_expression "plVar1[1]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = plVar4;" (assignment_expression "plVar5 = plVar4" identifier = identifier) ;) (if_statement "if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }" if (parenthesized_expression "(uVar2 != uVar3 % *(ulong *)(param_1 + 0x78))" ( (binary_expression "uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)" identifier != (binary_expression "uVar3 % *(ulong *)(param_1 + 0x78)" identifier % (pointer_expression "*(ulong *)(param_1 + 0x78)" * (cast_expression "(ulong *)(param_1 + 0x78)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))))) )) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" { (return_statement "return 0xffffffffffffffff;" return number_literal ;) })) })) (if_statement "if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" if (parenthesized_expression "(*plVar5 != 0)" ( (binary_expression "*plVar5 != 0" (pointer_expression "*plVar5" * identifier) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" { (return_statement "return *(undefined8 *)(*plVar5 + 0x10);" return (pointer_expression "*(undefined8 *)(*plVar5 + 0x10)" * (cast_expression "(undefined8 *)(*plVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar5 + 0x10)" ( (binary_expression "*plVar5 + 0x10" (pointer_expression "*plVar5" * identifier) + number_literal) )))) ;) })) })) (return_statement "return 0xffffffffffffffff;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: off_t find_pubtype_offset(Gdb_index * this, off_t cu_offset) */\n\noff_t __thiscall gold::Gdb_index::find_pubtype_offset(Gdb_index *this,off_t cu_offset)\n\n{\n  ulong uVar1;\n  _Hash_node_base *p_Var2;\n  ulong uVar3;\n  __hash_code __code;\n  _Hash_node_base *p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  \n  uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;\n  uVar3 = (ulong)cu_offset % uVar1;\n  p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3];\n  if (p_Var6 != (__bucket_type)0x0) {\n    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;\n    p_Var2 = p_Var6->_M_nxt;\n    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }\n    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }\n  }\n  return -1;\n}\n\n" comment (function_definition "off_t __thiscall gold::Gdb_index::find_pubtype_offset(Gdb_index *this,off_t cu_offset)\n\n{\n  ulong uVar1;\n  _Hash_node_base *p_Var2;\n  ulong uVar3;\n  __hash_code __code;\n  _Hash_node_base *p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  \n  uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;\n  uVar3 = (ulong)cu_offset % uVar1;\n  p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3];\n  if (p_Var6 != (__bucket_type)0x0) {\n    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;\n    p_Var2 = p_Var6->_M_nxt;\n    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }\n    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }\n  }\n  return -1;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Gdb_index::" identifier : : identifier : :) (function_declarator "find_pubtype_offset(Gdb_index *this,off_t cu_offset)" identifier (parameter_list "(Gdb_index *this,off_t cu_offset)" ( (parameter_declaration "Gdb_index *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "off_t cu_offset" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  _Hash_node_base *p_Var2;\n  ulong uVar3;\n  __hash_code __code;\n  _Hash_node_base *p_Var4;\n  __bucket_type p_Var5;\n  __bucket_type p_Var6;\n  \n  uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;\n  uVar3 = (ulong)cu_offset % uVar1;\n  p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3];\n  if (p_Var6 != (__bucket_type)0x0) {\n    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;\n    p_Var2 = p_Var6->_M_nxt;\n    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }\n    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }\n  }\n  return -1;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "__hash_code __code;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "__bucket_type p_Var5;" type_identifier identifier ;) (declaration "__bucket_type p_Var6;" type_identifier identifier ;) (expression_statement "uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;" (assignment_expression "uVar1 = (this->cu_pubtype_map_)._M_h._M_bucket_count" identifier = (field_expression "(this->cu_pubtype_map_)._M_h._M_bucket_count" (field_expression "(this->cu_pubtype_map_)._M_h" (parenthesized_expression "(this->cu_pubtype_map_)" ( (field_expression "this->cu_pubtype_map_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "uVar3 = (ulong)cu_offset % uVar1;" (assignment_expression "uVar3 = (ulong)cu_offset % uVar1" identifier = (binary_expression "(ulong)cu_offset % uVar1" (cast_expression "(ulong)cu_offset" ( (type_descriptor "ulong" type_identifier) ) identifier) % identifier)) ;) (expression_statement "p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3];" (assignment_expression "p_Var6 = (this->cu_pubtype_map_)._M_h._M_buckets[uVar3]" identifier = (subscript_expression "(this->cu_pubtype_map_)._M_h._M_buckets[uVar3]" (field_expression "(this->cu_pubtype_map_)._M_h._M_buckets" (field_expression "(this->cu_pubtype_map_)._M_h" (parenthesized_expression "(this->cu_pubtype_map_)" ( (field_expression "this->cu_pubtype_map_" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ identifier ])) ;) (if_statement "if (p_Var6 != (__bucket_type)0x0) {\n    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;\n    p_Var2 = p_Var6->_M_nxt;\n    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }\n    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }\n  }" if (parenthesized_expression "(p_Var6 != (__bucket_type)0x0)" ( (binary_expression "p_Var6 != (__bucket_type)0x0" identifier != (cast_expression "(__bucket_type)0x0" ( (type_descriptor "__bucket_type" type_identifier) ) number_literal)) )) (compound_statement "{\n    p_Var4 = p_Var6->_M_nxt[1]._M_nxt;\n    p_Var2 = p_Var6->_M_nxt;\n    while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }\n    if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }\n  }" { (expression_statement "p_Var4 = p_Var6->_M_nxt[1]._M_nxt;" (assignment_expression "p_Var4 = p_Var6->_M_nxt[1]._M_nxt" identifier = (field_expression "p_Var6->_M_nxt[1]._M_nxt" (subscript_expression "p_Var6->_M_nxt[1]" (field_expression "p_Var6->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var2 = p_Var6->_M_nxt;" (assignment_expression "p_Var2 = p_Var6->_M_nxt" identifier = (field_expression "p_Var6->_M_nxt" identifier -> field_identifier)) ;) (while_statement "while (p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset) {\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }" while (parenthesized_expression "(p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset)" ( (comma_expression "p_Var5 = p_Var2, p_Var4 != (_Hash_node_base *)cu_offset" (assignment_expression "p_Var5 = p_Var2" identifier = identifier) , (binary_expression "p_Var4 != (_Hash_node_base *)cu_offset" identifier != (cast_expression "(_Hash_node_base *)cu_offset" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n      p_Var2 = p_Var5->_M_nxt;\n      if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }\n      p_Var4 = p_Var2[1]._M_nxt;\n      p_Var6 = p_Var5;\n      if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }\n    }" { (expression_statement "p_Var2 = p_Var5->_M_nxt;" (assignment_expression "p_Var2 = p_Var5->_M_nxt" identifier = (field_expression "p_Var5->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if (p_Var2 == (_Hash_node_base *)0x0) {\n        return -1;\n      }" if (parenthesized_expression "(p_Var2 == (_Hash_node_base *)0x0)" ( (binary_expression "p_Var2 == (_Hash_node_base *)0x0" identifier == (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return -1;\n      }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "p_Var4 = p_Var2[1]._M_nxt;" (assignment_expression "p_Var4 = p_Var2[1]._M_nxt" identifier = (field_expression "p_Var2[1]._M_nxt" (subscript_expression "p_Var2[1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var6 = p_Var5;" (assignment_expression "p_Var6 = p_Var5" identifier = identifier) ;) (if_statement "if (uVar3 != (ulong)p_Var4 % uVar1) {\n        return -1;\n      }" if (parenthesized_expression "(uVar3 != (ulong)p_Var4 % uVar1)" ( (binary_expression "uVar3 != (ulong)p_Var4 % uVar1" identifier != (binary_expression "(ulong)p_Var4 % uVar1" (cast_expression "(ulong)p_Var4" ( (type_descriptor "ulong" type_identifier) ) identifier) % identifier)) )) (compound_statement "{\n        return -1;\n      }" { (return_statement "return -1;" return number_literal ;) })) })) (if_statement "if (p_Var6->_M_nxt != (_Hash_node_base *)0x0) {\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }" if (parenthesized_expression "(p_Var6->_M_nxt != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var6->_M_nxt != (_Hash_node_base *)0x0" (field_expression "p_Var6->_M_nxt" identifier -> field_identifier) != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (off_t)p_Var6->_M_nxt[2]._M_nxt;\n    }" { (return_statement "return (off_t)p_Var6->_M_nxt[2]._M_nxt;" return (cast_expression "(off_t)p_Var6->_M_nxt[2]._M_nxt" ( (type_descriptor "off_t" type_identifier) ) (field_expression "p_Var6->_M_nxt[2]._M_nxt" (subscript_expression "p_Var6->_M_nxt[2]" (field_expression "p_Var6->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) })) })) (return_statement "return -1;" return number_literal ;) })))
(translation_unit "undefined8 FUN_002b6fd0(long param_1,ulong param_2)\n\n{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}\n\n" (function_definition "undefined8 FUN_002b6fd0(long param_1,ulong param_2)\n\n{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" type_identifier (function_declarator "FUN_002b6fd0(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 identifier) ))) (compound_statement "{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (expression_statement "uVar2 = param_2 % *(ulong *)(param_1 + 0x78);" (assignment_expression "uVar2 = param_2 % *(ulong *)(param_1 + 0x78)" identifier = (binary_expression "param_2 % *(ulong *)(param_1 + 0x78)" identifier % (pointer_expression "*(ulong *)(param_1 + 0x78)" * (cast_expression "(ulong *)(param_1 + 0x78)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))))) ;) (expression_statement "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);" (assignment_expression "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" identifier = (pointer_expression "*(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" * (cast_expression "(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x70) + uVar2 * 8)" ( (binary_expression "*(long *)(param_1 + 0x70) + uVar2 * 8" (pointer_expression "*(long *)(param_1 + 0x70)" * (cast_expression "(long *)(param_1 + 0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) + (binary_expression "uVar2 * 8" identifier * number_literal)) ))))) ;) (if_statement "if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" if (parenthesized_expression "(plVar5 != (long *)0x0)" ( (binary_expression "plVar5 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" { (expression_statement "uVar3 = ((long *)*plVar5)[1];" (assignment_expression "uVar3 = ((long *)*plVar5)[1]" identifier = (subscript_expression "((long *)*plVar5)[1]" (parenthesized_expression "((long *)*plVar5)" ( (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier)) )) [ number_literal ])) ;) (expression_statement "plVar1 = (long *)*plVar5;" (assignment_expression "plVar1 = (long *)*plVar5" identifier = (cast_expression "(long *)*plVar5" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar5" * identifier))) ;) (while_statement "while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" while (parenthesized_expression "(plVar4 = plVar1, uVar3 != param_2)" ( (comma_expression "plVar4 = plVar1, uVar3 != param_2" (assignment_expression "plVar4 = plVar1" identifier = identifier) , (binary_expression "uVar3 != param_2" identifier != identifier)) )) (compound_statement "{\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" { (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (if_statement "if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" { (return_statement "return 0xffffffffffffffff;" return number_literal ;) })) (expression_statement "uVar3 = plVar1[1];" (assignment_expression "uVar3 = plVar1[1]" identifier = (subscript_expression "plVar1[1]" identifier [ number_literal ])) ;) (expression_statement "plVar5 = plVar4;" (assignment_expression "plVar5 = plVar4" identifier = identifier) ;) (if_statement "if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }" if (parenthesized_expression "(uVar2 != uVar3 % *(ulong *)(param_1 + 0x78))" ( (binary_expression "uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)" identifier != (binary_expression "uVar3 % *(ulong *)(param_1 + 0x78)" identifier % (pointer_expression "*(ulong *)(param_1 + 0x78)" * (cast_expression "(ulong *)(param_1 + 0x78)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))))) )) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" { (return_statement "return 0xffffffffffffffff;" return number_literal ;) })) })) (if_statement "if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" if (parenthesized_expression "(*plVar5 != 0)" ( (binary_expression "*plVar5 != 0" (pointer_expression "*plVar5" * identifier) != number_literal) )) (compound_statement "{\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" { (return_statement "return *(undefined8 *)(*plVar5 + 0x10);" return (pointer_expression "*(undefined8 *)(*plVar5 + 0x10)" * (cast_expression "(undefined8 *)(*plVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar5 + 0x10)" ( (binary_expression "*plVar5 + 0x10" (pointer_expression "*plVar5" * identifier) + number_literal) )))) ;) })) })) (return_statement "return 0xffffffffffffffff;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (return_statement return LIT ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) ;) })) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_002b6fd0(long param_1,ulong param_2)\n\n{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" (type_identifier "undefined8") (function_declarator "FUN_002b6fd0(long param_1,ulong param_2)" (identifier "FUN_002b6fd0") (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") (identifier "param_2")) () ")"))) (compound_statement "{\n  long *plVar1;\n  ulong uVar2;\n  ulong uVar3;\n  long *plVar4;\n  long *plVar5;\n  \n  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);\n  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);\n  if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }\n  return 0xffffffffffffffff;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (expression_statement "uVar2 = param_2 % *(ulong *)(param_1 + 0x78);" (assignment_expression "uVar2 = param_2 % *(ulong *)(param_1 + 0x78)" (identifier "uVar2") (= "=") (binary_expression "param_2 % *(ulong *)(param_1 + 0x78)" (identifier "param_2") (% "%") (pointer_expression "*(ulong *)(param_1 + 0x78)" (* "*") (cast_expression "(ulong *)(param_1 + 0x78)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x78)" (( "(") (binary_expression "param_1 + 0x78" (identifier "param_1") (+ "+") (number_literal "0x78")) () ")")))))) (; ";")) (expression_statement "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);" (assignment_expression "plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" (identifier "plVar5") (= "=") (pointer_expression "*(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" (* "*") (cast_expression "(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x70) + uVar2 * 8)" (( "(") (binary_expression "*(long *)(param_1 + 0x70) + uVar2 * 8" (pointer_expression "*(long *)(param_1 + 0x70)" (* "*") (cast_expression "(long *)(param_1 + 0x70)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (+ "+") (binary_expression "uVar2 * 8" (identifier "uVar2") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (if_statement "if (plVar5 != (long *)0x0) {\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" (if "if") (parenthesized_expression "(plVar5 != (long *)0x0)" (( "(") (binary_expression "plVar5 != (long *)0x0" (identifier "plVar5") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar3 = ((long *)*plVar5)[1];\n    plVar1 = (long *)*plVar5;\n    while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }\n    if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }\n  }" ({ "{") (expression_statement "uVar3 = ((long *)*plVar5)[1];" (assignment_expression "uVar3 = ((long *)*plVar5)[1]" (identifier "uVar3") (= "=") (subscript_expression "((long *)*plVar5)[1]" (parenthesized_expression "((long *)*plVar5)" (( "(") (cast_expression "(long *)*plVar5" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar5" (* "*") (identifier "plVar5"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "plVar1 = (long *)*plVar5;" (assignment_expression "plVar1 = (long *)*plVar5" (identifier "plVar1") (= "=") (cast_expression "(long *)*plVar5" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar5" (* "*") (identifier "plVar5")))) (; ";")) (while_statement "while (plVar4 = plVar1, uVar3 != param_2) {\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" (while "while") (parenthesized_expression "(plVar4 = plVar1, uVar3 != param_2)" (( "(") (comma_expression "plVar4 = plVar1, uVar3 != param_2" (assignment_expression "plVar4 = plVar1" (identifier "plVar4") (= "=") (identifier "plVar1")) (, ",") (binary_expression "uVar3 != param_2" (identifier "uVar3") (!= "!=") (identifier "param_2"))) () ")")) (compound_statement "{\n      plVar1 = (long *)*plVar4;\n      if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }\n      uVar3 = plVar1[1];\n      plVar5 = plVar4;\n      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }\n    }" ({ "{") (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" (identifier "plVar1") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (if_statement "if (plVar1 == (long *)0x0) {\n        return 0xffffffffffffffff;\n      }" (if "if") (parenthesized_expression "(plVar1 == (long *)0x0)" (( "(") (binary_expression "plVar1 == (long *)0x0" (identifier "plVar1") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" ({ "{") (return_statement "return 0xffffffffffffffff;" (return "return") (number_literal "0xffffffffffffffff") (; ";")) (} "}"))) (expression_statement "uVar3 = plVar1[1];" (assignment_expression "uVar3 = plVar1[1]" (identifier "uVar3") (= "=") (subscript_expression "plVar1[1]" (identifier "plVar1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "plVar5 = plVar4;" (assignment_expression "plVar5 = plVar4" (identifier "plVar5") (= "=") (identifier "plVar4")) (; ";")) (if_statement "if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {\n        return 0xffffffffffffffff;\n      }" (if "if") (parenthesized_expression "(uVar2 != uVar3 % *(ulong *)(param_1 + 0x78))" (( "(") (binary_expression "uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)" (identifier "uVar2") (!= "!=") (binary_expression "uVar3 % *(ulong *)(param_1 + 0x78)" (identifier "uVar3") (% "%") (pointer_expression "*(ulong *)(param_1 + 0x78)" (* "*") (cast_expression "(ulong *)(param_1 + 0x78)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x78)" (( "(") (binary_expression "param_1 + 0x78" (identifier "param_1") (+ "+") (number_literal "0x78")) () ")")))))) () ")")) (compound_statement "{\n        return 0xffffffffffffffff;\n      }" ({ "{") (return_statement "return 0xffffffffffffffff;" (return "return") (number_literal "0xffffffffffffffff") (; ";")) (} "}"))) (} "}"))) (if_statement "if (*plVar5 != 0) {\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" (if "if") (parenthesized_expression "(*plVar5 != 0)" (( "(") (binary_expression "*plVar5 != 0" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return *(undefined8 *)(*plVar5 + 0x10);\n    }" ({ "{") (return_statement "return *(undefined8 *)(*plVar5 + 0x10);" (return "return") (pointer_expression "*(undefined8 *)(*plVar5 + 0x10)" (* "*") (cast_expression "(undefined8 *)(*plVar5 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*plVar5 + 0x10)" (( "(") (binary_expression "*plVar5 + 0x10" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0xffffffffffffffff;" (return "return") (number_literal "0xffffffffffffffff") (; ";")) (} "}")))

/* DWARF original prototype: off_t find_pubtype_offset(Gdb_index * this, off_t cu_offset) */

type_1 __thiscall gold::type_2::function_1(type_2 *this,type_1 cu_offset)

{
  type_3 var_1;
  type_4 *var_4;
  type_3 var_5;
  type_5 __code;
  type_4 *var_3;
  type_6 p_Var5;
  type_6 var_2;
  
  var_1 = (this->cu_pubtype_map_)._M_h._M_bucket_count;
  var_5 = (type_3)cu_offset % var_1;
  var_2 = (this->cu_pubtype_map_)._M_h._M_buckets[var_5];
  if (var_2 != (type_6)0x0) {
    var_3 = var_2->_M_nxt[1]._M_nxt;
    var_4 = var_2->_M_nxt;
    while (p_Var5 = var_4, var_3 != (type_4 *)cu_offset) {
      var_4 = p_Var5->_M_nxt;
      if (var_4 == (type_4 *)0x0) {
        return -1;
      }
      var_3 = var_4[1]._M_nxt;
      var_2 = p_Var5;
      if (var_5 != (type_3)var_3 % var_1) {
        return -1;
      }
    }
    if (var_2->_M_nxt != (type_4 *)0x0) {
      return (type_1)var_2->_M_nxt[2]._M_nxt;
    }
  }
  return -1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) consequence: (compound_statement (return_statement (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))))))) (return_statement (number_literal)))))

undefined8 MASKED(long param_1,ulong param_2)

{
  long *plVar1;
  ulong uVar2;
  ulong uVar3;
  long *plVar4;
  long *plVar5;
  
  uVar2 = param_2 % *(ulong *)(param_1 + 0x78);
  plVar5 = *(long **)(*(long *)(param_1 + 0x70) + uVar2 * 8);
  if (plVar5 != (long *)0x0) {
    uVar3 = ((long *)*plVar5)[1];
    plVar1 = (long *)*plVar5;
    while (plVar4 = plVar1, uVar3 != param_2) {
      plVar1 = (long *)*plVar4;
      if (plVar1 == (long *)0x0) {
        return 0xffffffffffffffff;
      }
      uVar3 = plVar1[1];
      plVar5 = plVar4;
      if (uVar2 != uVar3 % *(ulong *)(param_1 + 0x78)) {
        return 0xffffffffffffffff;
      }
    }
    if (*plVar5 != 0) {
      return *(undefined8 *)(*plVar5 + 0x10);
    }
  }
  return 0xffffffffffffffff;
}

