
char * hash_insert(hash_control *table,char *key,void *val)

{
  undefined1 *puVar1;
  ulong uVar2;
  _obstack_chunk *p_Var3;
  hash_entry ***plist;
  hash_entry *phVar4;
  hash_entry *phVar5;
  char *pcVar6;
  char *pcVar7;
  hash_entry **list;
  ulong hash;
  
  plist = (hash_entry ***)strlen(key);
  phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,
                       (hash_control *)&hash);
  if (phVar4 != (hash_entry *)0x0) {
    return "exists";
  }
  pcVar7 = (table->memory).chunk_limit;
  pcVar6 = (table->memory).next_free;
  if ((ulong)((long)pcVar7 - (long)pcVar6) < 0x20) {
    _obstack_newchunk(&table->memory,0x20);
    pcVar6 = (table->memory).next_free;
    pcVar7 = (table->memory).chunk_limit;
  }
  phVar4 = (hash_entry *)(table->memory).object_base;
  phVar5 = (hash_entry *)(pcVar6 + 0x20);
  (table->memory).next_free = (char *)phVar5;
  if (phVar5 == phVar4) {
    puVar1 = &(table->memory).field_0x50;
    *puVar1 = *puVar1 | 2;
  }
  uVar2 = (table->memory).alignment_mask;
  p_Var3 = (table->memory).chunk;
  pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2);
  (table->memory).next_free = pcVar6;
  if ((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)) {
    (table->memory).next_free = pcVar7;
    pcVar6 = pcVar7;
  }
  (table->memory).object_base = pcVar6;
  phVar4->data = val;
  phVar4->hash = hash;
  phVar4->string = key;
  phVar4->next = *list;
  *list = phVar4;
  return (char *)0x0;
}



char * FUN_001175a0(long param_1,char *param_2,long param_3)

{
  long *plVar1;
  size_t sVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  long *local_28;
  long local_20;
  
  sVar2 = strlen(param_2);
  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);
  if (lVar3 != 0) {
    return "exists";
  }
  uVar5 = *(ulong *)(param_1 + 0x30);
  lVar3 = *(long *)(param_1 + 0x28);
  if (uVar5 - lVar3 < 0x20) {
    _obstack_newchunk(param_1 + 0x10,0x20);
    lVar3 = *(long *)(param_1 + 0x28);
    uVar5 = *(ulong *)(param_1 + 0x30);
  }
  plVar1 = *(long **)(param_1 + 0x20);
  lVar3 = lVar3 + 0x20;
  *(long *)(param_1 + 0x28) = lVar3;
  if ((long *)lVar3 == plVar1) {
    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;
  }
  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);
  *(ulong *)(param_1 + 0x28) = uVar4;
  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {
    *(ulong *)(param_1 + 0x28) = uVar5;
    uVar4 = uVar5;
  }
  *(ulong *)(param_1 + 0x20) = uVar4;
  plVar1[3] = param_3;
  plVar1[2] = local_20;
  plVar1[1] = (long)param_2;
  *plVar1 = *local_28;
  *local_28 = (long)plVar1;
  return (char *)0x0;
}


