
debug_type
stab_find_tagged_type(void *dhandle,stab_handle *info,char *p,int len,debug_type_kind kind)

{
  char cVar1;
  int iVar2;
  bfd_target *name;
  debug_type_conflict pdVar3;
  bfd *pbVar4;
  bfd *pbVar5;
  
  name = (bfd_target *)savestring(p,len);
  pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);
  if (pdVar3 != (debug_type_conflict)0x0) {
    free(name);
    return pdVar3;
  }
  pbVar5 = info->abfd;
  if (pbVar5 != (bfd *)0x0) {
    cVar1 = *(char *)&name->name;
    do {
      if (*(char *)&pbVar5->xvec->name == cVar1) {
        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);
        if (iVar2 == 0) {
          if (*(int *)&pbVar5->iostream == 0) {
            *(debug_type_kind *)&pbVar5->iostream = kind;
          }
          free(name);
          return (debug_type)pbVar5->lru_prev;
        }
      }
      pbVar5 = (bfd *)pbVar5->filename;
    } while (pbVar5 != (bfd *)0x0);
  }
  pbVar4 = (bfd *)xmalloc(0x28);
  *(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0;
  *(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0;
  pbVar5 = info->abfd;
  pbVar4->xvec = name;
  *(debug_type_kind *)&pbVar4->iostream = kind;
  pbVar4->filename = (char *)pbVar5;
  pbVar4->iovec = (bfd_iovec *)0x0;
  pbVar5 = (bfd *)debug_make_indirect_type
                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name);
  info->abfd = pbVar4;
  pbVar4->lru_prev = pbVar5;
  return (debug_type)pbVar5;
}



long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,
                 undefined4 param_5)

{
  char cVar1;
  int iVar2;
  char *__s2;
  long lVar3;
  long *plVar4;
  
  __s2 = (char *)FUN_00110540(param_3,param_4);
  lVar3 = FUN_0010ff20(param_1,__s2,0);
  if (lVar3 != 0) {
    free(__s2);
    return lVar3;
  }
  plVar4 = (long *)*param_2;
  if (plVar4 != (long *)0x0) {
    cVar1 = *__s2;
    do {
      if (*(char *)plVar4[1] == cVar1) {
        iVar2 = strcmp((char *)plVar4[1],__s2);
        if (iVar2 == 0) {
          if ((int)plVar4[2] == 0) {
            *(undefined4 *)(plVar4 + 2) = param_5;
          }
          free(__s2);
          return plVar4[4];
        }
      }
      plVar4 = (long *)*plVar4;
    } while (plVar4 != (long *)0x0);
  }
  plVar4 = (long *)xmalloc(0x28);
  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;
  *(undefined4 *)((long)plVar4 + 0x24) = 0;
  lVar3 = *param_2;
  plVar4[1] = (long)__s2;
  *(undefined4 *)(plVar4 + 2) = param_5;
  *plVar4 = lVar3;
  plVar4[3] = 0;
  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);
  *param_2 = (long)plVar4;
  plVar4[4] = lVar3;
  return lVar3;
}


