
lang_statement_union_type ** insert_os_after(lang_output_section_statement_type *after)

{
  lang_statement_union_type *plVar1;
  asection *paVar2;
  bfd_section *pbVar3;
  lang_statement_union_type *plVar4;
  lang_statement_union_type *plVar5;
  bool bVar6;
  
  plVar1 = (after->header).next;
  bVar6 = lang_output_section_statement.head == (lang_statement_union *)after;
  if (plVar1 == (lang_statement_union_type *)0x0) {
switchD_00115442_caseD_10:
    return (lang_statement_union_type **)after;
  }
  plVar5 = (lang_statement_union_type *)0x0;
  do {
    plVar4 = plVar1;
    switch((plVar4->header).type) {
    case lang_output_section_statement_enum:
      if (plVar5 == (lang_statement_union_type *)0x0) {
        return (lang_statement_union_type **)(lang_statement_union_type *)after;
      }
      paVar2 = (plVar4->output_section_statement).bfd_section;
      if (paVar2 == (asection *)0x0) {
        return (lang_statement_union_type **)plVar5;
      }
      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {
        return (lang_statement_union_type **)plVar5;
      }
      if ((paVar2->flags & 1) != 0) {
        after = (lang_output_section_statement_type *)plVar5;
      }
      return (lang_statement_union_type **)after;
    case lang_assignment_statement_enum:
      if ((((plVar5 == (lang_statement_union_type *)0x0) &&
           (*(int *)&((plVar4->input_section).section)->next != 8)) &&
          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&
         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {
        plVar5 = (lang_statement_union_type *)after;
      }
      bVar6 = false;
    case lang_input_statement_enum:
    case lang_address_statement_enum:
    case lang_target_statement_enum:
    case lang_output_statement_enum:
    case lang_group_statement_enum:
    case lang_insert_statement_enum:
      plVar1 = (plVar4->header).next;
      break;
    case lang_wild_statement_enum:
    case lang_input_section_enum:
    case lang_object_symbols_statement_enum:
    case lang_fill_statement_enum:
    case lang_data_statement_enum:
    case lang_reloc_statement_enum:
    case lang_padding_statement_enum:
    case lang_constructors_statement_enum:
      plVar1 = (plVar4->header).next;
      plVar5 = (lang_statement_union_type *)0x0;
      break;
    default:
      goto switchD_00115442_caseD_10;
    }
    after = (lang_output_section_statement_type *)plVar4;
    if (plVar1 == (lang_statement_union_type *)0x0) {
      return (lang_statement_union_type **)plVar4;
    }
  } while( true );
}



long * FUN_00115410(long *param_1)

{
  long *plVar1;
  long lVar2;
  char *pcVar3;
  long *plVar4;
  long *plVar5;
  bool bVar6;
  
  bVar6 = DAT_002a6760 == param_1;
  if ((long *)*param_1 == (long *)0x0) {
switchD_00115442_caseD_10:
    return param_1;
  }
  plVar5 = (long *)0x0;
  plVar1 = (long *)*param_1;
  do {
    plVar4 = plVar1;
    switch((int)plVar4[1]) {
    case 0:
      if (plVar5 == (long *)0x0) {
        return param_1;
      }
      lVar2 = plVar4[7];
      if (lVar2 == 0) {
        return plVar5;
      }
      if (*(long *)(lVar2 + 0x108) == 0) {
        return plVar5;
      }
      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {
        param_1 = plVar5;
      }
      return param_1;
    case 1:
      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&
          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&
         ((pcVar3[1] == '\0' && (!bVar6)))) {
        plVar5 = param_1;
      }
      bVar6 = false;
    case 2:
    case 3:
    case 10:
    case 0xb:
    case 0xd:
    case 0xe:
      plVar1 = (long *)*plVar4;
      break;
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xc:
    case 0xf:
      plVar1 = (long *)*plVar4;
      plVar5 = (long *)0x0;
      break;
    default:
      goto switchD_00115442_caseD_10;
    }
    param_1 = plVar4;
    if (plVar1 == (long *)0x0) {
      return plVar4;
    }
  } while( true );
}


MOV RDX,qword ptr [RDI]
XOR R8D,R8D
CMP qword ptr [0x002a6760],RDI
MOV RAX,RDI
SETZ R8B
TEST RDX,RDX
JZ 0x0011548b
XOR EDI,EDI
LEA RSI,[0x160ac0]
CMP dword ptr [RDX + 0x8],0xf
JA 0x0011548b
MOV ECX,dword ptr [RDX + 0x8]
MOVSXD RCX,dword ptr [RSI + RCX*0x4]
ADD RCX,RSI
JMP RCX
TEST RDI,RDI
JZ 0x001154a0
XOR R8D,R8D
MOV RAX,RDX
MOV RDX,qword ptr [RDX]
TEST RDX,RDX
JNZ 0x00115432
RET
MOV RAX,RDX
MOV RDX,qword ptr [RDX]
XOR EDI,EDI
TEST RDX,RDX
JNZ 0x00115432
JMP 0x0011545b
TEST RDI,RDI
JZ 0x0011548b
MOV RDX,qword ptr [RDX + 0x38]
TEST RDX,RDX
JZ 0x00115488
CMP qword ptr [RDX + 0x108],0x0
JNZ 0x00115490
MOV RAX,RDI
RET
TEST byte ptr [RDX + 0x20],0x1
CMOVNZ RAX,RDI
RET
MOV RCX,qword ptr [RDX + 0x10]
CMP dword ptr [RCX + 0x10],0x8
JZ 0x0011544d
MOV RCX,qword ptr [RCX + 0x18]
CMP byte ptr [RCX],0x2e
JNZ 0x0011544d
CMP byte ptr [RCX + 0x1],0x0
JNZ 0x0011544d
TEST R8D,R8D
JNZ 0x0011544d
MOV RDI,RAX
JMP 0x0011544d
(translation_unit "long * FUN_00115410(long *param_1)\n\n{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}\n\n" (function_definition "long * FUN_00115410(long *param_1)\n\n{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00115410(long *param_1)" * (function_declarator "FUN_00115410(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "bVar6 = DAT_002a6760 == param_1;" (assignment_expression "bVar6 = DAT_002a6760 == param_1" identifier = (binary_expression "DAT_002a6760 == param_1" identifier == identifier)) ;) (if_statement "if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" if (parenthesized_expression "((long *)*param_1 == (long *)0x0)" ( (binary_expression "(long *)*param_1 == (long *)0x0" (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" { (labeled_statement "switchD_00115442_caseD_10:\n    return param_1;" statement_identifier : (return_statement "return param_1;" return identifier ;)) })) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "plVar1 = (long *)*param_1;" (assignment_expression "plVar1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (do_statement "do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );" do (compound_statement "{\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  }" { (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" identifier = identifier) ;) (switch_statement "switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" switch (parenthesized_expression "((int)plVar4[1])" ( (cast_expression "(int)plVar4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) )) (compound_statement "{\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" { (case_statement "case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;" case number_literal : (if_statement "if (plVar5 == (long *)0x0) {\n        return param_1;\n      }" if (parenthesized_expression "(plVar5 == (long *)0x0)" ( (binary_expression "plVar5 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "lVar2 = plVar4[7];" (assignment_expression "lVar2 = plVar4[7]" identifier = (subscript_expression "plVar4[7]" identifier [ number_literal ])) ;) (if_statement "if (lVar2 == 0) {\n        return plVar5;\n      }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return plVar5;\n      }" { (return_statement "return plVar5;" return identifier ;) })) (if_statement "if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }" if (parenthesized_expression "(*(long *)(lVar2 + 0x108) == 0)" ( (binary_expression "*(long *)(lVar2 + 0x108) == 0" (pointer_expression "*(long *)(lVar2 + 0x108)" * (cast_expression "(long *)(lVar2 + 0x108)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x108)" ( (binary_expression "lVar2 + 0x108" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return plVar5;\n      }" { (return_statement "return plVar5;" return identifier ;) })) (if_statement "if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }" if (parenthesized_expression "((*(byte *)(lVar2 + 0x20) & 1) != 0)" ( (binary_expression "(*(byte *)(lVar2 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar2 + 0x20) & 1)" ( (binary_expression "*(byte *)(lVar2 + 0x20) & 1" (pointer_expression "*(byte *)(lVar2 + 0x20)" * (cast_expression "(byte *)(lVar2 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        param_1 = plVar5;\n      }" { (expression_statement "param_1 = plVar5;" (assignment_expression "param_1 = plVar5" identifier = identifier) ;) })) (return_statement "return param_1;" return identifier ;)) (case_statement "case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;" case number_literal : (if_statement "if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }" if (parenthesized_expression "((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6))))" ( (binary_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))" (parenthesized_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'))" ( (binary_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" (parenthesized_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8))" ( (binary_expression "(plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)" (parenthesized_expression "(plVar5 == (long *)0x0)" ( (binary_expression "plVar5 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*(int *)(plVar4[2] + 0x10) != 8)" ( (binary_expression "*(int *)(plVar4[2] + 0x10) != 8" (pointer_expression "*(int *)(plVar4[2] + 0x10)" * (cast_expression "(int *)(plVar4[2] + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x10)" ( (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) && (parenthesized_expression "(pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" ( (comma_expression "pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'" (assignment_expression "pcVar3 = *(char **)(plVar4[2] + 0x18)" identifier = (pointer_expression "*(char **)(plVar4[2] + 0x18)" * (cast_expression "(char **)(plVar4[2] + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(plVar4[2] + 0x18)" ( (binary_expression "plVar4[2] + 0x18" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) , (binary_expression "*pcVar3 == '.'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'.'" ' character '))) ))) )) && (parenthesized_expression "((pcVar3[1] == '\0' && (!bVar6)))" ( (parenthesized_expression "(pcVar3[1] == '\0' && (!bVar6))" ( (binary_expression "pcVar3[1] == '\0' && (!bVar6)" (binary_expression "pcVar3[1] == '\0'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) && (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) ))) )) ))) )) (compound_statement "{\n        plVar5 = param_1;\n      }" { (expression_statement "plVar5 = param_1;" (assignment_expression "plVar5 = param_1" identifier = identifier) ;) })) (expression_statement "bVar6 = false;" (assignment_expression "bVar6 = false" identifier = false) ;)) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 10:" case number_literal :) (case_statement "case 0xb:" case number_literal :) (case_statement "case 0xd:" case number_literal :) (case_statement "case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;" case number_literal : (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 4:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:" case number_literal :) (case_statement "case 0xc:" case number_literal :) (case_statement "case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;" case number_literal : (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      goto switchD_00115442_caseD_10;" default : (goto_statement "goto switchD_00115442_caseD_10;" goto statement_identifier ;)) })) (expression_statement "param_1 = plVar4;" (assignment_expression "param_1 = plVar4" identifier = identifier) ;) (if_statement "if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return plVar4;\n    }" { (return_statement "return plVar4;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "lang_statement_union_type ** insert_os_after(lang_output_section_statement_type *after)\n\n{\n  lang_statement_union_type *plVar1;\n  asection *paVar2;\n  bfd_section *pbVar3;\n  lang_statement_union_type *plVar4;\n  lang_statement_union_type *plVar5;\n  bool bVar6;\n  \n  plVar1 = (after->header).next;\n  bVar6 = lang_output_section_statement.head == (lang_statement_union *)after;\n  if (plVar1 == (lang_statement_union_type *)0x0) {\nswitchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;\n  }\n  plVar5 = (lang_statement_union_type *)0x0;\n  do {\n    plVar4 = plVar1;\n    switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    after = (lang_output_section_statement_type *)plVar4;\n    if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }\n  } while( true );\n}\n\n" (function_definition "lang_statement_union_type ** insert_os_after(lang_output_section_statement_type *after)\n\n{\n  lang_statement_union_type *plVar1;\n  asection *paVar2;\n  bfd_section *pbVar3;\n  lang_statement_union_type *plVar4;\n  lang_statement_union_type *plVar5;\n  bool bVar6;\n  \n  plVar1 = (after->header).next;\n  bVar6 = lang_output_section_statement.head == (lang_statement_union *)after;\n  if (plVar1 == (lang_statement_union_type *)0x0) {\nswitchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;\n  }\n  plVar5 = (lang_statement_union_type *)0x0;\n  do {\n    plVar4 = plVar1;\n    switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    after = (lang_output_section_statement_type *)plVar4;\n    if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }\n  } while( true );\n}" type_identifier (pointer_declarator "** insert_os_after(lang_output_section_statement_type *after)" * (pointer_declarator "* insert_os_after(lang_output_section_statement_type *after)" * (function_declarator "insert_os_after(lang_output_section_statement_type *after)" identifier (parameter_list "(lang_output_section_statement_type *after)" ( (parameter_declaration "lang_output_section_statement_type *after" type_identifier (pointer_declarator "*after" * identifier)) ))))) (compound_statement "{\n  lang_statement_union_type *plVar1;\n  asection *paVar2;\n  bfd_section *pbVar3;\n  lang_statement_union_type *plVar4;\n  lang_statement_union_type *plVar5;\n  bool bVar6;\n  \n  plVar1 = (after->header).next;\n  bVar6 = lang_output_section_statement.head == (lang_statement_union *)after;\n  if (plVar1 == (lang_statement_union_type *)0x0) {\nswitchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;\n  }\n  plVar5 = (lang_statement_union_type *)0x0;\n  do {\n    plVar4 = plVar1;\n    switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    after = (lang_output_section_statement_type *)plVar4;\n    if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }\n  } while( true );\n}" { (declaration "lang_statement_union_type *plVar1;" type_identifier (pointer_declarator "*plVar1" * identifier) ;) (declaration "asection *paVar2;" type_identifier (pointer_declarator "*paVar2" * identifier) ;) (declaration "bfd_section *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "lang_statement_union_type *plVar4;" type_identifier (pointer_declarator "*plVar4" * identifier) ;) (declaration "lang_statement_union_type *plVar5;" type_identifier (pointer_declarator "*plVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "plVar1 = (after->header).next;" (assignment_expression "plVar1 = (after->header).next" identifier = (field_expression "(after->header).next" (parenthesized_expression "(after->header)" ( (field_expression "after->header" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "bVar6 = lang_output_section_statement.head == (lang_statement_union *)after;" (assignment_expression "bVar6 = lang_output_section_statement.head == (lang_statement_union *)after" identifier = (binary_expression "lang_output_section_statement.head == (lang_statement_union *)after" (field_expression "lang_output_section_statement.head" identifier . field_identifier) == (cast_expression "(lang_statement_union *)after" ( (type_descriptor "lang_statement_union *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (plVar1 == (lang_statement_union_type *)0x0) {\nswitchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;\n  }" if (parenthesized_expression "(plVar1 == (lang_statement_union_type *)0x0)" ( (binary_expression "plVar1 == (lang_statement_union_type *)0x0" identifier == (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nswitchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;\n  }" { (labeled_statement "switchD_00115442_caseD_10:\n    return (lang_statement_union_type **)after;" statement_identifier : (return_statement "return (lang_statement_union_type **)after;" return (cast_expression "(lang_statement_union_type **)after" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) ;)) })) (expression_statement "plVar5 = (lang_statement_union_type *)0x0;" (assignment_expression "plVar5 = (lang_statement_union_type *)0x0" identifier = (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n    plVar4 = plVar1;\n    switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    after = (lang_output_section_statement_type *)plVar4;\n    if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }\n  } while( true );" do (compound_statement "{\n    plVar4 = plVar1;\n    switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    after = (lang_output_section_statement_type *)plVar4;\n    if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }\n  }" { (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" identifier = identifier) ;) (switch_statement "switch((plVar4->header).type) {\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" switch (parenthesized_expression "((plVar4->header).type)" ( (field_expression "(plVar4->header).type" (parenthesized_expression "(plVar4->header)" ( (field_expression "plVar4->header" identifier -> field_identifier) )) . field_identifier) )) (compound_statement "{\n    case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;\n    case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;\n    case lang_input_statement_enum:\n    case lang_address_statement_enum:\n    case lang_target_statement_enum:\n    case lang_output_statement_enum:\n    case lang_group_statement_enum:\n    case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;\n    case lang_wild_statement_enum:\n    case lang_input_section_enum:\n    case lang_object_symbols_statement_enum:\n    case lang_fill_statement_enum:\n    case lang_data_statement_enum:\n    case lang_reloc_statement_enum:\n    case lang_padding_statement_enum:\n    case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" { (case_statement "case lang_output_section_statement_enum:\n      if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }\n      paVar2 = (plVar4->output_section_statement).bfd_section;\n      if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }\n      if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }\n      return (lang_statement_union_type **)after;" case identifier : (if_statement "if (plVar5 == (lang_statement_union_type *)0x0) {\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }" if (parenthesized_expression "(plVar5 == (lang_statement_union_type *)0x0)" ( (binary_expression "plVar5 == (lang_statement_union_type *)0x0" identifier == (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (lang_statement_union_type **)(lang_statement_union_type *)after;\n      }" { (return_statement "return (lang_statement_union_type **)(lang_statement_union_type *)after;" return (cast_expression "(lang_statement_union_type **)(lang_statement_union_type *)after" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (cast_expression "(lang_statement_union_type *)after" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (expression_statement "paVar2 = (plVar4->output_section_statement).bfd_section;" (assignment_expression "paVar2 = (plVar4->output_section_statement).bfd_section" identifier = (field_expression "(plVar4->output_section_statement).bfd_section" (parenthesized_expression "(plVar4->output_section_statement)" ( (field_expression "plVar4->output_section_statement" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (paVar2 == (asection *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }" if (parenthesized_expression "(paVar2 == (asection *)0x0)" ( (binary_expression "paVar2 == (asection *)0x0" identifier == (cast_expression "(asection *)0x0" ( (type_descriptor "asection *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (lang_statement_union_type **)plVar5;\n      }" { (return_statement "return (lang_statement_union_type **)plVar5;" return (cast_expression "(lang_statement_union_type **)plVar5" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) ;) })) (if_statement "if ((paVar2->map_head).link_order == (bfd_link_order *)0x0) {\n        return (lang_statement_union_type **)plVar5;\n      }" if (parenthesized_expression "((paVar2->map_head).link_order == (bfd_link_order *)0x0)" ( (binary_expression "(paVar2->map_head).link_order == (bfd_link_order *)0x0" (field_expression "(paVar2->map_head).link_order" (parenthesized_expression "(paVar2->map_head)" ( (field_expression "paVar2->map_head" identifier -> field_identifier) )) . field_identifier) == (cast_expression "(bfd_link_order *)0x0" ( (type_descriptor "bfd_link_order *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (lang_statement_union_type **)plVar5;\n      }" { (return_statement "return (lang_statement_union_type **)plVar5;" return (cast_expression "(lang_statement_union_type **)plVar5" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) ;) })) (if_statement "if ((paVar2->flags & 1) != 0) {\n        after = (lang_output_section_statement_type *)plVar5;\n      }" if (parenthesized_expression "((paVar2->flags & 1) != 0)" ( (binary_expression "(paVar2->flags & 1) != 0" (parenthesized_expression "(paVar2->flags & 1)" ( (binary_expression "paVar2->flags & 1" (field_expression "paVar2->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        after = (lang_output_section_statement_type *)plVar5;\n      }" { (expression_statement "after = (lang_output_section_statement_type *)plVar5;" (assignment_expression "after = (lang_output_section_statement_type *)plVar5" identifier = (cast_expression "(lang_output_section_statement_type *)plVar5" ( (type_descriptor "lang_output_section_statement_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (return_statement "return (lang_statement_union_type **)after;" return (cast_expression "(lang_statement_union_type **)after" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) ;)) (case_statement "case lang_assignment_statement_enum:\n      if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }\n      bVar6 = false;" case identifier : (if_statement "if ((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {\n        plVar5 = (lang_statement_union_type *)after;\n      }" if (parenthesized_expression "((((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6))))" ( (binary_expression "(((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&\n         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))" (parenthesized_expression "(((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.'))" ( (binary_expression "((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)) &&\n          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')" (parenthesized_expression "((plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8))" ( (binary_expression "(plVar5 == (lang_statement_union_type *)0x0) &&\n           (*(int *)&((plVar4->input_section).section)->next != 8)" (parenthesized_expression "(plVar5 == (lang_statement_union_type *)0x0)" ( (binary_expression "plVar5 == (lang_statement_union_type *)0x0" identifier == (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*(int *)&((plVar4->input_section).section)->next != 8)" ( (binary_expression "*(int *)&((plVar4->input_section).section)->next != 8" (pointer_expression "*(int *)&((plVar4->input_section).section)->next" * (cast_expression "(int *)&((plVar4->input_section).section)->next" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&((plVar4->input_section).section)->next" & (field_expression "((plVar4->input_section).section)->next" (parenthesized_expression "((plVar4->input_section).section)" ( (field_expression "(plVar4->input_section).section" (parenthesized_expression "(plVar4->input_section)" ( (field_expression "plVar4->input_section" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)))) != number_literal) ))) )) && (parenthesized_expression "(pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')" ( (comma_expression "pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.'" (assignment_expression "pbVar3 = ((plVar4->input_section).section)->prev" identifier = (field_expression "((plVar4->input_section).section)->prev" (parenthesized_expression "((plVar4->input_section).section)" ( (field_expression "(plVar4->input_section).section" (parenthesized_expression "(plVar4->input_section)" ( (field_expression "plVar4->input_section" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) , (binary_expression "*(char *)&pbVar3->name == '.'" (pointer_expression "*(char *)&pbVar3->name" * (cast_expression "(char *)&pbVar3->name" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pbVar3->name" & (field_expression "pbVar3->name" identifier -> field_identifier)))) == (char_literal "'.'" ' character '))) ))) )) && (parenthesized_expression "((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))" ( (parenthesized_expression "(*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6))" ( (binary_expression "*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)" (binary_expression "*(char *)((long)&pbVar3->name + 1) == '\0'" (pointer_expression "*(char *)((long)&pbVar3->name + 1)" * (cast_expression "(char *)((long)&pbVar3->name + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pbVar3->name + 1)" ( (binary_expression "(long)&pbVar3->name + 1" (cast_expression "(long)&pbVar3->name" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pbVar3->name" & (field_expression "pbVar3->name" identifier -> field_identifier))) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) && (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) ))) )) ))) )) (compound_statement "{\n        plVar5 = (lang_statement_union_type *)after;\n      }" { (expression_statement "plVar5 = (lang_statement_union_type *)after;" (assignment_expression "plVar5 = (lang_statement_union_type *)after" identifier = (cast_expression "(lang_statement_union_type *)after" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (expression_statement "bVar6 = false;" (assignment_expression "bVar6 = false" identifier = false) ;)) (case_statement "case lang_input_statement_enum:" case identifier :) (case_statement "case lang_address_statement_enum:" case identifier :) (case_statement "case lang_target_statement_enum:" case identifier :) (case_statement "case lang_output_statement_enum:" case identifier :) (case_statement "case lang_group_statement_enum:" case identifier :) (case_statement "case lang_insert_statement_enum:\n      plVar1 = (plVar4->header).next;\n      break;" case identifier : (expression_statement "plVar1 = (plVar4->header).next;" (assignment_expression "plVar1 = (plVar4->header).next" identifier = (field_expression "(plVar4->header).next" (parenthesized_expression "(plVar4->header)" ( (field_expression "plVar4->header" identifier -> field_identifier) )) . field_identifier)) ;) (break_statement "break;" break ;)) (case_statement "case lang_wild_statement_enum:" case identifier :) (case_statement "case lang_input_section_enum:" case identifier :) (case_statement "case lang_object_symbols_statement_enum:" case identifier :) (case_statement "case lang_fill_statement_enum:" case identifier :) (case_statement "case lang_data_statement_enum:" case identifier :) (case_statement "case lang_reloc_statement_enum:" case identifier :) (case_statement "case lang_padding_statement_enum:" case identifier :) (case_statement "case lang_constructors_statement_enum:\n      plVar1 = (plVar4->header).next;\n      plVar5 = (lang_statement_union_type *)0x0;\n      break;" case identifier : (expression_statement "plVar1 = (plVar4->header).next;" (assignment_expression "plVar1 = (plVar4->header).next" identifier = (field_expression "(plVar4->header).next" (parenthesized_expression "(plVar4->header)" ( (field_expression "plVar4->header" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "plVar5 = (lang_statement_union_type *)0x0;" (assignment_expression "plVar5 = (lang_statement_union_type *)0x0" identifier = (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      goto switchD_00115442_caseD_10;" default : (goto_statement "goto switchD_00115442_caseD_10;" goto statement_identifier ;)) })) (expression_statement "after = (lang_output_section_statement_type *)plVar4;" (assignment_expression "after = (lang_output_section_statement_type *)plVar4" identifier = (cast_expression "(lang_output_section_statement_type *)plVar4" ( (type_descriptor "lang_output_section_statement_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (plVar1 == (lang_statement_union_type *)0x0) {\n      return (lang_statement_union_type **)plVar4;\n    }" if (parenthesized_expression "(plVar1 == (lang_statement_union_type *)0x0)" ( (binary_expression "plVar1 == (lang_statement_union_type *)0x0" identifier == (cast_expression "(lang_statement_union_type *)0x0" ( (type_descriptor "lang_statement_union_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (lang_statement_union_type **)plVar4;\n    }" { (return_statement "return (lang_statement_union_type **)plVar4;" return (cast_expression "(lang_statement_union_type **)plVar4" ( (type_descriptor "lang_statement_union_type **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "long * FUN_00115410(long *param_1)\n\n{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}\n\n" (function_definition "long * FUN_00115410(long *param_1)\n\n{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00115410(long *param_1)" * (function_declarator "FUN_00115410(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) )))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (expression_statement "bVar6 = DAT_002a6760 == param_1;" (assignment_expression "bVar6 = DAT_002a6760 == param_1" identifier = (binary_expression "DAT_002a6760 == param_1" identifier == identifier)) ;) (if_statement "if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" if (parenthesized_expression "((long *)*param_1 == (long *)0x0)" ( (binary_expression "(long *)*param_1 == (long *)0x0" (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" { (labeled_statement "switchD_00115442_caseD_10:\n    return param_1;" statement_identifier : (return_statement "return param_1;" return identifier ;)) })) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "plVar1 = (long *)*param_1;" (assignment_expression "plVar1 = (long *)*param_1" identifier = (cast_expression "(long *)*param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (do_statement "do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );" do (compound_statement "{\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  }" { (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" identifier = identifier) ;) (switch_statement "switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" switch (parenthesized_expression "((int)plVar4[1])" ( (cast_expression "(int)plVar4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) )) (compound_statement "{\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" { (case_statement "case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;" case number_literal : (if_statement "if (plVar5 == (long *)0x0) {\n        return param_1;\n      }" if (parenthesized_expression "(plVar5 == (long *)0x0)" ( (binary_expression "plVar5 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return param_1;\n      }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "lVar2 = plVar4[7];" (assignment_expression "lVar2 = plVar4[7]" identifier = (subscript_expression "plVar4[7]" identifier [ number_literal ])) ;) (if_statement "if (lVar2 == 0) {\n        return plVar5;\n      }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        return plVar5;\n      }" { (return_statement "return plVar5;" return identifier ;) })) (if_statement "if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }" if (parenthesized_expression "(*(long *)(lVar2 + 0x108) == 0)" ( (binary_expression "*(long *)(lVar2 + 0x108) == 0" (pointer_expression "*(long *)(lVar2 + 0x108)" * (cast_expression "(long *)(lVar2 + 0x108)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x108)" ( (binary_expression "lVar2 + 0x108" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return plVar5;\n      }" { (return_statement "return plVar5;" return identifier ;) })) (if_statement "if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }" if (parenthesized_expression "((*(byte *)(lVar2 + 0x20) & 1) != 0)" ( (binary_expression "(*(byte *)(lVar2 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar2 + 0x20) & 1)" ( (binary_expression "*(byte *)(lVar2 + 0x20) & 1" (pointer_expression "*(byte *)(lVar2 + 0x20)" * (cast_expression "(byte *)(lVar2 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        param_1 = plVar5;\n      }" { (expression_statement "param_1 = plVar5;" (assignment_expression "param_1 = plVar5" identifier = identifier) ;) })) (return_statement "return param_1;" return identifier ;)) (case_statement "case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;" case number_literal : (if_statement "if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }" if (parenthesized_expression "((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6))))" ( (binary_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))" (parenthesized_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'))" ( (binary_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" (parenthesized_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8))" ( (binary_expression "(plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)" (parenthesized_expression "(plVar5 == (long *)0x0)" ( (binary_expression "plVar5 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*(int *)(plVar4[2] + 0x10) != 8)" ( (binary_expression "*(int *)(plVar4[2] + 0x10) != 8" (pointer_expression "*(int *)(plVar4[2] + 0x10)" * (cast_expression "(int *)(plVar4[2] + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x10)" ( (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) != number_literal) ))) )) && (parenthesized_expression "(pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" ( (comma_expression "pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'" (assignment_expression "pcVar3 = *(char **)(plVar4[2] + 0x18)" identifier = (pointer_expression "*(char **)(plVar4[2] + 0x18)" * (cast_expression "(char **)(plVar4[2] + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(plVar4[2] + 0x18)" ( (binary_expression "plVar4[2] + 0x18" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) , (binary_expression "*pcVar3 == '.'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'.'" ' character '))) ))) )) && (parenthesized_expression "((pcVar3[1] == '\0' && (!bVar6)))" ( (parenthesized_expression "(pcVar3[1] == '\0' && (!bVar6))" ( (binary_expression "pcVar3[1] == '\0' && (!bVar6)" (binary_expression "pcVar3[1] == '\0'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) && (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) ))) )) ))) )) (compound_statement "{\n        plVar5 = param_1;\n      }" { (expression_statement "plVar5 = param_1;" (assignment_expression "plVar5 = param_1" identifier = identifier) ;) })) (expression_statement "bVar6 = false;" (assignment_expression "bVar6 = false" identifier = false) ;)) (case_statement "case 2:" case number_literal :) (case_statement "case 3:" case number_literal :) (case_statement "case 10:" case number_literal :) (case_statement "case 0xb:" case number_literal :) (case_statement "case 0xd:" case number_literal :) (case_statement "case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;" case number_literal : (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (break_statement "break;" break ;)) (case_statement "case 4:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:" case number_literal :) (case_statement "case 0xc:" case number_literal :) (case_statement "case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;" case number_literal : (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) ;) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (break_statement "break;" break ;)) (case_statement "default:\n      goto switchD_00115442_caseD_10;" default : (goto_statement "goto switchD_00115442_caseD_10;" goto statement_identifier ;)) })) (expression_statement "param_1 = plVar4;" (assignment_expression "param_1 = plVar4" identifier = identifier) ;) (if_statement "if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }" if (parenthesized_expression "(plVar1 == (long *)0x0)" ( (binary_expression "plVar1 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return plVar4;\n    }" { (return_statement "return plVar4;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) )))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (return_statement return IDENT ;)) })) (expression_statement (assignment_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 *)) ) (pointer_expression * IDENT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (switch_statement switch (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) )) (compound_statement { (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (return_statement return IDENT ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != LIT) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) , (binary_expression (pointer_expression * IDENT) == (char_literal ' character '))) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' escape_sequence ')) && (parenthesized_expression ( (unary_expression ! IDENT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (break_statement break ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (break_statement break ;)) (case_statement default : (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "long * FUN_00115410(long *param_1)\n\n{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_00115410(long *param_1)" (* "*") (function_declarator "FUN_00115410(long *param_1)" (identifier "FUN_00115410") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")")))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  char *pcVar3;\n  long *plVar4;\n  long *plVar5;\n  bool bVar6;\n  \n  bVar6 = DAT_002a6760 == param_1;\n  if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }\n  plVar5 = (long *)0x0;\n  plVar1 = (long *)*param_1;\n  do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (declaration "bool bVar6;" (primitive_type "bool") (identifier "bVar6") (; ";")) (expression_statement "bVar6 = DAT_002a6760 == param_1;" (assignment_expression "bVar6 = DAT_002a6760 == param_1" (identifier "bVar6") (= "=") (binary_expression "DAT_002a6760 == param_1" (identifier "DAT_002a6760") (== "==") (identifier "param_1"))) (; ";")) (if_statement "if ((long *)*param_1 == (long *)0x0) {\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" (if "if") (parenthesized_expression "((long *)*param_1 == (long *)0x0)" (( "(") (binary_expression "(long *)*param_1 == (long *)0x0" (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nswitchD_00115442_caseD_10:\n    return param_1;\n  }" ({ "{") (labeled_statement "switchD_00115442_caseD_10:\n    return param_1;" (statement_identifier "switchD_00115442_caseD_10") (: ":") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";"))) (} "}"))) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" (identifier "plVar5") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "plVar1 = (long *)*param_1;" (assignment_expression "plVar1 = (long *)*param_1" (identifier "plVar1") (= "=") (cast_expression "(long *)*param_1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (do_statement "do {\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    plVar4 = plVar1;\n    switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }\n    param_1 = plVar4;\n    if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }\n  }" ({ "{") (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" (identifier "plVar4") (= "=") (identifier "plVar1")) (; ";")) (switch_statement "switch((int)plVar4[1]) {\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" (switch "switch") (parenthesized_expression "((int)plVar4[1])" (( "(") (cast_expression "(int)plVar4[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar4[1]" (identifier "plVar4") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n    case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;\n    case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;\n    case 2:\n    case 3:\n    case 10:\n    case 0xb:\n    case 0xd:\n    case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;\n    case 4:\n    case 5:\n    case 6:\n    case 7:\n    case 8:\n    case 9:\n    case 0xc:\n    case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;\n    default:\n      goto switchD_00115442_caseD_10;\n    }" ({ "{") (case_statement "case 0:\n      if (plVar5 == (long *)0x0) {\n        return param_1;\n      }\n      lVar2 = plVar4[7];\n      if (lVar2 == 0) {\n        return plVar5;\n      }\n      if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }\n      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }\n      return param_1;" (case "case") (number_literal "0") (: ":") (if_statement "if (plVar5 == (long *)0x0) {\n        return param_1;\n      }" (if "if") (parenthesized_expression "(plVar5 == (long *)0x0)" (( "(") (binary_expression "plVar5 == (long *)0x0" (identifier "plVar5") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return param_1;\n      }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "lVar2 = plVar4[7];" (assignment_expression "lVar2 = plVar4[7]" (identifier "lVar2") (= "=") (subscript_expression "plVar4[7]" (identifier "plVar4") ([ "[") (number_literal "7") (] "]"))) (; ";")) (if_statement "if (lVar2 == 0) {\n        return plVar5;\n      }" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return plVar5;\n      }" ({ "{") (return_statement "return plVar5;" (return "return") (identifier "plVar5") (; ";")) (} "}"))) (if_statement "if (*(long *)(lVar2 + 0x108) == 0) {\n        return plVar5;\n      }" (if "if") (parenthesized_expression "(*(long *)(lVar2 + 0x108) == 0)" (( "(") (binary_expression "*(long *)(lVar2 + 0x108) == 0" (pointer_expression "*(long *)(lVar2 + 0x108)" (* "*") (cast_expression "(long *)(lVar2 + 0x108)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x108)" (( "(") (binary_expression "lVar2 + 0x108" (identifier "lVar2") (+ "+") (number_literal "0x108")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return plVar5;\n      }" ({ "{") (return_statement "return plVar5;" (return "return") (identifier "plVar5") (; ";")) (} "}"))) (if_statement "if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {\n        param_1 = plVar5;\n      }" (if "if") (parenthesized_expression "((*(byte *)(lVar2 + 0x20) & 1) != 0)" (( "(") (binary_expression "(*(byte *)(lVar2 + 0x20) & 1) != 0" (parenthesized_expression "(*(byte *)(lVar2 + 0x20) & 1)" (( "(") (binary_expression "*(byte *)(lVar2 + 0x20) & 1" (pointer_expression "*(byte *)(lVar2 + 0x20)" (* "*") (cast_expression "(byte *)(lVar2 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        param_1 = plVar5;\n      }" ({ "{") (expression_statement "param_1 = plVar5;" (assignment_expression "param_1 = plVar5" (identifier "param_1") (= "=") (identifier "plVar5")) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";"))) (case_statement "case 1:\n      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }\n      bVar6 = false;" (case "case") (number_literal "1") (: ":") (if_statement "if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))) {\n        plVar5 = param_1;\n      }" (if "if") (parenthesized_expression "((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6))))" (( "(") (binary_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&\n         ((pcVar3[1] == '\0' && (!bVar6)))" (parenthesized_expression "(((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'))" (( "(") (binary_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&\n          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" (parenthesized_expression "((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8))" (( "(") (binary_expression "(plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)" (parenthesized_expression "(plVar5 == (long *)0x0)" (( "(") (binary_expression "plVar5 == (long *)0x0" (identifier "plVar5") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(plVar4[2] + 0x10) != 8)" (( "(") (binary_expression "*(int *)(plVar4[2] + 0x10) != 8" (pointer_expression "*(int *)(plVar4[2] + 0x10)" (* "*") (cast_expression "(int *)(plVar4[2] + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x10)" (( "(") (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "8")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')" (( "(") (comma_expression "pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.'" (assignment_expression "pcVar3 = *(char **)(plVar4[2] + 0x18)" (identifier "pcVar3") (= "=") (pointer_expression "*(char **)(plVar4[2] + 0x18)" (* "*") (cast_expression "(char **)(plVar4[2] + 0x18)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(plVar4[2] + 0x18)" (( "(") (binary_expression "plVar4[2] + 0x18" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x18")) () ")"))))) (, ",") (binary_expression "*pcVar3 == '.'" (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) (== "==") (char_literal "'.'" (' "'") (character ".") (' "'")))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((pcVar3[1] == '\0' && (!bVar6)))" (( "(") (parenthesized_expression "(pcVar3[1] == '\0' && (!bVar6))" (( "(") (binary_expression "pcVar3[1] == '\0' && (!bVar6)" (binary_expression "pcVar3[1] == '\0'" (subscript_expression "pcVar3[1]" (identifier "pcVar3") ([ "[") (number_literal "1") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (&& "&&") (parenthesized_expression "(!bVar6)" (( "(") (unary_expression "!bVar6" (! "!") (identifier "bVar6")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n        plVar5 = param_1;\n      }" ({ "{") (expression_statement "plVar5 = param_1;" (assignment_expression "plVar5 = param_1" (identifier "plVar5") (= "=") (identifier "param_1")) (; ";")) (} "}"))) (expression_statement "bVar6 = false;" (assignment_expression "bVar6 = false" (identifier "bVar6") (= "=") (false "false")) (; ";"))) (case_statement "case 2:" (case "case") (number_literal "2") (: ":")) (case_statement "case 3:" (case "case") (number_literal "3") (: ":")) (case_statement "case 10:" (case "case") (number_literal "10") (: ":")) (case_statement "case 0xb:" (case "case") (number_literal "0xb") (: ":")) (case_statement "case 0xd:" (case "case") (number_literal "0xd") (: ":")) (case_statement "case 0xe:\n      plVar1 = (long *)*plVar4;\n      break;" (case "case") (number_literal "0xe") (: ":") (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" (identifier "plVar1") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:" (case "case") (number_literal "4") (: ":")) (case_statement "case 5:" (case "case") (number_literal "5") (: ":")) (case_statement "case 6:" (case "case") (number_literal "6") (: ":")) (case_statement "case 7:" (case "case") (number_literal "7") (: ":")) (case_statement "case 8:" (case "case") (number_literal "8") (: ":")) (case_statement "case 9:" (case "case") (number_literal "9") (: ":")) (case_statement "case 0xc:" (case "case") (number_literal "0xc") (: ":")) (case_statement "case 0xf:\n      plVar1 = (long *)*plVar4;\n      plVar5 = (long *)0x0;\n      break;" (case "case") (number_literal "0xf") (: ":") (expression_statement "plVar1 = (long *)*plVar4;" (assignment_expression "plVar1 = (long *)*plVar4" (identifier "plVar1") (= "=") (cast_expression "(long *)*plVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) (; ";")) (expression_statement "plVar5 = (long *)0x0;" (assignment_expression "plVar5 = (long *)0x0" (identifier "plVar5") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "default:\n      goto switchD_00115442_caseD_10;" (default "default") (: ":") (goto_statement "goto switchD_00115442_caseD_10;" (goto "goto") (statement_identifier "switchD_00115442_caseD_10") (; ";"))) (} "}"))) (expression_statement "param_1 = plVar4;" (assignment_expression "param_1 = plVar4" (identifier "param_1") (= "=") (identifier "plVar4")) (; ";")) (if_statement "if (plVar1 == (long *)0x0) {\n      return plVar4;\n    }" (if "if") (parenthesized_expression "(plVar1 == (long *)0x0)" (( "(") (binary_expression "plVar1 == (long *)0x0" (identifier "plVar1") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return plVar4;\n    }" ({ "{") (return_statement "return plVar4;" (return "return") (identifier "plVar4") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

type_1 ** function_1(type_2 *after)

{
  type_1 *var_1;
  type_3 *var_3;
  type_4 *pbVar3;
  type_1 *plVar4;
  type_1 *var_2;
  bool bVar6;
  
  var_1 = (after->header).next;
  bVar6 = lang_output_section_statement.head == (type_5 *)after;
  if (var_1 == (type_1 *)0x0) {
switchD_00115442_caseD_10:
    return (type_1 **)after;
  }
  var_2 = (type_1 *)0x0;
  do {
    plVar4 = var_1;
    switch((plVar4->header).type) {
    case lang_output_section_statement_enum:
      if (var_2 == (type_1 *)0x0) {
        return (type_1 **)(type_1 *)after;
      }
      var_3 = (plVar4->output_section_statement).type_4;
      if (var_3 == (type_3 *)0x0) {
        return (type_1 **)var_2;
      }
      if ((var_3->map_head).link_order == (type_6 *)0x0) {
        return (type_1 **)var_2;
      }
      if ((var_3->flags & 1) != 0) {
        after = (type_2 *)var_2;
      }
      return (type_1 **)after;
    case lang_assignment_statement_enum:
      if ((((var_2 == (type_1 *)0x0) &&
           (*(int *)&((plVar4->input_section).section)->next != 8)) &&
          (pbVar3 = ((plVar4->input_section).section)->prev, *(char *)&pbVar3->name == '.')) &&
         ((*(char *)((long)&pbVar3->name + 1) == '\0' && (!bVar6)))) {
        var_2 = (type_1 *)after;
      }
      bVar6 = false;
    case lang_input_statement_enum:
    case lang_address_statement_enum:
    case lang_target_statement_enum:
    case lang_output_statement_enum:
    case lang_group_statement_enum:
    case lang_insert_statement_enum:
      var_1 = (plVar4->header).next;
      break;
    case lang_wild_statement_enum:
    case lang_input_section_enum:
    case lang_object_symbols_statement_enum:
    case lang_fill_statement_enum:
    case lang_data_statement_enum:
    case lang_reloc_statement_enum:
    case lang_padding_statement_enum:
    case lang_constructors_statement_enum:
      var_1 = (plVar4->header).next;
      var_2 = (type_1 *)0x0;
      break;
    default:
      goto switchD_00115442_caseD_10;
    }
    after = (type_2 *)plVar4;
    if (var_1 == (type_1 *)0x0) {
      return (type_1 **)plVar4;
    }
  } while( true );
}


(translation_unit (function_definition type: (sized_type_specifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_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: (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))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (switch_statement condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))) body: (compound_statement (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (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))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (return_statement (identifier))) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (character))))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence))) right: (parenthesized_expression (unary_expression argument: (identifier)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (false)))) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (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))))) (break_statement)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (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))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (break_statement)) (case_statement (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier))))) condition: (parenthesized_expression (true))))))

long * MASKED(long *param_1)

{
  long *plVar1;
  long lVar2;
  char *pcVar3;
  long *plVar4;
  long *plVar5;
  bool bVar6;
  
  bVar6 = DAT_002a6760 == param_1;
  if ((long *)*param_1 == (long *)0x0) {
switchD_00115442_caseD_10:
    return param_1;
  }
  plVar5 = (long *)0x0;
  plVar1 = (long *)*param_1;
  do {
    plVar4 = plVar1;
    switch((int)plVar4[1]) {
    case 0:
      if (plVar5 == (long *)0x0) {
        return param_1;
      }
      lVar2 = plVar4[7];
      if (lVar2 == 0) {
        return plVar5;
      }
      if (*(long *)(lVar2 + 0x108) == 0) {
        return plVar5;
      }
      if ((*(byte *)(lVar2 + 0x20) & 1) != 0) {
        param_1 = plVar5;
      }
      return param_1;
    case 1:
      if ((((plVar5 == (long *)0x0) && (*(int *)(plVar4[2] + 0x10) != 8)) &&
          (pcVar3 = *(char **)(plVar4[2] + 0x18), *pcVar3 == '.')) &&
         ((pcVar3[1] == '\0' && (!bVar6)))) {
        plVar5 = param_1;
      }
      bVar6 = false;
    case 2:
    case 3:
    case 10:
    case 0xb:
    case 0xd:
    case 0xe:
      plVar1 = (long *)*plVar4;
      break;
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 0xc:
    case 0xf:
      plVar1 = (long *)*plVar4;
      plVar5 = (long *)0x0;
      break;
    default:
      goto switchD_00115442_caseD_10;
    }
    param_1 = plVar4;
    if (plVar1 == (long *)0x0) {
      return plVar4;
    }
  } while( true );
}