PUSH R12
MOV R12,RDX
PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV RBX,RDI
MOV RDI,RSI
SUB RSP,0x20
CALL 0x001081e0
LEA RSI,[RBX + 0x8]
MOV RDX,RBP
MOV RDI,RBX
LEA R9,[RSP + 0x18]
LEA R8,[RSP + 0x10]
MOV RCX,RAX
CALL 0x00117350
TEST RAX,RAX
JZ 0x001175f0
ADD RSP,0x20
LEA RAX,[0x14cca1]
POP RBX
POP RBP
POP R12
RET
MOV R8,qword ptr [RBX + 0x30]
MOV RCX,qword ptr [RBX + 0x28]
MOV RDX,R8
SUB RDX,RCX
CMP RDX,0x1f
JBE 0x00117678
MOV RSI,qword ptr [RBX + 0x20]
ADD RCX,0x20
MOV qword ptr [RBX + 0x28],RCX
CMP RCX,RSI
JZ 0x001176a0
MOV RDI,qword ptr [RBX + 0x40]
MOV R10,R8
LEA RDX,[RCX + RDI*0x1]
NOT RDI
MOV RCX,qword ptr [RBX + 0x18]
AND RDX,RDI
MOV RDI,RDX
SUB R10,RCX
MOV qword ptr [RBX + 0x28],RDX
SUB RDI,RCX
CMP RDI,R10
JBE 0x00117647
MOV qword ptr [RBX + 0x28],R8
MOV RDX,R8
MOV qword ptr [RBX + 0x20],RDX
MOV RDX,qword ptr [RSP + 0x18]
MOV qword ptr [RSI + 0x18],R12
MOV qword ptr [RSI + 0x10],RDX
MOV RDX,qword ptr [RSP + 0x10]
MOV qword ptr [RSI + 0x8],RBP
MOV RCX,qword ptr [RDX]
MOV qword ptr [RSI],RCX
MOV qword ptr [RDX],RSI
ADD RSP,0x20
POP RBX
POP RBP
POP R12
RET
LEA RDI,[RBX + 0x10]
MOV ESI,0x20
MOV qword ptr [RSP + 0x8],RAX
CALL 0x00147fa0
MOV RCX,qword ptr [RBX + 0x28]
MOV R8,qword ptr [RBX + 0x30]
MOV RAX,qword ptr [RSP + 0x8]
JMP 0x00117604
OR byte ptr [RBX + 0x60],0x2
JMP 0x00117619
(translation_unit "char * FUN_001175a0(long param_1,char *param_2,long param_3)\n\n{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_001175a0(long param_1,char *param_2,long param_3)\n\n{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_001175a0(long param_1,char *param_2,long param_3)" * (function_declarator "FUN_001175a0(long param_1,char *param_2,long param_3)" identifier (parameter_list "(long param_1,char *param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long *local_28;" (sized_type_specifier "long" long) (pointer_declarator "*local_28" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "sVar2 = strlen(param_2);" (assignment_expression "sVar2 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);" (assignment_expression "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" identifier = (call_expression "FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" identifier (argument_list "(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" ( identifier , (binary_expression "param_1 + 8" identifier + number_literal) , identifier , identifier , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_20" & identifier) )))) ;) (if_statement "if (lVar3 != 0) {\n    return "exists";\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    return "exists";\n  }" { (return_statement "return "exists";" return (string_literal ""exists"" " string_content ") ;) })) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" if (parenthesized_expression "(uVar5 - lVar3 < 0x20)" ( (binary_expression "uVar5 - lVar3 < 0x20" (binary_expression "uVar5 - lVar3" identifier - identifier) < number_literal) )) (compound_statement "{\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" { (expression_statement "_obstack_newchunk(param_1 + 0x10,0x20);" (call_expression "_obstack_newchunk(param_1 + 0x10,0x20)" identifier (argument_list "(param_1 + 0x10,0x20)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) , number_literal ))) ;) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) })) (expression_statement "plVar1 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar1 = *(long **)(param_1 + 0x20)" identifier = (pointer_expression "*(long **)(param_1 + 0x20)" * (cast_expression "(long **)(param_1 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = lVar3 + 0x20;" (assignment_expression "lVar3 = lVar3 + 0x20" identifier = (binary_expression "lVar3 + 0x20" identifier + number_literal)) ;) (expression_statement "*(long *)(param_1 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar3" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" if (parenthesized_expression "((long *)lVar3 == plVar1)" ( (binary_expression "(long *)lVar3 == plVar1" (cast_expression "(long *)lVar3" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier) == identifier) )) (compound_statement "{\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" { (expression_statement "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;" (assignment_expression "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" * (cast_expression "(byte *)(param_1 + 0x60)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" * (cast_expression "(byte *)(param_1 + 0x60)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) | number_literal)) ;) })) (expression_statement "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);" (assignment_expression "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" identifier = (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40)" identifier + (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) & (unary_expression "~*(ulong *)(param_1 + 0x40)" ~ (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))))) ;) (expression_statement "*(ulong *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x28)" * (cast_expression "(ulong *)(param_1 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" if (parenthesized_expression "(uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18))" ( (binary_expression "uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)" (binary_expression "uVar5 - *(long *)(param_1 + 0x18)" identifier - (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) < (binary_expression "uVar4 - *(long *)(param_1 + 0x18)" identifier - (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))))) )) (compound_statement "{\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" { (expression_statement "*(ulong *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar5" (pointer_expression "*(ulong *)(param_1 + 0x28)" * (cast_expression "(ulong *)(param_1 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) })) (expression_statement "*(ulong *)(param_1 + 0x20) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x20) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "plVar1[3] = param_3;" (assignment_expression "plVar1[3] = param_3" (subscript_expression "plVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar1[2] = local_20;" (assignment_expression "plVar1[2] = local_20" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar1[1] = (long)param_2;" (assignment_expression "plVar1[1] = (long)param_2" (subscript_expression "plVar1[1]" identifier [ number_literal ]) = (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*plVar1 = *local_28;" (assignment_expression "*plVar1 = *local_28" (pointer_expression "*plVar1" * identifier) = (pointer_expression "*local_28" * identifier)) ;) (expression_statement "*local_28 = (long)plVar1;" (assignment_expression "*local_28 = (long)plVar1" (pointer_expression "*local_28" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * hash_insert(hash_control *table,char *key,void *val)\n\n{\n  undefined1 *puVar1;\n  ulong uVar2;\n  _obstack_chunk *p_Var3;\n  hash_entry ***plist;\n  hash_entry *phVar4;\n  hash_entry *phVar5;\n  char *pcVar6;\n  char *pcVar7;\n  hash_entry **list;\n  ulong hash;\n  \n  plist = (hash_entry ***)strlen(key);\n  phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash);\n  if (phVar4 != (hash_entry *)0x0) {\n    return "exists";\n  }\n  pcVar7 = (table->memory).chunk_limit;\n  pcVar6 = (table->memory).next_free;\n  if ((ulong)((long)pcVar7 - (long)pcVar6) < 0x20) {\n    _obstack_newchunk(&table->memory,0x20);\n    pcVar6 = (table->memory).next_free;\n    pcVar7 = (table->memory).chunk_limit;\n  }\n  phVar4 = (hash_entry *)(table->memory).object_base;\n  phVar5 = (hash_entry *)(pcVar6 + 0x20);\n  (table->memory).next_free = (char *)phVar5;\n  if (phVar5 == phVar4) {\n    puVar1 = &(table->memory).field_0x50;\n    *puVar1 = *puVar1 | 2;\n  }\n  uVar2 = (table->memory).alignment_mask;\n  p_Var3 = (table->memory).chunk;\n  pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2);\n  (table->memory).next_free = pcVar6;\n  if ((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)) {\n    (table->memory).next_free = pcVar7;\n    pcVar6 = pcVar7;\n  }\n  (table->memory).object_base = pcVar6;\n  phVar4->data = val;\n  phVar4->hash = hash;\n  phVar4->string = key;\n  phVar4->next = *list;\n  *list = phVar4;\n  return (char *)0x0;\n}\n\n" (function_definition "char * hash_insert(hash_control *table,char *key,void *val)\n\n{\n  undefined1 *puVar1;\n  ulong uVar2;\n  _obstack_chunk *p_Var3;\n  hash_entry ***plist;\n  hash_entry *phVar4;\n  hash_entry *phVar5;\n  char *pcVar6;\n  char *pcVar7;\n  hash_entry **list;\n  ulong hash;\n  \n  plist = (hash_entry ***)strlen(key);\n  phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash);\n  if (phVar4 != (hash_entry *)0x0) {\n    return "exists";\n  }\n  pcVar7 = (table->memory).chunk_limit;\n  pcVar6 = (table->memory).next_free;\n  if ((ulong)((long)pcVar7 - (long)pcVar6) < 0x20) {\n    _obstack_newchunk(&table->memory,0x20);\n    pcVar6 = (table->memory).next_free;\n    pcVar7 = (table->memory).chunk_limit;\n  }\n  phVar4 = (hash_entry *)(table->memory).object_base;\n  phVar5 = (hash_entry *)(pcVar6 + 0x20);\n  (table->memory).next_free = (char *)phVar5;\n  if (phVar5 == phVar4) {\n    puVar1 = &(table->memory).field_0x50;\n    *puVar1 = *puVar1 | 2;\n  }\n  uVar2 = (table->memory).alignment_mask;\n  p_Var3 = (table->memory).chunk;\n  pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2);\n  (table->memory).next_free = pcVar6;\n  if ((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)) {\n    (table->memory).next_free = pcVar7;\n    pcVar6 = pcVar7;\n  }\n  (table->memory).object_base = pcVar6;\n  phVar4->data = val;\n  phVar4->hash = hash;\n  phVar4->string = key;\n  phVar4->next = *list;\n  *list = phVar4;\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* hash_insert(hash_control *table,char *key,void *val)" * (function_declarator "hash_insert(hash_control *table,char *key,void *val)" identifier (parameter_list "(hash_control *table,char *key,void *val)" ( (parameter_declaration "hash_control *table" type_identifier (pointer_declarator "*table" * identifier)) , (parameter_declaration "char *key" primitive_type (pointer_declarator "*key" * identifier)) , (parameter_declaration "void *val" primitive_type (pointer_declarator "*val" * identifier)) )))) (compound_statement "{\n  undefined1 *puVar1;\n  ulong uVar2;\n  _obstack_chunk *p_Var3;\n  hash_entry ***plist;\n  hash_entry *phVar4;\n  hash_entry *phVar5;\n  char *pcVar6;\n  char *pcVar7;\n  hash_entry **list;\n  ulong hash;\n  \n  plist = (hash_entry ***)strlen(key);\n  phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash);\n  if (phVar4 != (hash_entry *)0x0) {\n    return "exists";\n  }\n  pcVar7 = (table->memory).chunk_limit;\n  pcVar6 = (table->memory).next_free;\n  if ((ulong)((long)pcVar7 - (long)pcVar6) < 0x20) {\n    _obstack_newchunk(&table->memory,0x20);\n    pcVar6 = (table->memory).next_free;\n    pcVar7 = (table->memory).chunk_limit;\n  }\n  phVar4 = (hash_entry *)(table->memory).object_base;\n  phVar5 = (hash_entry *)(pcVar6 + 0x20);\n  (table->memory).next_free = (char *)phVar5;\n  if (phVar5 == phVar4) {\n    puVar1 = &(table->memory).field_0x50;\n    *puVar1 = *puVar1 | 2;\n  }\n  uVar2 = (table->memory).alignment_mask;\n  p_Var3 = (table->memory).chunk;\n  pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2);\n  (table->memory).next_free = pcVar6;\n  if ((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)) {\n    (table->memory).next_free = pcVar7;\n    pcVar6 = pcVar7;\n  }\n  (table->memory).object_base = pcVar6;\n  phVar4->data = val;\n  phVar4->hash = hash;\n  phVar4->string = key;\n  phVar4->next = *list;\n  *list = phVar4;\n  return (char *)0x0;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "_obstack_chunk *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "hash_entry ***plist;" type_identifier (pointer_declarator "***plist" * (pointer_declarator "**plist" * (pointer_declarator "*plist" * identifier))) ;) (declaration "hash_entry *phVar4;" type_identifier (pointer_declarator "*phVar4" * identifier) ;) (declaration "hash_entry *phVar5;" type_identifier (pointer_declarator "*phVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "hash_entry **list;" type_identifier (pointer_declarator "**list" * (pointer_declarator "*list" * identifier)) ;) (declaration "ulong hash;" type_identifier identifier ;) (expression_statement "plist = (hash_entry ***)strlen(key);" (assignment_expression "plist = (hash_entry ***)strlen(key)" identifier = (cast_expression "(hash_entry ***)strlen(key)" ( (type_descriptor "hash_entry ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) (call_expression "strlen(key)" identifier (argument_list "(key)" ( identifier ))))) ;) (expression_statement "phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash);" (assignment_expression "phVar4 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash)" identifier = (call_expression "hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash)" identifier (argument_list "(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                       (hash_control *)&hash)" ( identifier , (cast_expression "(char *)&table->size" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&table->size" & (field_expression "table->size" identifier -> field_identifier))) , (cast_expression "(size_t)key" ( (type_descriptor "size_t" primitive_type) ) identifier) , identifier , (cast_expression "(ulong *)&list" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&list" & identifier)) , (cast_expression "(hash_control *)&hash" ( (type_descriptor "hash_control *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&hash" & identifier)) )))) ;) (if_statement "if (phVar4 != (hash_entry *)0x0) {\n    return "exists";\n  }" if (parenthesized_expression "(phVar4 != (hash_entry *)0x0)" ( (binary_expression "phVar4 != (hash_entry *)0x0" identifier != (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return "exists";\n  }" { (return_statement "return "exists";" return (string_literal ""exists"" " string_content ") ;) })) (expression_statement "pcVar7 = (table->memory).chunk_limit;" (assignment_expression "pcVar7 = (table->memory).chunk_limit" identifier = (field_expression "(table->memory).chunk_limit" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar6 = (table->memory).next_free;" (assignment_expression "pcVar6 = (table->memory).next_free" identifier = (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((ulong)((long)pcVar7 - (long)pcVar6) < 0x20) {\n    _obstack_newchunk(&table->memory,0x20);\n    pcVar6 = (table->memory).next_free;\n    pcVar7 = (table->memory).chunk_limit;\n  }" if (parenthesized_expression "((ulong)((long)pcVar7 - (long)pcVar6) < 0x20)" ( (binary_expression "(ulong)((long)pcVar7 - (long)pcVar6) < 0x20" (call_expression "(ulong)((long)pcVar7 - (long)pcVar6)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pcVar7 - (long)pcVar6)" ( (binary_expression "(long)pcVar7 - (long)pcVar6" (cast_expression "(long)pcVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pcVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) < number_literal) )) (compound_statement "{\n    _obstack_newchunk(&table->memory,0x20);\n    pcVar6 = (table->memory).next_free;\n    pcVar7 = (table->memory).chunk_limit;\n  }" { (expression_statement "_obstack_newchunk(&table->memory,0x20);" (call_expression "_obstack_newchunk(&table->memory,0x20)" identifier (argument_list "(&table->memory,0x20)" ( (pointer_expression "&table->memory" & (field_expression "table->memory" identifier -> field_identifier)) , number_literal ))) ;) (expression_statement "pcVar6 = (table->memory).next_free;" (assignment_expression "pcVar6 = (table->memory).next_free" identifier = (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar7 = (table->memory).chunk_limit;" (assignment_expression "pcVar7 = (table->memory).chunk_limit" identifier = (field_expression "(table->memory).chunk_limit" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) })) (expression_statement "phVar4 = (hash_entry *)(table->memory).object_base;" (assignment_expression "phVar4 = (hash_entry *)(table->memory).object_base" identifier = (cast_expression "(hash_entry *)(table->memory).object_base" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(table->memory).object_base" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "phVar5 = (hash_entry *)(pcVar6 + 0x20);" (assignment_expression "phVar5 = (hash_entry *)(pcVar6 + 0x20)" identifier = (cast_expression "(hash_entry *)(pcVar6 + 0x20)" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar6 + 0x20)" ( (binary_expression "pcVar6 + 0x20" identifier + number_literal) )))) ;) (expression_statement "(table->memory).next_free = (char *)phVar5;" (assignment_expression "(table->memory).next_free = (char *)phVar5" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(char *)phVar5" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (phVar5 == phVar4) {\n    puVar1 = &(table->memory).field_0x50;\n    *puVar1 = *puVar1 | 2;\n  }" if (parenthesized_expression "(phVar5 == phVar4)" ( (binary_expression "phVar5 == phVar4" identifier == identifier) )) (compound_statement "{\n    puVar1 = &(table->memory).field_0x50;\n    *puVar1 = *puVar1 | 2;\n  }" { (expression_statement "puVar1 = &(table->memory).field_0x50;" (assignment_expression "puVar1 = &(table->memory).field_0x50" identifier = (pointer_expression "&(table->memory).field_0x50" & (field_expression "(table->memory).field_0x50" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "*puVar1 = *puVar1 | 2;" (assignment_expression "*puVar1 = *puVar1 | 2" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 | 2" (pointer_expression "*puVar1" * identifier) | number_literal)) ;) })) (expression_statement "uVar2 = (table->memory).alignment_mask;" (assignment_expression "uVar2 = (table->memory).alignment_mask" identifier = (field_expression "(table->memory).alignment_mask" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "p_Var3 = (table->memory).chunk;" (assignment_expression "p_Var3 = (table->memory).chunk" identifier = (field_expression "(table->memory).chunk" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2);" (assignment_expression "pcVar6 = (char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2)" identifier = (cast_expression "(char *)((ulong)((long)&phVar5->next + uVar2) & ~uVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)((long)&phVar5->next + uVar2) & ~uVar2)" ( (binary_expression "(ulong)((long)&phVar5->next + uVar2) & ~uVar2" (call_expression "(ulong)((long)&phVar5->next + uVar2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)&phVar5->next + uVar2)" ( (binary_expression "(long)&phVar5->next + uVar2" (cast_expression "(long)&phVar5->next" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&phVar5->next" & (field_expression "phVar5->next" identifier -> field_identifier))) + identifier) ))) & (unary_expression "~uVar2" ~ identifier)) )))) ;) (expression_statement "(table->memory).next_free = pcVar6;" (assignment_expression "(table->memory).next_free = pcVar6" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (if_statement "if ((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)) {\n    (table->memory).next_free = pcVar7;\n    pcVar6 = pcVar7;\n  }" if (parenthesized_expression "((ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3))" ( (binary_expression "(ulong)((long)pcVar7 - (long)p_Var3) < (ulong)((long)pcVar6 - (long)p_Var3)" (call_expression "(ulong)((long)pcVar7 - (long)p_Var3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pcVar7 - (long)p_Var3)" ( (binary_expression "(long)pcVar7 - (long)p_Var3" (cast_expression "(long)pcVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)p_Var3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) < (call_expression "(ulong)((long)pcVar6 - (long)p_Var3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pcVar6 - (long)p_Var3)" ( (binary_expression "(long)pcVar6 - (long)p_Var3" (cast_expression "(long)pcVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)p_Var3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) )) (compound_statement "{\n    (table->memory).next_free = pcVar7;\n    pcVar6 = pcVar7;\n  }" { (expression_statement "(table->memory).next_free = pcVar7;" (assignment_expression "(table->memory).next_free = pcVar7" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pcVar6 = pcVar7;" (assignment_expression "pcVar6 = pcVar7" identifier = identifier) ;) })) (expression_statement "(table->memory).object_base = pcVar6;" (assignment_expression "(table->memory).object_base = pcVar6" (field_expression "(table->memory).object_base" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "phVar4->data = val;" (assignment_expression "phVar4->data = val" (field_expression "phVar4->data" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar4->hash = hash;" (assignment_expression "phVar4->hash = hash" (field_expression "phVar4->hash" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar4->string = key;" (assignment_expression "phVar4->string = key" (field_expression "phVar4->string" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar4->next = *list;" (assignment_expression "phVar4->next = *list" (field_expression "phVar4->next" identifier -> field_identifier) = (pointer_expression "*list" * identifier)) ;) (expression_statement "*list = phVar4;" (assignment_expression "*list = phVar4" (pointer_expression "*list" * identifier) = identifier) ;) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * FUN_001175a0(long param_1,char *param_2,long param_3)\n\n{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_001175a0(long param_1,char *param_2,long param_3)\n\n{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_001175a0(long param_1,char *param_2,long param_3)" * (function_declarator "FUN_001175a0(long param_1,char *param_2,long param_3)" identifier (parameter_list "(long param_1,char *param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "long *local_28;" (sized_type_specifier "long" long) (pointer_declarator "*local_28" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "sVar2 = strlen(param_2);" (assignment_expression "sVar2 = strlen(param_2)" identifier = (call_expression "strlen(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);" (assignment_expression "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" identifier = (call_expression "FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" identifier (argument_list "(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" ( identifier , (binary_expression "param_1 + 8" identifier + number_literal) , identifier , identifier , (pointer_expression "&local_28" & identifier) , (pointer_expression "&local_20" & identifier) )))) ;) (if_statement "if (lVar3 != 0) {\n    return "exists";\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    return "exists";\n  }" { (return_statement "return "exists";" return (string_literal ""exists"" " string_content ") ;) })) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" if (parenthesized_expression "(uVar5 - lVar3 < 0x20)" ( (binary_expression "uVar5 - lVar3 < 0x20" (binary_expression "uVar5 - lVar3" identifier - identifier) < number_literal) )) (compound_statement "{\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" { (expression_statement "_obstack_newchunk(param_1 + 0x10,0x20);" (call_expression "_obstack_newchunk(param_1 + 0x10,0x20)" identifier (argument_list "(param_1 + 0x10,0x20)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) , number_literal ))) ;) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x30)" * (cast_expression "(ulong *)(param_1 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) })) (expression_statement "plVar1 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar1 = *(long **)(param_1 + 0x20)" identifier = (pointer_expression "*(long **)(param_1 + 0x20)" * (cast_expression "(long **)(param_1 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "lVar3 = lVar3 + 0x20;" (assignment_expression "lVar3 = lVar3 + 0x20" identifier = (binary_expression "lVar3 + 0x20" identifier + number_literal)) ;) (expression_statement "*(long *)(param_1 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar3" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" if (parenthesized_expression "((long *)lVar3 == plVar1)" ( (binary_expression "(long *)lVar3 == plVar1" (cast_expression "(long *)lVar3" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier) == identifier) )) (compound_statement "{\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" { (expression_statement "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;" (assignment_expression "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" * (cast_expression "(byte *)(param_1 + 0x60)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" * (cast_expression "(byte *)(param_1 + 0x60)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) | number_literal)) ;) })) (expression_statement "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);" (assignment_expression "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" identifier = (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40)" identifier + (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) & (unary_expression "~*(ulong *)(param_1 + 0x40)" ~ (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))))) ;) (expression_statement "*(ulong *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x28)" * (cast_expression "(ulong *)(param_1 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" if (parenthesized_expression "(uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18))" ( (binary_expression "uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)" (binary_expression "uVar5 - *(long *)(param_1 + 0x18)" identifier - (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) < (binary_expression "uVar4 - *(long *)(param_1 + 0x18)" identifier - (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))))) )) (compound_statement "{\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" { (expression_statement "*(ulong *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar5" (pointer_expression "*(ulong *)(param_1 + 0x28)" * (cast_expression "(ulong *)(param_1 + 0x28)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" identifier = identifier) ;) })) (expression_statement "*(ulong *)(param_1 + 0x20) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x20) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x20)" * (cast_expression "(ulong *)(param_1 + 0x20)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "plVar1[3] = param_3;" (assignment_expression "plVar1[3] = param_3" (subscript_expression "plVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar1[2] = local_20;" (assignment_expression "plVar1[2] = local_20" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar1[1] = (long)param_2;" (assignment_expression "plVar1[1] = (long)param_2" (subscript_expression "plVar1[1]" identifier [ number_literal ]) = (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*plVar1 = *local_28;" (assignment_expression "*plVar1 = *local_28" (pointer_expression "*plVar1" * identifier) = (pointer_expression "*local_28" * identifier)) ;) (expression_statement "*local_28 = (long)plVar1;" (assignment_expression "*local_28 = (long)plVar1" (pointer_expression "*local_28" * identifier) = (cast_expression "(long)plVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) )))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , IDENT , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return (string_literal " string_content ") ;) })) (expression_statement (assignment_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 *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (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 IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) & (unary_expression ~ (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) < (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "char * FUN_001175a0(long param_1,char *param_2,long param_3)\n\n{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" (primitive_type "char") (pointer_declarator "* FUN_001175a0(long param_1,char *param_2,long param_3)" (* "*") (function_declarator "FUN_001175a0(long param_1,char *param_2,long param_3)" (identifier "FUN_001175a0") (parameter_list "(long param_1,char *param_2,long param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")")))) (compound_statement "{\n  long *plVar1;\n  size_t sVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  long *local_28;\n  long local_20;\n  \n  sVar2 = strlen(param_2);\n  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);\n  if (lVar3 != 0) {\n    return "exists";\n  }\n  uVar5 = *(ulong *)(param_1 + 0x30);\n  lVar3 = *(long *)(param_1 + 0x28);\n  if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }\n  plVar1 = *(long **)(param_1 + 0x20);\n  lVar3 = lVar3 + 0x20;\n  *(long *)(param_1 + 0x28) = lVar3;\n  if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }\n  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);\n  *(ulong *)(param_1 + 0x28) = uVar4;\n  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }\n  *(ulong *)(param_1 + 0x20) = uVar4;\n  plVar1[3] = param_3;\n  plVar1[2] = local_20;\n  plVar1[1] = (long)param_2;\n  *plVar1 = *local_28;\n  *local_28 = (long)plVar1;\n  return (char *)0x0;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "size_t sVar2;" (primitive_type "size_t") (identifier "sVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (declaration "long *local_28;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*local_28" (* "*") (identifier "local_28")) (; ";")) (declaration "long local_20;" (sized_type_specifier "long" (long "long")) (identifier "local_20") (; ";")) (expression_statement "sVar2 = strlen(param_2);" (assignment_expression "sVar2 = strlen(param_2)" (identifier "sVar2") (= "=") (call_expression "strlen(param_2)" (identifier "strlen") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);" (assignment_expression "lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" (identifier "lVar3") (= "=") (call_expression "FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" (identifier "FUN_00117350") (argument_list "(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) (, ",") (identifier "param_2") (, ",") (identifier "sVar2") (, ",") (pointer_expression "&local_28" (& "&") (identifier "local_28")) (, ",") (pointer_expression "&local_20" (& "&") (identifier "local_20")) () ")")))) (; ";")) (if_statement "if (lVar3 != 0) {\n    return "exists";\n  }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return "exists";\n  }" ({ "{") (return_statement "return "exists";" (return "return") (string_literal ""exists"" (" """) (string_content "exists") (" """)) (; ";")) (} "}"))) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" (identifier "uVar5") (= "=") (pointer_expression "*(ulong *)(param_1 + 0x30)" (* "*") (cast_expression "(ulong *)(param_1 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (uVar5 - lVar3 < 0x20) {\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" (if "if") (parenthesized_expression "(uVar5 - lVar3 < 0x20)" (( "(") (binary_expression "uVar5 - lVar3 < 0x20" (binary_expression "uVar5 - lVar3" (identifier "uVar5") (- "-") (identifier "lVar3")) (< "<") (number_literal "0x20")) () ")")) (compound_statement "{\n    _obstack_newchunk(param_1 + 0x10,0x20);\n    lVar3 = *(long *)(param_1 + 0x28);\n    uVar5 = *(ulong *)(param_1 + 0x30);\n  }" ({ "{") (expression_statement "_obstack_newchunk(param_1 + 0x10,0x20);" (call_expression "_obstack_newchunk(param_1 + 0x10,0x20)" (identifier "_obstack_newchunk") (argument_list "(param_1 + 0x10,0x20)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) (, ",") (number_literal "0x20") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar3 = *(long *)(param_1 + 0x28)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(ulong *)(param_1 + 0x30);" (assignment_expression "uVar5 = *(ulong *)(param_1 + 0x30)" (identifier "uVar5") (= "=") (pointer_expression "*(ulong *)(param_1 + 0x30)" (* "*") (cast_expression "(ulong *)(param_1 + 0x30)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (} "}"))) (expression_statement "plVar1 = *(long **)(param_1 + 0x20);" (assignment_expression "plVar1 = *(long **)(param_1 + 0x20)" (identifier "plVar1") (= "=") (pointer_expression "*(long **)(param_1 + 0x20)" (* "*") (cast_expression "(long **)(param_1 + 0x20)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "lVar3 = lVar3 + 0x20;" (assignment_expression "lVar3 = lVar3 + 0x20" (identifier "lVar3") (= "=") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20"))) (; ";")) (expression_statement "*(long *)(param_1 + 0x28) = lVar3;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar3" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if ((long *)lVar3 == plVar1) {\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" (if "if") (parenthesized_expression "((long *)lVar3 == plVar1)" (( "(") (binary_expression "(long *)lVar3 == plVar1" (cast_expression "(long *)lVar3" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "lVar3")) (== "==") (identifier "plVar1")) () ")")) (compound_statement "{\n    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;\n  }" ({ "{") (expression_statement "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;" (assignment_expression "*(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" (* "*") (cast_expression "(byte *)(param_1 + 0x60)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 0x60) | 2" (pointer_expression "*(byte *)(param_1 + 0x60)" (* "*") (cast_expression "(byte *)(param_1 + 0x60)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))) (| "|") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);" (assignment_expression "uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" (identifier "uVar4") (= "=") (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40)" (binary_expression "lVar3 + *(ulong *)(param_1 + 0x40)" (identifier "lVar3") (+ "+") (pointer_expression "*(ulong *)(param_1 + 0x40)" (* "*") (cast_expression "(ulong *)(param_1 + 0x40)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (& "&") (unary_expression "~*(ulong *)(param_1 + 0x40)" (~ "~") (pointer_expression "*(ulong *)(param_1 + 0x40)" (* "*") (cast_expression "(ulong *)(param_1 + 0x40)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))))) (; ";")) (expression_statement "*(ulong *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x28)" (* "*") (cast_expression "(ulong *)(param_1 + 0x28)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" (if "if") (parenthesized_expression "(uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18))" (( "(") (binary_expression "uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)" (binary_expression "uVar5 - *(long *)(param_1 + 0x18)" (identifier "uVar5") (- "-") (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (< "<") (binary_expression "uVar4 - *(long *)(param_1 + 0x18)" (identifier "uVar4") (- "-") (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))))) () ")")) (compound_statement "{\n    *(ulong *)(param_1 + 0x28) = uVar5;\n    uVar4 = uVar5;\n  }" ({ "{") (expression_statement "*(ulong *)(param_1 + 0x28) = uVar5;" (assignment_expression "*(ulong *)(param_1 + 0x28) = uVar5" (pointer_expression "*(ulong *)(param_1 + 0x28)" (* "*") (cast_expression "(ulong *)(param_1 + 0x28)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "uVar4 = uVar5;" (assignment_expression "uVar4 = uVar5" (identifier "uVar4") (= "=") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "*(ulong *)(param_1 + 0x20) = uVar4;" (assignment_expression "*(ulong *)(param_1 + 0x20) = uVar4" (pointer_expression "*(ulong *)(param_1 + 0x20)" (* "*") (cast_expression "(ulong *)(param_1 + 0x20)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "plVar1[3] = param_3;" (assignment_expression "plVar1[3] = param_3" (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "plVar1[2] = local_20;" (assignment_expression "plVar1[2] = local_20" (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "local_20")) (; ";")) (expression_statement "plVar1[1] = (long)param_2;" (assignment_expression "plVar1[1] = (long)param_2" (subscript_expression "plVar1[1]" (identifier "plVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2"))) (; ";")) (expression_statement "*plVar1 = *local_28;" (assignment_expression "*plVar1 = *local_28" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (= "=") (pointer_expression "*local_28" (* "*") (identifier "local_28"))) (; ";")) (expression_statement "*local_28 = (long)plVar1;" (assignment_expression "*local_28 = (long)plVar1" (pointer_expression "*local_28" (* "*") (identifier "local_28")) (= "=") (cast_expression "(long)plVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar1"))) (; ";")) (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

char * function_1(type_1 *table,char *key,void *val)

{
  type_2 *puVar1;
  type_3 var_7;
  type_4 *p_Var3;
  type_5 ***plist;
  type_5 *var_3;
  type_5 *var_6;
  char *var_5;
  char *pcVar7;
  type_5 **list;
  type_3 hash;
  
  plist = (type_5 ***)var_1(key);
  var_3 = var_2(table,(char *)&table->size,(size_t)key,plist,(type_3 *)&list,
                       (type_1 *)&hash);
  if (var_3 != (type_5 *)0x0) {
    return "exists";
  }
  pcVar7 = (table->memory).chunk_limit;
  var_5 = (table->memory).next_free;
  if ((type_3)((long)pcVar7 - (long)var_5) < 0x20) {
    var_4(&table->memory,0x20);
    var_5 = (table->memory).next_free;
    pcVar7 = (table->memory).chunk_limit;
  }
  var_3 = (type_5 *)(table->memory).object_base;
  var_6 = (type_5 *)(var_5 + 0x20);
  (table->memory).next_free = (char *)var_6;
  if (var_6 == var_3) {
    puVar1 = &(table->memory).field_0x50;
    *puVar1 = *puVar1 | 2;
  }
  var_7 = (table->memory).alignment_mask;
  p_Var3 = (table->memory).chunk;
  var_5 = (char *)((type_3)((long)&var_6->next + var_7) & ~var_7);
  (table->memory).next_free = var_5;
  if ((type_3)((long)pcVar7 - (long)p_Var3) < (type_3)((long)var_5 - (long)p_Var3)) {
    (table->memory).next_free = pcVar7;
    var_5 = pcVar7;
  }
  (table->memory).object_base = var_5;
  var_3->data = val;
  var_3->hash = hash;
  var_3->string = key;
  var_3->next = *list;
  *list = var_3;
  return (char *)0x0;
}


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

char * MASKED(long param_1,char *param_2,long param_3)

{
  long *plVar1;
  size_t sVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  long *local_28;
  long local_20;
  
  sVar2 = strlen(param_2);
  lVar3 = FUN_00117350(param_1,param_1 + 8,param_2,sVar2,&local_28,&local_20);
  if (lVar3 != 0) {
    return "exists";
  }
  uVar5 = *(ulong *)(param_1 + 0x30);
  lVar3 = *(long *)(param_1 + 0x28);
  if (uVar5 - lVar3 < 0x20) {
    _obstack_newchunk(param_1 + 0x10,0x20);
    lVar3 = *(long *)(param_1 + 0x28);
    uVar5 = *(ulong *)(param_1 + 0x30);
  }
  plVar1 = *(long **)(param_1 + 0x20);
  lVar3 = lVar3 + 0x20;
  *(long *)(param_1 + 0x28) = lVar3;
  if ((long *)lVar3 == plVar1) {
    *(byte *)(param_1 + 0x60) = *(byte *)(param_1 + 0x60) | 2;
  }
  uVar4 = lVar3 + *(ulong *)(param_1 + 0x40) & ~*(ulong *)(param_1 + 0x40);
  *(ulong *)(param_1 + 0x28) = uVar4;
  if (uVar5 - *(long *)(param_1 + 0x18) < uVar4 - *(long *)(param_1 + 0x18)) {
    *(ulong *)(param_1 + 0x28) = uVar5;
    uVar4 = uVar5;
  }
  *(ulong *)(param_1 + 0x20) = uVar4;
  plVar1[3] = param_3;
  plVar1[2] = local_20;
  plVar1[1] = (long)param_2;
  *plVar1 = *local_28;
  *local_28 = (long)plVar1;
  return (char *)0x0;
}