PUSH R15
PUSH R14
MOV R14D,R8D
PUSH R13
MOV R13,RSI
MOV ESI,ECX
PUSH R12
MOV R12,RDI
MOV RDI,RDX
PUSH RBP
PUSH RBX
SUB RSP,0x18
CALL 0x00110540
XOR EDX,EDX
MOV RDI,R12
MOV RSI,RAX
MOV RBP,RAX
CALL 0x0010ff20
TEST RAX,RAX
JNZ 0x00110f18
MOV RBX,qword ptr [R13]
TEST RBX,RBX
JZ 0x00110f40
MOVZX R15D,byte ptr [RBP]
JMP 0x00110ed8
MOV RBX,qword ptr [RBX]
TEST RBX,RBX
JZ 0x00110f40
MOV RDI,qword ptr [RBX + 0x8]
CMP byte ptr [RDI],R15B
JNZ 0x00110ed0
MOV RSI,RBP
CALL 0x00104460
TEST EAX,EAX
JNZ 0x00110ed0
MOV EAX,dword ptr [RBX + 0x10]
TEST EAX,EAX
JNZ 0x00110ef8
MOV dword ptr [RBX + 0x10],R14D
MOV RDI,RBP
CALL 0x00104920
MOV RAX,qword ptr [RBX + 0x20]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RDI,RBP
MOV qword ptr [RSP + 0x8],RAX
CALL 0x00104920
MOV RAX,qword ptr [RSP + 0x8]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDI,0x28
CALL 0x00104370
PXOR XMM0,XMM0
MOV RDX,RBP
MOV RDI,R12
MOV RBX,RAX
MOVUPS xmmword ptr [RAX + 0x14],XMM0
MOV dword ptr [RAX + 0x24],0x0
MOV RAX,qword ptr [R13]
LEA RSI,[RBX + 0x18]
MOV qword ptr [RBX + 0x8],RBP
MOV dword ptr [RBX + 0x10],R14D
MOV qword ptr [RBX],RAX
MOV qword ptr [RBX + 0x18],0x0
CALL 0x0010f450
MOV qword ptr [R13],RBX
MOV qword ptr [RBX + 0x20],RAX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)\n\n{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}\n\n" (function_definition "long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)\n\n{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "__s2 = (char *)FUN_00110540(param_3,param_4);" (assignment_expression "__s2 = (char *)FUN_00110540(param_3,param_4)" identifier = (cast_expression "(char *)FUN_00110540(param_3,param_4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00110540(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier ))))) ;) (expression_statement "lVar3 = FUN_0010ff20(param_1,__s2,0);" (assignment_expression "lVar3 = FUN_0010ff20(param_1,__s2,0)" identifier = (call_expression "FUN_0010ff20(param_1,__s2,0)" identifier (argument_list "(param_1,__s2,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    free(__s2);\n    return lVar3;\n  }" { (expression_statement "free(__s2);" (call_expression "free(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) (return_statement "return lVar3;" return identifier ;) })) (expression_statement "plVar4 = (long *)*param_2;" (assignment_expression "plVar4 = (long *)*param_2" identifier = (cast_expression "(long *)*param_2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" { (expression_statement "cVar1 = *__s2;" (assignment_expression "cVar1 = *__s2" identifier = (pointer_expression "*__s2" * identifier)) ;) (do_statement "do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);" do (compound_statement "{\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    }" { (if_statement "if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" if (parenthesized_expression "(*(char *)plVar4[1] == cVar1)" ( (binary_expression "*(char *)plVar4[1] == cVar1" (pointer_expression "*(char *)plVar4[1]" * (cast_expression "(char *)plVar4[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ]))) == identifier) )) (compound_statement "{\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" { (expression_statement "iVar2 = strcmp((char *)plVar4[1],__s2);" (assignment_expression "iVar2 = strcmp((char *)plVar4[1],__s2)" identifier = (call_expression "strcmp((char *)plVar4[1],__s2)" identifier (argument_list "((char *)plVar4[1],__s2)" ( (cast_expression "(char *)plVar4[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" { (if_statement "if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" if (parenthesized_expression "((int)plVar4[2] == 0)" ( (binary_expression "(int)plVar4[2] == 0" (cast_expression "(int)plVar4[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" { (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" * (cast_expression "(undefined4 *)(plVar4 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 2)" ( (binary_expression "plVar4 + 2" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "free(__s2);" (call_expression "free(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) (return_statement "return plVar4[4];" return (subscript_expression "plVar4[4]" identifier [ number_literal ]) ;) })) })) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) }) while (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "plVar4 = (long *)xmalloc(0x28);" (assignment_expression "plVar4 = (long *)xmalloc(0x28)" identifier = (cast_expression "(long *)xmalloc(0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x28)" identifier (argument_list "(0x28)" ( number_literal ))))) ;) (expression_statement "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;" (assignment_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0" (pointer_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14)" * (cast_expression "(undefined1 (*) [16])((long)plVar4 + 0x14)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "((long)plVar4 + 0x14)" ( (binary_expression "(long)plVar4 + 0x14" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "*(undefined4 *)((long)plVar4 + 0x24) = 0;" (assignment_expression "*(undefined4 *)((long)plVar4 + 0x24) = 0" (pointer_expression "*(undefined4 *)((long)plVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)plVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar4 + 0x24)" ( (binary_expression "(long)plVar4 + 0x24" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "plVar4[1] = (long)__s2;" (assignment_expression "plVar4[1] = (long)__s2" (subscript_expression "plVar4[1]" identifier [ number_literal ]) = (cast_expression "(long)__s2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" * (cast_expression "(undefined4 *)(plVar4 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 2)" ( (binary_expression "plVar4 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "*plVar4 = lVar3;" (assignment_expression "*plVar4 = lVar3" (pointer_expression "*plVar4" * identifier) = identifier) ;) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);" (assignment_expression "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2)" identifier = (call_expression "FUN_0010f450(param_1,plVar4 + 3,__s2)" identifier (argument_list "(param_1,plVar4 + 3,__s2)" ( identifier , (binary_expression "plVar4 + 3" identifier + number_literal) , identifier )))) ;) (expression_statement "*param_2 = (long)plVar4;" (assignment_expression "*param_2 = (long)plVar4" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar4[4] = lVar3;" (assignment_expression "plVar4[4] = lVar3" (subscript_expression "plVar4[4]" identifier [ number_literal ]) = identifier) ;) (return_statement "return lVar3;" return identifier ;) })))
(translation_unit "debug_type\nstab_find_tagged_type(void *dhandle,stab_handle *info,char *p,int len,debug_type_kind kind)\n\n{\n  char cVar1;\n  int iVar2;\n  bfd_target *name;\n  debug_type_conflict pdVar3;\n  bfd *pbVar4;\n  bfd *pbVar5;\n  \n  name = (bfd_target *)savestring(p,len);\n  pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);\n  if (pdVar3 != (debug_type_conflict)0x0) {\n    free(name);\n    return pdVar3;\n  }\n  pbVar5 = info->abfd;\n  if (pbVar5 != (bfd *)0x0) {\n    cVar1 = *(char *)&name->name;\n    do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);\n  }\n  pbVar4 = (bfd *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0;\n  pbVar5 = info->abfd;\n  pbVar4->xvec = name;\n  *(debug_type_kind *)&pbVar4->iostream = kind;\n  pbVar4->filename = (char *)pbVar5;\n  pbVar4->iovec = (bfd_iovec *)0x0;\n  pbVar5 = (bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name);\n  info->abfd = pbVar4;\n  pbVar4->lru_prev = pbVar5;\n  return (debug_type)pbVar5;\n}\n\n" (function_definition "debug_type\nstab_find_tagged_type(void *dhandle,stab_handle *info,char *p,int len,debug_type_kind kind)\n\n{\n  char cVar1;\n  int iVar2;\n  bfd_target *name;\n  debug_type_conflict pdVar3;\n  bfd *pbVar4;\n  bfd *pbVar5;\n  \n  name = (bfd_target *)savestring(p,len);\n  pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);\n  if (pdVar3 != (debug_type_conflict)0x0) {\n    free(name);\n    return pdVar3;\n  }\n  pbVar5 = info->abfd;\n  if (pbVar5 != (bfd *)0x0) {\n    cVar1 = *(char *)&name->name;\n    do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);\n  }\n  pbVar4 = (bfd *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0;\n  pbVar5 = info->abfd;\n  pbVar4->xvec = name;\n  *(debug_type_kind *)&pbVar4->iostream = kind;\n  pbVar4->filename = (char *)pbVar5;\n  pbVar4->iovec = (bfd_iovec *)0x0;\n  pbVar5 = (bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name);\n  info->abfd = pbVar4;\n  pbVar4->lru_prev = pbVar5;\n  return (debug_type)pbVar5;\n}" type_identifier (function_declarator "stab_find_tagged_type(void *dhandle,stab_handle *info,char *p,int len,debug_type_kind kind)" identifier (parameter_list "(void *dhandle,stab_handle *info,char *p,int len,debug_type_kind kind)" ( (parameter_declaration "void *dhandle" primitive_type (pointer_declarator "*dhandle" * identifier)) , (parameter_declaration "stab_handle *info" type_identifier (pointer_declarator "*info" * identifier)) , (parameter_declaration "char *p" primitive_type (pointer_declarator "*p" * identifier)) , (parameter_declaration "int len" primitive_type identifier) , (parameter_declaration "debug_type_kind kind" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  bfd_target *name;\n  debug_type_conflict pdVar3;\n  bfd *pbVar4;\n  bfd *pbVar5;\n  \n  name = (bfd_target *)savestring(p,len);\n  pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);\n  if (pdVar3 != (debug_type_conflict)0x0) {\n    free(name);\n    return pdVar3;\n  }\n  pbVar5 = info->abfd;\n  if (pbVar5 != (bfd *)0x0) {\n    cVar1 = *(char *)&name->name;\n    do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);\n  }\n  pbVar4 = (bfd *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0;\n  pbVar5 = info->abfd;\n  pbVar4->xvec = name;\n  *(debug_type_kind *)&pbVar4->iostream = kind;\n  pbVar4->filename = (char *)pbVar5;\n  pbVar4->iovec = (bfd_iovec *)0x0;\n  pbVar5 = (bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name);\n  info->abfd = pbVar4;\n  pbVar4->lru_prev = pbVar5;\n  return (debug_type)pbVar5;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "bfd_target *name;" type_identifier (pointer_declarator "*name" * identifier) ;) (declaration "debug_type_conflict pdVar3;" type_identifier identifier ;) (declaration "bfd *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "bfd *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (expression_statement "name = (bfd_target *)savestring(p,len);" (assignment_expression "name = (bfd_target *)savestring(p,len)" identifier = (cast_expression "(bfd_target *)savestring(p,len)" ( (type_descriptor "bfd_target *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "savestring(p,len)" identifier (argument_list "(p,len)" ( identifier , identifier ))))) ;) (expression_statement "pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);" (assignment_expression "pdVar3 = debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL)" identifier = (call_expression "debug_find_tagged_type(dhandle,(char *)name,DEBUG_KIND_ILLEGAL)" identifier (argument_list "(dhandle,(char *)name,DEBUG_KIND_ILLEGAL)" ( identifier , (cast_expression "(char *)name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (pdVar3 != (debug_type_conflict)0x0) {\n    free(name);\n    return pdVar3;\n  }" if (parenthesized_expression "(pdVar3 != (debug_type_conflict)0x0)" ( (binary_expression "pdVar3 != (debug_type_conflict)0x0" identifier != (cast_expression "(debug_type_conflict)0x0" ( (type_descriptor "debug_type_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n    free(name);\n    return pdVar3;\n  }" { (expression_statement "free(name);" (call_expression "free(name)" identifier (argument_list "(name)" ( identifier ))) ;) (return_statement "return pdVar3;" return identifier ;) })) (expression_statement "pbVar5 = info->abfd;" (assignment_expression "pbVar5 = info->abfd" identifier = (field_expression "info->abfd" identifier -> field_identifier)) ;) (if_statement "if (pbVar5 != (bfd *)0x0) {\n    cVar1 = *(char *)&name->name;\n    do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);\n  }" if (parenthesized_expression "(pbVar5 != (bfd *)0x0)" ( (binary_expression "pbVar5 != (bfd *)0x0" identifier != (cast_expression "(bfd *)0x0" ( (type_descriptor "bfd *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *(char *)&name->name;\n    do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);\n  }" { (expression_statement "cVar1 = *(char *)&name->name;" (assignment_expression "cVar1 = *(char *)&name->name" identifier = (pointer_expression "*(char *)&name->name" * (cast_expression "(char *)&name->name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&name->name" & (field_expression "name->name" identifier -> field_identifier))))) ;) (do_statement "do {\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    } while (pbVar5 != (bfd *)0x0);" do (compound_statement "{\n      if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }\n      pbVar5 = (bfd *)pbVar5->filename;\n    }" { (if_statement "if (*(char *)&pbVar5->xvec->name == cVar1) {\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }" if (parenthesized_expression "(*(char *)&pbVar5->xvec->name == cVar1)" ( (binary_expression "*(char *)&pbVar5->xvec->name == cVar1" (pointer_expression "*(char *)&pbVar5->xvec->name" * (cast_expression "(char *)&pbVar5->xvec->name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar5->xvec->name" & (field_expression "pbVar5->xvec->name" (field_expression "pbVar5->xvec" identifier -> field_identifier) -> field_identifier)))) == identifier) )) (compound_statement "{\n        iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);\n        if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }\n      }" { (expression_statement "iVar2 = strcmp((char *)pbVar5->xvec,(char *)name);" (assignment_expression "iVar2 = strcmp((char *)pbVar5->xvec,(char *)name)" identifier = (call_expression "strcmp((char *)pbVar5->xvec,(char *)name)" identifier (argument_list "((char *)pbVar5->xvec,(char *)name)" ( (cast_expression "(char *)pbVar5->xvec" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "pbVar5->xvec" identifier -> field_identifier)) , (cast_expression "(char *)name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (iVar2 == 0) {\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }\n          free(name);\n          return (debug_type)pbVar5->lru_prev;\n        }" { (if_statement "if (*(int *)&pbVar5->iostream == 0) {\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }" if (parenthesized_expression "(*(int *)&pbVar5->iostream == 0)" ( (binary_expression "*(int *)&pbVar5->iostream == 0" (pointer_expression "*(int *)&pbVar5->iostream" * (cast_expression "(int *)&pbVar5->iostream" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar5->iostream" & (field_expression "pbVar5->iostream" identifier -> field_identifier)))) == number_literal) )) (compound_statement "{\n            *(debug_type_kind *)&pbVar5->iostream = kind;\n          }" { (expression_statement "*(debug_type_kind *)&pbVar5->iostream = kind;" (assignment_expression "*(debug_type_kind *)&pbVar5->iostream = kind" (pointer_expression "*(debug_type_kind *)&pbVar5->iostream" * (cast_expression "(debug_type_kind *)&pbVar5->iostream" ( (type_descriptor "debug_type_kind *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar5->iostream" & (field_expression "pbVar5->iostream" identifier -> field_identifier)))) = identifier) ;) })) (expression_statement "free(name);" (call_expression "free(name)" identifier (argument_list "(name)" ( identifier ))) ;) (return_statement "return (debug_type)pbVar5->lru_prev;" return (cast_expression "(debug_type)pbVar5->lru_prev" ( (type_descriptor "debug_type" type_identifier) ) (field_expression "pbVar5->lru_prev" identifier -> field_identifier)) ;) })) })) (expression_statement "pbVar5 = (bfd *)pbVar5->filename;" (assignment_expression "pbVar5 = (bfd *)pbVar5->filename" identifier = (cast_expression "(bfd *)pbVar5->filename" ( (type_descriptor "bfd *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pbVar5->filename" identifier -> field_identifier))) ;) }) while (parenthesized_expression "(pbVar5 != (bfd *)0x0)" ( (binary_expression "pbVar5 != (bfd *)0x0" identifier != (cast_expression "(bfd *)0x0" ( (type_descriptor "bfd *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "pbVar4 = (bfd *)xmalloc(0x28);" (assignment_expression "pbVar4 = (bfd *)xmalloc(0x28)" identifier = (cast_expression "(bfd *)xmalloc(0x28)" ( (type_descriptor "bfd *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x28)" identifier (argument_list "(0x28)" ( number_literal ))))) ;) (expression_statement "*(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0;" (assignment_expression "*(undefined1 (*) [16])((long)&pbVar4->iostream + 4) = (undefined1  [16])0x0" (pointer_expression "*(undefined1 (*) [16])((long)&pbVar4->iostream + 4)" * (cast_expression "(undefined1 (*) [16])((long)&pbVar4->iostream + 4)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "((long)&pbVar4->iostream + 4)" ( (binary_expression "(long)&pbVar4->iostream + 4" (cast_expression "(long)&pbVar4->iostream" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pbVar4->iostream" & (field_expression "pbVar4->iostream" identifier -> field_identifier))) + number_literal) )))) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "*(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0;" (assignment_expression "*(undefined4 *)((long)&pbVar4->lru_prev + 4) = 0" (pointer_expression "*(undefined4 *)((long)&pbVar4->lru_prev + 4)" * (cast_expression "(undefined4 *)((long)&pbVar4->lru_prev + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pbVar4->lru_prev + 4)" ( (binary_expression "(long)&pbVar4->lru_prev + 4" (cast_expression "(long)&pbVar4->lru_prev" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pbVar4->lru_prev" & (field_expression "pbVar4->lru_prev" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "pbVar5 = info->abfd;" (assignment_expression "pbVar5 = info->abfd" identifier = (field_expression "info->abfd" identifier -> field_identifier)) ;) (expression_statement "pbVar4->xvec = name;" (assignment_expression "pbVar4->xvec = name" (field_expression "pbVar4->xvec" identifier -> field_identifier) = identifier) ;) (expression_statement "*(debug_type_kind *)&pbVar4->iostream = kind;" (assignment_expression "*(debug_type_kind *)&pbVar4->iostream = kind" (pointer_expression "*(debug_type_kind *)&pbVar4->iostream" * (cast_expression "(debug_type_kind *)&pbVar4->iostream" ( (type_descriptor "debug_type_kind *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar4->iostream" & (field_expression "pbVar4->iostream" identifier -> field_identifier)))) = identifier) ;) (expression_statement "pbVar4->filename = (char *)pbVar5;" (assignment_expression "pbVar4->filename = (char *)pbVar5" (field_expression "pbVar4->filename" identifier -> field_identifier) = (cast_expression "(char *)pbVar5" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar4->iovec = (bfd_iovec *)0x0;" (assignment_expression "pbVar4->iovec = (bfd_iovec *)0x0" (field_expression "pbVar4->iovec" identifier -> field_identifier) = (cast_expression "(bfd_iovec *)0x0" ( (type_descriptor "bfd_iovec *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar5 = (bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name);" (assignment_expression "pbVar5 = (bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name)" identifier = (cast_expression "(bfd *)debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name)" ( (type_descriptor "bfd *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "debug_make_indirect_type\n                            (dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name)" identifier (argument_list "(dhandle,(debug_type_conflict *)&pbVar4->iovec,(char *)name)" ( identifier , (cast_expression "(debug_type_conflict *)&pbVar4->iovec" ( (type_descriptor "debug_type_conflict *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar4->iovec" & (field_expression "pbVar4->iovec" identifier -> field_identifier))) , (cast_expression "(char *)name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))))) ;) (expression_statement "info->abfd = pbVar4;" (assignment_expression "info->abfd = pbVar4" (field_expression "info->abfd" identifier -> field_identifier) = identifier) ;) (expression_statement "pbVar4->lru_prev = pbVar5;" (assignment_expression "pbVar4->lru_prev = pbVar5" (field_expression "pbVar4->lru_prev" identifier -> field_identifier) = identifier) ;) (return_statement "return (debug_type)pbVar5;" return (cast_expression "(debug_type)pbVar5" ( (type_descriptor "debug_type" type_identifier) ) identifier) ;) })))
(translation_unit "long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)\n\n{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}\n\n" (function_definition "long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)\n\n{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "__s2 = (char *)FUN_00110540(param_3,param_4);" (assignment_expression "__s2 = (char *)FUN_00110540(param_3,param_4)" identifier = (cast_expression "(char *)FUN_00110540(param_3,param_4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00110540(param_3,param_4)" identifier (argument_list "(param_3,param_4)" ( identifier , identifier ))))) ;) (expression_statement "lVar3 = FUN_0010ff20(param_1,__s2,0);" (assignment_expression "lVar3 = FUN_0010ff20(param_1,__s2,0)" identifier = (call_expression "FUN_0010ff20(param_1,__s2,0)" identifier (argument_list "(param_1,__s2,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    free(__s2);\n    return lVar3;\n  }" { (expression_statement "free(__s2);" (call_expression "free(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) (return_statement "return lVar3;" return identifier ;) })) (expression_statement "plVar4 = (long *)*param_2;" (assignment_expression "plVar4 = (long *)*param_2" identifier = (cast_expression "(long *)*param_2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" if (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" { (expression_statement "cVar1 = *__s2;" (assignment_expression "cVar1 = *__s2" identifier = (pointer_expression "*__s2" * identifier)) ;) (do_statement "do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);" do (compound_statement "{\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    }" { (if_statement "if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" if (parenthesized_expression "(*(char *)plVar4[1] == cVar1)" ( (binary_expression "*(char *)plVar4[1] == cVar1" (pointer_expression "*(char *)plVar4[1]" * (cast_expression "(char *)plVar4[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ]))) == identifier) )) (compound_statement "{\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" { (expression_statement "iVar2 = strcmp((char *)plVar4[1],__s2);" (assignment_expression "iVar2 = strcmp((char *)plVar4[1],__s2)" identifier = (call_expression "strcmp((char *)plVar4[1],__s2)" identifier (argument_list "((char *)plVar4[1],__s2)" ( (cast_expression "(char *)plVar4[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" { (if_statement "if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" if (parenthesized_expression "((int)plVar4[2] == 0)" ( (binary_expression "(int)plVar4[2] == 0" (cast_expression "(int)plVar4[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[2]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" { (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" * (cast_expression "(undefined4 *)(plVar4 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 2)" ( (binary_expression "plVar4 + 2" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "free(__s2);" (call_expression "free(__s2)" identifier (argument_list "(__s2)" ( identifier ))) ;) (return_statement "return plVar4[4];" return (subscript_expression "plVar4[4]" identifier [ number_literal ]) ;) })) })) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) }) while (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "plVar4 = (long *)xmalloc(0x28);" (assignment_expression "plVar4 = (long *)xmalloc(0x28)" identifier = (cast_expression "(long *)xmalloc(0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x28)" identifier (argument_list "(0x28)" ( number_literal ))))) ;) (expression_statement "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;" (assignment_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0" (pointer_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14)" * (cast_expression "(undefined1 (*) [16])((long)plVar4 + 0x14)" ( (type_descriptor "undefined1 (*) [16]" type_identifier (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "((long)plVar4 + 0x14)" ( (binary_expression "(long)plVar4 + 0x14" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (cast_expression "(undefined1  [16])0x0" ( (type_descriptor "undefined1  [16]" type_identifier (abstract_array_declarator "[16]" [ number_literal ])) ) number_literal)) ;) (expression_statement "*(undefined4 *)((long)plVar4 + 0x24) = 0;" (assignment_expression "*(undefined4 *)((long)plVar4 + 0x24) = 0" (pointer_expression "*(undefined4 *)((long)plVar4 + 0x24)" * (cast_expression "(undefined4 *)((long)plVar4 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar4 + 0x24)" ( (binary_expression "(long)plVar4 + 0x24" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "plVar4[1] = (long)__s2;" (assignment_expression "plVar4[1] = (long)__s2" (subscript_expression "plVar4[1]" identifier [ number_literal ]) = (cast_expression "(long)__s2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" * (cast_expression "(undefined4 *)(plVar4 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4 + 2)" ( (binary_expression "plVar4 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "*plVar4 = lVar3;" (assignment_expression "*plVar4 = lVar3" (pointer_expression "*plVar4" * identifier) = identifier) ;) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);" (assignment_expression "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2)" identifier = (call_expression "FUN_0010f450(param_1,plVar4 + 3,__s2)" identifier (argument_list "(param_1,plVar4 + 3,__s2)" ( identifier , (binary_expression "plVar4 + 3" identifier + number_literal) , identifier )))) ;) (expression_statement "*param_2 = (long)plVar4;" (assignment_expression "*param_2 = (long)plVar4" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar4[4] = lVar3;" (assignment_expression "plVar4[4] = lVar3" (subscript_expression "plVar4[4]" identifier [ number_literal ]) = identifier) ;) (return_statement "return lVar3;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })) (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 { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == 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 (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = (cast_expression ( (type_descriptor TYPE (abstract_array_declarator [ LIT ])) ) LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) 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 (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "long FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)\n\n{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00110e80(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" (identifier "FUN_00110e80") (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,\n                 undefined4 param_5)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) () ")"))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  char *__s2;\n  long lVar3;\n  long *plVar4;\n  \n  __s2 = (char *)FUN_00110540(param_3,param_4);\n  lVar3 = FUN_0010ff20(param_1,__s2,0);\n  if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }\n  plVar4 = (long *)*param_2;\n  if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }\n  plVar4 = (long *)xmalloc(0x28);\n  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;\n  *(undefined4 *)((long)plVar4 + 0x24) = 0;\n  lVar3 = *param_2;\n  plVar4[1] = (long)__s2;\n  *(undefined4 *)(plVar4 + 2) = param_5;\n  *plVar4 = lVar3;\n  plVar4[3] = 0;\n  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);\n  *param_2 = (long)plVar4;\n  plVar4[4] = lVar3;\n  return lVar3;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "char *__s2;" (primitive_type "char") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (expression_statement "__s2 = (char *)FUN_00110540(param_3,param_4);" (assignment_expression "__s2 = (char *)FUN_00110540(param_3,param_4)" (identifier "__s2") (= "=") (cast_expression "(char *)FUN_00110540(param_3,param_4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00110540(param_3,param_4)" (identifier "FUN_00110540") (argument_list "(param_3,param_4)" (( "(") (identifier "param_3") (, ",") (identifier "param_4") () ")"))))) (; ";")) (expression_statement "lVar3 = FUN_0010ff20(param_1,__s2,0);" (assignment_expression "lVar3 = FUN_0010ff20(param_1,__s2,0)" (identifier "lVar3") (= "=") (call_expression "FUN_0010ff20(param_1,__s2,0)" (identifier "FUN_0010ff20") (argument_list "(param_1,__s2,0)" (( "(") (identifier "param_1") (, ",") (identifier "__s2") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (lVar3 != 0) {\n    free(__s2);\n    return lVar3;\n  }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    free(__s2);\n    return lVar3;\n  }" ({ "{") (expression_statement "free(__s2);" (call_expression "free(__s2)" (identifier "free") (argument_list "(__s2)" (( "(") (identifier "__s2") () ")"))) (; ";")) (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}"))) (expression_statement "plVar4 = (long *)*param_2;" (assignment_expression "plVar4 = (long *)*param_2" (identifier "plVar4") (= "=") (cast_expression "(long *)*param_2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (plVar4 != (long *)0x0) {\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" (if "if") (parenthesized_expression "(plVar4 != (long *)0x0)" (( "(") (binary_expression "plVar4 != (long *)0x0" (identifier "plVar4") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    cVar1 = *__s2;\n    do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);\n  }" ({ "{") (expression_statement "cVar1 = *__s2;" (assignment_expression "cVar1 = *__s2" (identifier "cVar1") (= "=") (pointer_expression "*__s2" (* "*") (identifier "__s2"))) (; ";")) (do_statement "do {\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    } while (plVar4 != (long *)0x0);" (do "do") (compound_statement "{\n      if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }\n      plVar4 = (long *)*plVar4;\n    }" ({ "{") (if_statement "if (*(char *)plVar4[1] == cVar1) {\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" (if "if") (parenthesized_expression "(*(char *)plVar4[1] == cVar1)" (( "(") (binary_expression "*(char *)plVar4[1] == cVar1" (pointer_expression "*(char *)plVar4[1]" (* "*") (cast_expression "(char *)plVar4[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]")))) (== "==") (identifier "cVar1")) () ")")) (compound_statement "{\n        iVar2 = strcmp((char *)plVar4[1],__s2);\n        if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }\n      }" ({ "{") (expression_statement "iVar2 = strcmp((char *)plVar4[1],__s2);" (assignment_expression "iVar2 = strcmp((char *)plVar4[1],__s2)" (identifier "iVar2") (= "=") (call_expression "strcmp((char *)plVar4[1],__s2)" (identifier "strcmp") (argument_list "((char *)plVar4[1],__s2)" (( "(") (cast_expression "(char *)plVar4[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]"))) (, ",") (identifier "__s2") () ")")))) (; ";")) (if_statement "if (iVar2 == 0) {\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }\n          free(__s2);\n          return plVar4[4];\n        }" ({ "{") (if_statement "if ((int)plVar4[2] == 0) {\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" (if "if") (parenthesized_expression "((int)plVar4[2] == 0)" (( "(") (binary_expression "(int)plVar4[2] == 0" (cast_expression "(int)plVar4[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]"))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            *(undefined4 *)(plVar4 + 2) = param_5;\n          }" ({ "{") (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" (* "*") (cast_expression "(undefined4 *)(plVar4 + 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4 + 2)" (( "(") (binary_expression "plVar4 + 2" (identifier "plVar4") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "param_5")) (; ";")) (} "}"))) (expression_statement "free(__s2);" (call_expression "free(__s2)" (identifier "free") (argument_list "(__s2)" (( "(") (identifier "__s2") () ")"))) (; ";")) (return_statement "return plVar4[4];" (return "return") (subscript_expression "plVar4[4]" (identifier "plVar4") ([ "[") (number_literal "4") (] "]")) (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar4 = (long *)*plVar4;" (assignment_expression "plVar4 = (long *)*plVar4" (identifier "plVar4") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar4 != (long *)0x0)" (( "(") (binary_expression "plVar4 != (long *)0x0" (identifier "plVar4") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}"))) (expression_statement "plVar4 = (long *)xmalloc(0x28);" (assignment_expression "plVar4 = (long *)xmalloc(0x28)" (identifier "plVar4") (= "=") (cast_expression "(long *)xmalloc(0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(0x28)" (identifier "xmalloc") (argument_list "(0x28)" (( "(") (number_literal "0x28") () ")"))))) (; ";")) (expression_statement "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;" (assignment_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0" (pointer_expression "*(undefined1 (*) [16])((long)plVar4 + 0x14)" (* "*") (cast_expression "(undefined1 (*) [16])((long)plVar4 + 0x14)" (( "(") (type_descriptor "undefined1 (*) [16]" (type_identifier "undefined1") (abstract_array_declarator "(*) [16]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "16") (] "]"))) () ")") (parenthesized_expression "((long)plVar4 + 0x14)" (( "(") (binary_expression "(long)plVar4 + 0x14" (cast_expression "(long)plVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar4")) (+ "+") (number_literal "0x14")) () ")")))) (= "=") (cast_expression "(undefined1  [16])0x0" (( "(") (type_descriptor "undefined1  [16]" (type_identifier "undefined1") (abstract_array_declarator "[16]" ([ "[") (number_literal "16") (] "]"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "*(undefined4 *)((long)plVar4 + 0x24) = 0;" (assignment_expression "*(undefined4 *)((long)plVar4 + 0x24) = 0" (pointer_expression "*(undefined4 *)((long)plVar4 + 0x24)" (* "*") (cast_expression "(undefined4 *)((long)plVar4 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar4 + 0x24)" (( "(") (binary_expression "(long)plVar4 + 0x24" (cast_expression "(long)plVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar4")) (+ "+") (number_literal "0x24")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" (identifier "lVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "plVar4[1] = (long)__s2;" (assignment_expression "plVar4[1] = (long)__s2" (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)__s2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__s2"))) (; ";")) (expression_statement "*(undefined4 *)(plVar4 + 2) = param_5;" (assignment_expression "*(undefined4 *)(plVar4 + 2) = param_5" (pointer_expression "*(undefined4 *)(plVar4 + 2)" (* "*") (cast_expression "(undefined4 *)(plVar4 + 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4 + 2)" (( "(") (binary_expression "plVar4 + 2" (identifier "plVar4") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "param_5")) (; ";")) (expression_statement "*plVar4 = lVar3;" (assignment_expression "*plVar4 = lVar3" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "plVar4[3] = 0;" (assignment_expression "plVar4[3] = 0" (subscript_expression "plVar4[3]" (identifier "plVar4") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);" (assignment_expression "lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2)" (identifier "lVar3") (= "=") (call_expression "FUN_0010f450(param_1,plVar4 + 3,__s2)" (identifier "FUN_0010f450") (argument_list "(param_1,plVar4 + 3,__s2)" (( "(") (identifier "param_1") (, ",") (binary_expression "plVar4 + 3" (identifier "plVar4") (+ "+") (number_literal "3")) (, ",") (identifier "__s2") () ")")))) (; ";")) (expression_statement "*param_2 = (long)plVar4;" (assignment_expression "*param_2 = (long)plVar4" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)plVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar4"))) (; ";")) (expression_statement "plVar4[4] = lVar3;" (assignment_expression "plVar4[4] = lVar3" (subscript_expression "plVar4[4]" (identifier "plVar4") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "lVar3")) (; ";")) (return_statement "return lVar3;" (return "return") (identifier "lVar3") (; ";")) (} "}")))

type_1
function_1(void *dhandle,type_2 *info,char *p,int len,type_3 kind)

{
  char var_6;
  int var_8;
  type_4 *name;
  type_5 var_3;
  type_6 *pbVar4;
  type_6 *var_5;
  
  name = (type_4 *)var_1(p,len);
  var_3 = var_2(dhandle,(char *)name,DEBUG_KIND_ILLEGAL);
  if (var_3 != (type_5)0x0) {
    var_4(name);
    return var_3;
  }
  var_5 = info->abfd;
  if (var_5 != (type_6 *)0x0) {
    var_6 = *(char *)&name->name;
    do {
      if (*(char *)&var_5->xvec->name == var_6) {
        var_8 = var_7((char *)var_5->xvec,(char *)name);
        if (var_8 == 0) {
          if (*(int *)&var_5->iostream == 0) {
            *(type_3 *)&var_5->iostream = kind;
          }
          var_4(name);
          return (type_1)var_5->lru_prev;
        }
      }
      var_5 = (type_6 *)var_5->filename;
    } while (var_5 != (type_6 *)0x0);
  }
  pbVar4 = (type_6 *)var_9(0x28);
  *(type_7 (*) [16])((long)&pbVar4->iostream + 4) = (type_7  [16])0x0;
  *(type_8 *)((long)&pbVar4->lru_prev + 4) = 0;
  var_5 = info->abfd;
  pbVar4->xvec = name;
  *(type_3 *)&pbVar4->iostream = kind;
  pbVar4->filename = (char *)var_5;
  pbVar4->iovec = (type_9 *)0x0;
  var_5 = (type_6 *)var_10
                            (dhandle,(type_5 *)&pbVar4->iovec,(char *)name);
  info->abfd = pbVar4;
  pbVar4->lru_prev = var_5;
  return (type_1)var_5;
}


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

long MASKED(undefined8 param_1,long *param_2,undefined8 param_3,undefined4 param_4,
                 undefined4 param_5)

{
  char cVar1;
  int iVar2;
  char *__s2;
  long lVar3;
  long *plVar4;
  
  __s2 = (char *)FUN_00110540(param_3,param_4);
  lVar3 = FUN_0010ff20(param_1,__s2,0);
  if (lVar3 != 0) {
    free(__s2);
    return lVar3;
  }
  plVar4 = (long *)*param_2;
  if (plVar4 != (long *)0x0) {
    cVar1 = *__s2;
    do {
      if (*(char *)plVar4[1] == cVar1) {
        iVar2 = strcmp((char *)plVar4[1],__s2);
        if (iVar2 == 0) {
          if ((int)plVar4[2] == 0) {
            *(undefined4 *)(plVar4 + 2) = param_5;
          }
          free(__s2);
          return plVar4[4];
        }
      }
      plVar4 = (long *)*plVar4;
    } while (plVar4 != (long *)0x0);
  }
  plVar4 = (long *)xmalloc(0x28);
  *(undefined1 (*) [16])((long)plVar4 + 0x14) = (undefined1  [16])0x0;
  *(undefined4 *)((long)plVar4 + 0x24) = 0;
  lVar3 = *param_2;
  plVar4[1] = (long)__s2;
  *(undefined4 *)(plVar4 + 2) = param_5;
  *plVar4 = lVar3;
  plVar4[3] = 0;
  lVar3 = FUN_0010f450(param_1,plVar4 + 3,__s2);
  *param_2 = (long)plVar4;
  plVar4[4] = lVar3;
  return lVar3;
}

