
/* WARNING: Removing unreachable block (ram,0x00296ed8) */

bool gold::decompress_input_section
               (uchar *compressed_data,ulong compressed_size,uchar *uncompressed_data,
               ulong uncompressed_size,int size,bool big_endian,Elf_Xword sh_flags)

{
  ulong uVar1;
  bool bVar2;
  byte *pbVar3;
  long lVar4;
  byte *pbVar5;
  bool bVar6;
  
  if ((sh_flags & 0x800) != 0) {
    if (size == 0x20) {
      if (big_endian) {
        if (*(int *)compressed_data != 0x1000000) {
          return false;
        }
      }
      else if (*(int *)compressed_data != 1) {
        return false;
      }
      lVar4 = 0xc;
    }
    else {
      if (size != 0x40) {
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");
      }
      if (big_endian) {
        return false;
      }
      if (*(int *)compressed_data != 1) {
        return false;
      }
      lVar4 = 0x18;
    }
    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,
                            uncompressed_size);
    return bVar2;
  }
  bVar2 = compressed_size < 0xb;
  bVar6 = compressed_size == 0xb;
  if (0xb < compressed_size) {
    lVar4 = 4;
    pbVar3 = compressed_data;
    pbVar5 = &DAT_0038ae77;
    do {
      if (lVar4 == 0) break;
      lVar4 = lVar4 + -1;
      bVar2 = *pbVar3 < *pbVar5;
      bVar6 = *pbVar3 == *pbVar5;
      pbVar3 = pbVar3 + 1;
      pbVar5 = pbVar5 + 1;
    } while (bVar6);
    if ((!bVar2 && !bVar6) == bVar2) {
      uVar1 = *(ulong *)(compressed_data + 4);
      if (uncompressed_size !=
          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |
           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |
           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {
                    /* WARNING: Subroutine does not return */
        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");
      }
      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,
                              uncompressed_size);
      return bVar2;
    }
  }
  return false;
}



/* WARNING: Removing unreachable block (ram,0x00296ed8) */

undefined8
FUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,
            ulong param_7)

{
  ulong uVar1;
  undefined8 uVar2;
  byte *pbVar3;
  long lVar4;
  byte *pbVar5;
  bool bVar6;
  bool bVar7;
  
  if ((param_7 & 0x800) != 0) {
    if (param_5 == 0x20) {
      if (param_6 == '\0') {
        if (*(int *)param_1 != 1) {
          return 0;
        }
      }
      else if (*(int *)param_1 != 0x1000000) {
        return 0;
      }
      lVar4 = 0xc;
    }
    else {
      if (param_5 != 0x40) {
                    /* WARNING: Subroutine does not return */
        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");
      }
      if (param_6 != '\0') {
        return 0;
      }
      if (*(int *)param_1 != 1) {
        return 0;
      }
      lVar4 = 0x18;
    }
    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);
    return uVar2;
  }
  bVar6 = param_2 < 0xb;
  bVar7 = param_2 == 0xb;
  if (0xb < param_2) {
    lVar4 = 4;
    pbVar3 = param_1;
    pbVar5 = &DAT_0038ae77;
    do {
      if (lVar4 == 0) break;
      lVar4 = lVar4 + -1;
      bVar6 = *pbVar3 < *pbVar5;
      bVar7 = *pbVar3 == *pbVar5;
      pbVar3 = pbVar3 + 1;
      pbVar5 = pbVar5 + 1;
    } while (bVar7);
    if ((!bVar6 && !bVar7) == bVar6) {
      uVar1 = *(ulong *)(param_1 + 4);
      if (param_4 !=
          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |
           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |
           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {
                    /* WARNING: Subroutine does not return */
        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");
      }
      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);
      return uVar2;
    }
  }
  return 0;
}


SUB RSP,0x8
MOV R10,RDI
MOV RAX,RSI
MOV R11,RCX
TEST qword ptr [RSP + 0x10],0x800
JZ 0x00296e70
CMP R8D,0x20
JZ 0x00296eb8
CMP R8D,0x40
JNZ 0x00296f07
MOV ECX,dword ptr [RDI]
TEST R9B,R9B
JNZ 0x00296ed0
CMP ECX,0x1
JNZ 0x00296ec7
MOV EDI,0x18
SUB RAX,RDI
MOV RCX,R11
ADD RDI,R10
ADD RSP,0x8
MOV RSI,RAX
JMP 0x00296620
CMP RSI,0xb
JBE 0x00296ec7
MOV ECX,0x4
LEA RDI,[0x38ae77]
MOV RSI,R10
CMPSB.REPE RDI,RSI
SETA CL
SBB CL,0x0
TEST CL,CL
JNZ 0x00296ec7
MOV RCX,qword ptr [R10 + 0x4]
BSWAP RCX
CMP R11,RCX
JNZ 0x00296eef
LEA RSI,[RAX + -0xc]
LEA RDI,[R10 + 0xc]
MOV RCX,R11
ADD RSP,0x8
JMP 0x00296620
MOV ECX,dword ptr [RDI]
TEST R9B,R9B
JZ 0x00296ee0
CMP ECX,0x1000000
JZ 0x00296ee5
XOR EAX,EAX
ADD RSP,0x8
RET
BSWAP RCX
CMP ECX,0x1
JNZ 0x00296ec7
JMP 0x00296e4c
CMP ECX,0x1
JNZ 0x00296ec7
MOV EDI,0xc
JMP 0x00296e51
LEA RDX,[0x38afa0]
MOV ESI,0xcb
LEA RDI,[0x38ae80]
CALL 0x0017c650
LEA RDX,[0x38afa0]
MOV ESI,0xb8
LEA RDI,[0x38ae80]
CALL 0x0017c650
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00296ed8) */\n\nundefined8\nFUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "undefined8\nFUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" identifier (parameter_list "(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "char param_6" primitive_type identifier) , (parameter_declaration "ulong param_7" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" if (parenthesized_expression "((param_7 & 0x800) != 0)" ( (binary_expression "(param_7 & 0x800) != 0" (parenthesized_expression "(param_7 & 0x800)" ( (binary_expression "param_7 & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" { (if_statement "if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" if (parenthesized_expression "(param_5 == 0x20)" ( (binary_expression "param_5 == 0x20" identifier == number_literal) )) (compound_statement "{\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }" { (if_statement "if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" if (parenthesized_expression "(param_6 == '\0')" ( (binary_expression "param_6 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }" { (if_statement "if (*(int *)param_1 != 1) {\n          return 0;\n        }" if (parenthesized_expression "(*(int *)param_1 != 1)" ( (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" else (if_statement "if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)param_1 != 0x1000000)" ( (binary_expression "*(int *)param_1 != 0x1000000" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })))) (expression_statement "lVar4 = 0xc;" (assignment_expression "lVar4 = 0xc" identifier = number_literal) ;) }) (else_clause "else {\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" else (compound_statement "{\n      if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" { (if_statement "if (param_5 != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" if (parenthesized_expression "(param_5 != 0x40)" ( (binary_expression "param_5 != 0x40" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" { comment (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (if_statement "if (param_6 != '\0') {\n        return 0;\n      }" if (parenthesized_expression "(param_6 != '\0')" ( (binary_expression "param_6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)param_1 != 1) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)param_1 != 1)" ( (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar4 = 0x18;" (assignment_expression "lVar4 = 0x18" identifier = number_literal) ;) }))) (expression_statement "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" identifier = (call_expression "FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" identifier (argument_list "(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" ( (binary_expression "param_1 + lVar4" identifier + identifier) , (binary_expression "param_2 - lVar4" identifier - identifier) , identifier , identifier )))) ;) (return_statement "return uVar2;" return identifier ;) })) (expression_statement "bVar6 = param_2 < 0xb;" (assignment_expression "bVar6 = param_2 < 0xb" identifier = (binary_expression "param_2 < 0xb" identifier < number_literal)) ;) (expression_statement "bVar7 = param_2 == 0xb;" (assignment_expression "bVar7 = param_2 == 0xb" identifier = (binary_expression "param_2 == 0xb" identifier == number_literal)) ;) (if_statement "if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" if (parenthesized_expression "(0xb < param_2)" ( (binary_expression "0xb < param_2" number_literal < identifier) )) (compound_statement "{\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" { (expression_statement "lVar4 = 4;" (assignment_expression "lVar4 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = param_1;" (assignment_expression "pbVar3 = param_1" identifier = identifier) ;) (expression_statement "pbVar5 = &DAT_0038ae77;" (assignment_expression "pbVar5 = &DAT_0038ae77" identifier = (pointer_expression "&DAT_0038ae77" & identifier)) ;) (do_statement "do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);" do (compound_statement "{\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (lVar4 == 0) break;" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar4 = lVar4 + -1;" (assignment_expression "lVar4 = lVar4 + -1" identifier = (binary_expression "lVar4 + -1" identifier + number_literal)) ;) (expression_statement "bVar6 = *pbVar3 < *pbVar5;" (assignment_expression "bVar6 = *pbVar3 < *pbVar5" identifier = (binary_expression "*pbVar3 < *pbVar5" (pointer_expression "*pbVar3" * identifier) < (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "bVar7 = *pbVar3 == *pbVar5;" (assignment_expression "bVar7 = *pbVar3 == *pbVar5" identifier = (binary_expression "*pbVar3 == *pbVar5" (pointer_expression "*pbVar3" * identifier) == (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "pbVar3 = pbVar3 + 1;" (assignment_expression "pbVar3 = pbVar3 + 1" identifier = (binary_expression "pbVar3 + 1" identifier + number_literal)) ;) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar7)" ( identifier )) ;) (if_statement "if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" if (parenthesized_expression "((!bVar6 && !bVar7) == bVar6)" ( (binary_expression "(!bVar6 && !bVar7) == bVar6" (parenthesized_expression "(!bVar6 && !bVar7)" ( (binary_expression "!bVar6 && !bVar7" (unary_expression "!bVar6" ! identifier) && (unary_expression "!bVar7" ! identifier)) )) == identifier) )) (compound_statement "{\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" { (expression_statement "uVar1 = *(ulong *)(param_1 + 4);" (assignment_expression "uVar1 = *(ulong *)(param_1 + 4)" identifier = (pointer_expression "*(ulong *)(param_1 + 4)" * (cast_expression "(ulong *)(param_1 + 4)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (if_statement "if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" if (parenthesized_expression "(param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38))" ( (binary_expression "param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" identifier != (parenthesized_expression "(uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" ( (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28" (binary_expression "uVar1 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar1 & 0xff000000000000)" ( (binary_expression "uVar1 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar1 & 0xff0000000000)" ( (binary_expression "uVar1 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00000000) >> 8" (parenthesized_expression "(uVar1 & 0xff00000000)" ( (binary_expression "uVar1 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff000000) << 8" (parenthesized_expression "(uVar1 & 0xff000000)" ( (binary_expression "uVar1 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff0000) << 0x18" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff00) << 0x28" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x38" identifier << number_literal)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" { comment (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (expression_statement "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" identifier = (call_expression "FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" identifier (argument_list "(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) , (binary_expression "param_2 - 0xc" identifier - number_literal) , identifier , identifier )))) ;) (return_statement "return uVar2;" return identifier ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00296ed8) */\n\nbool gold::decompress_input_section\n               (uchar *compressed_data,ulong compressed_size,uchar *uncompressed_data,\n               ulong uncompressed_size,int size,bool big_endian,Elf_Xword sh_flags)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  \n  if ((sh_flags & 0x800) != 0) {\n    if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }\n    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);\n    return bVar2;\n  }\n  bVar2 = compressed_size < 0xb;\n  bVar6 = compressed_size == 0xb;\n  if (0xb < compressed_size) {\n    lVar4 = 4;\n    pbVar3 = compressed_data;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);\n    if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }\n  }\n  return false;\n}\n\n" comment (function_definition "bool gold::decompress_input_section\n               (uchar *compressed_data,ulong compressed_size,uchar *uncompressed_data,\n               ulong uncompressed_size,int size,bool big_endian,Elf_Xword sh_flags)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  \n  if ((sh_flags & 0x800) != 0) {\n    if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }\n    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);\n    return bVar2;\n  }\n  bVar2 = compressed_size < 0xb;\n  bVar6 = compressed_size == 0xb;\n  if (0xb < compressed_size) {\n    lVar4 = 4;\n    pbVar3 = compressed_data;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);\n    if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }\n  }\n  return false;\n}" primitive_type (ERROR "gold::" identifier : :) (function_declarator "decompress_input_section\n               (uchar *compressed_data,ulong compressed_size,uchar *uncompressed_data,\n               ulong uncompressed_size,int size,bool big_endian,Elf_Xword sh_flags)" identifier (parameter_list "(uchar *compressed_data,ulong compressed_size,uchar *uncompressed_data,\n               ulong uncompressed_size,int size,bool big_endian,Elf_Xword sh_flags)" ( (parameter_declaration "uchar *compressed_data" type_identifier (pointer_declarator "*compressed_data" * identifier)) , (parameter_declaration "ulong compressed_size" type_identifier identifier) , (parameter_declaration "uchar *uncompressed_data" type_identifier (pointer_declarator "*uncompressed_data" * identifier)) , (parameter_declaration "ulong uncompressed_size" type_identifier identifier) , (parameter_declaration "int size" primitive_type identifier) , (parameter_declaration "bool big_endian" primitive_type identifier) , (parameter_declaration "Elf_Xword sh_flags" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  bool bVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  \n  if ((sh_flags & 0x800) != 0) {\n    if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }\n    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);\n    return bVar2;\n  }\n  bVar2 = compressed_size < 0xb;\n  bVar6 = compressed_size == 0xb;\n  if (0xb < compressed_size) {\n    lVar4 = 4;\n    pbVar3 = compressed_data;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);\n    if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }\n  }\n  return false;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (if_statement "if ((sh_flags & 0x800) != 0) {\n    if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }\n    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);\n    return bVar2;\n  }" if (parenthesized_expression "((sh_flags & 0x800) != 0)" ( (binary_expression "(sh_flags & 0x800) != 0" (parenthesized_expression "(sh_flags & 0x800)" ( (binary_expression "sh_flags & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }\n    bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);\n    return bVar2;\n  }" { (if_statement "if (size == 0x20) {\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }" if (parenthesized_expression "(size == 0x20)" ( (binary_expression "size == 0x20" identifier == number_literal) )) (compound_statement "{\n      if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0xc;\n    }" { (if_statement "if (big_endian) {\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }\n      else if (*(int *)compressed_data != 1) {\n        return false;\n      }" if (parenthesized_expression "(big_endian)" ( identifier )) (compound_statement "{\n        if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }\n      }" { (if_statement "if (*(int *)compressed_data != 0x1000000) {\n          return false;\n        }" if (parenthesized_expression "(*(int *)compressed_data != 0x1000000)" ( (binary_expression "*(int *)compressed_data != 0x1000000" (pointer_expression "*(int *)compressed_data" * (cast_expression "(int *)compressed_data" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n          return false;\n        }" { (return_statement "return false;" return false ;) })) }) (else_clause "else if (*(int *)compressed_data != 1) {\n        return false;\n      }" else (if_statement "if (*(int *)compressed_data != 1) {\n        return false;\n      }" if (parenthesized_expression "(*(int *)compressed_data != 1)" ( (binary_expression "*(int *)compressed_data != 1" (pointer_expression "*(int *)compressed_data" * (cast_expression "(int *)compressed_data" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })))) (expression_statement "lVar4 = 0xc;" (assignment_expression "lVar4 = 0xc" identifier = number_literal) ;) }) (else_clause "else {\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }" else (compound_statement "{\n      if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (big_endian) {\n        return false;\n      }\n      if (*(int *)compressed_data != 1) {\n        return false;\n      }\n      lVar4 = 0x18;\n    }" { (if_statement "if (size != 0x40) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" if (parenthesized_expression "(size != 0x40)" ( (binary_expression "size != 0x40" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" { comment (expression_statement "do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section");" (call_expression "do_gold_unreachable("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (if_statement "if (big_endian) {\n        return false;\n      }" if (parenthesized_expression "(big_endian)" ( identifier )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (if_statement "if (*(int *)compressed_data != 1) {\n        return false;\n      }" if (parenthesized_expression "(*(int *)compressed_data != 1)" ( (binary_expression "*(int *)compressed_data != 1" (pointer_expression "*(int *)compressed_data" * (cast_expression "(int *)compressed_data" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "lVar4 = 0x18;" (assignment_expression "lVar4 = 0x18" identifier = number_literal) ;) }))) (expression_statement "bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size);" (assignment_expression "bVar2 = zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size)" identifier = (call_expression "zlib_decompress(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size)" identifier (argument_list "(compressed_data + lVar4,compressed_size - lVar4,uncompressed_data,\n                            uncompressed_size)" ( (binary_expression "compressed_data + lVar4" identifier + identifier) , (binary_expression "compressed_size - lVar4" identifier - identifier) , identifier , identifier )))) ;) (return_statement "return bVar2;" return identifier ;) })) (expression_statement "bVar2 = compressed_size < 0xb;" (assignment_expression "bVar2 = compressed_size < 0xb" identifier = (binary_expression "compressed_size < 0xb" identifier < number_literal)) ;) (expression_statement "bVar6 = compressed_size == 0xb;" (assignment_expression "bVar6 = compressed_size == 0xb" identifier = (binary_expression "compressed_size == 0xb" identifier == number_literal)) ;) (if_statement "if (0xb < compressed_size) {\n    lVar4 = 4;\n    pbVar3 = compressed_data;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);\n    if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }\n  }" if (parenthesized_expression "(0xb < compressed_size)" ( (binary_expression "0xb < compressed_size" number_literal < identifier) )) (compound_statement "{\n    lVar4 = 4;\n    pbVar3 = compressed_data;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);\n    if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }\n  }" { (expression_statement "lVar4 = 4;" (assignment_expression "lVar4 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = compressed_data;" (assignment_expression "pbVar3 = compressed_data" identifier = identifier) ;) (expression_statement "pbVar5 = &DAT_0038ae77;" (assignment_expression "pbVar5 = &DAT_0038ae77" identifier = (pointer_expression "&DAT_0038ae77" & identifier)) ;) (do_statement "do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar6);" do (compound_statement "{\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar2 = *pbVar3 < *pbVar5;\n      bVar6 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (lVar4 == 0) break;" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar4 = lVar4 + -1;" (assignment_expression "lVar4 = lVar4 + -1" identifier = (binary_expression "lVar4 + -1" identifier + number_literal)) ;) (expression_statement "bVar2 = *pbVar3 < *pbVar5;" (assignment_expression "bVar2 = *pbVar3 < *pbVar5" identifier = (binary_expression "*pbVar3 < *pbVar5" (pointer_expression "*pbVar3" * identifier) < (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "bVar6 = *pbVar3 == *pbVar5;" (assignment_expression "bVar6 = *pbVar3 == *pbVar5" identifier = (binary_expression "*pbVar3 == *pbVar5" (pointer_expression "*pbVar3" * identifier) == (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "pbVar3 = pbVar3 + 1;" (assignment_expression "pbVar3 = pbVar3 + 1" identifier = (binary_expression "pbVar3 + 1" identifier + number_literal)) ;) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar6)" ( identifier )) ;) (if_statement "if ((!bVar2 && !bVar6) == bVar2) {\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }" if (parenthesized_expression "((!bVar2 && !bVar6) == bVar2)" ( (binary_expression "(!bVar2 && !bVar6) == bVar2" (parenthesized_expression "(!bVar2 && !bVar6)" ( (binary_expression "!bVar2 && !bVar6" (unary_expression "!bVar2" ! identifier) && (unary_expression "!bVar6" ! identifier)) )) == identifier) )) (compound_statement "{\n      uVar1 = *(ulong *)(compressed_data + 4);\n      if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);\n      return bVar2;\n    }" { (expression_statement "uVar1 = *(ulong *)(compressed_data + 4);" (assignment_expression "uVar1 = *(ulong *)(compressed_data + 4)" identifier = (pointer_expression "*(ulong *)(compressed_data + 4)" * (cast_expression "(ulong *)(compressed_data + 4)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(compressed_data + 4)" ( (binary_expression "compressed_data + 4" identifier + number_literal) ))))) ;) (if_statement "if (uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" if (parenthesized_expression "(uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38))" ( (binary_expression "uncompressed_size !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" identifier != (parenthesized_expression "(uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" ( (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28" (binary_expression "uVar1 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar1 & 0xff000000000000)" ( (binary_expression "uVar1 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar1 & 0xff0000000000)" ( (binary_expression "uVar1 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00000000) >> 8" (parenthesized_expression "(uVar1 & 0xff00000000)" ( (binary_expression "uVar1 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff000000) << 8" (parenthesized_expression "(uVar1 & 0xff000000)" ( (binary_expression "uVar1 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff0000) << 0x18" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff00) << 0x28" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x38" identifier << number_literal)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" { comment (expression_statement "do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section");" (call_expression "do_gold_unreachable("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (expression_statement "bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size);" (assignment_expression "bVar2 = zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size)" identifier = (call_expression "zlib_decompress(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size)" identifier (argument_list "(compressed_data + 0xc,compressed_size - 0xc,uncompressed_data,\n                              uncompressed_size)" ( (binary_expression "compressed_data + 0xc" identifier + number_literal) , (binary_expression "compressed_size - 0xc" identifier - number_literal) , identifier , identifier )))) ;) (return_statement "return bVar2;" return identifier ;) })) })) (return_statement "return false;" return false ;) })))
(translation_unit "undefined8\nFUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}\n\n" (function_definition "undefined8\nFUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" identifier (parameter_list "(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "char param_6" primitive_type identifier) , (parameter_declaration "ulong param_7" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (if_statement "if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" if (parenthesized_expression "((param_7 & 0x800) != 0)" ( (binary_expression "(param_7 & 0x800) != 0" (parenthesized_expression "(param_7 & 0x800)" ( (binary_expression "param_7 & 0x800" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" { (if_statement "if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" if (parenthesized_expression "(param_5 == 0x20)" ( (binary_expression "param_5 == 0x20" identifier == number_literal) )) (compound_statement "{\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }" { (if_statement "if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" if (parenthesized_expression "(param_6 == '\0')" ( (binary_expression "param_6 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }" { (if_statement "if (*(int *)param_1 != 1) {\n          return 0;\n        }" if (parenthesized_expression "(*(int *)param_1 != 1)" ( (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) }) (else_clause "else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" else (if_statement "if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)param_1 != 0x1000000)" ( (binary_expression "*(int *)param_1 != 0x1000000" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })))) (expression_statement "lVar4 = 0xc;" (assignment_expression "lVar4 = 0xc" identifier = number_literal) ;) }) (else_clause "else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" else (compound_statement "{\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" { (if_statement "if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" if (parenthesized_expression "(param_5 != 0x40)" ( (binary_expression "param_5 != 0x40" identifier != number_literal) )) (compound_statement "{\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" { (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (if_statement "if (param_6 != '\0') {\n        return 0;\n      }" if (parenthesized_expression "(param_6 != '\0')" ( (binary_expression "param_6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)param_1 != 1) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)param_1 != 1)" ( (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "lVar4 = 0x18;" (assignment_expression "lVar4 = 0x18" identifier = number_literal) ;) }))) (expression_statement "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" identifier = (call_expression "FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" identifier (argument_list "(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" ( (binary_expression "param_1 + lVar4" identifier + identifier) , (binary_expression "param_2 - lVar4" identifier - identifier) , identifier , identifier )))) ;) (return_statement "return uVar2;" return identifier ;) })) (expression_statement "bVar6 = param_2 < 0xb;" (assignment_expression "bVar6 = param_2 < 0xb" identifier = (binary_expression "param_2 < 0xb" identifier < number_literal)) ;) (expression_statement "bVar7 = param_2 == 0xb;" (assignment_expression "bVar7 = param_2 == 0xb" identifier = (binary_expression "param_2 == 0xb" identifier == number_literal)) ;) (if_statement "if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" if (parenthesized_expression "(0xb < param_2)" ( (binary_expression "0xb < param_2" number_literal < identifier) )) (compound_statement "{\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" { (expression_statement "lVar4 = 4;" (assignment_expression "lVar4 = 4" identifier = number_literal) ;) (expression_statement "pbVar3 = param_1;" (assignment_expression "pbVar3 = param_1" identifier = identifier) ;) (expression_statement "pbVar5 = &DAT_0038ae77;" (assignment_expression "pbVar5 = &DAT_0038ae77" identifier = (pointer_expression "&DAT_0038ae77" & identifier)) ;) (do_statement "do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);" do (compound_statement "{\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    }" { (if_statement "if (lVar4 == 0) break;" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar4 = lVar4 + -1;" (assignment_expression "lVar4 = lVar4 + -1" identifier = (binary_expression "lVar4 + -1" identifier + number_literal)) ;) (expression_statement "bVar6 = *pbVar3 < *pbVar5;" (assignment_expression "bVar6 = *pbVar3 < *pbVar5" identifier = (binary_expression "*pbVar3 < *pbVar5" (pointer_expression "*pbVar3" * identifier) < (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "bVar7 = *pbVar3 == *pbVar5;" (assignment_expression "bVar7 = *pbVar3 == *pbVar5" identifier = (binary_expression "*pbVar3 == *pbVar5" (pointer_expression "*pbVar3" * identifier) == (pointer_expression "*pbVar5" * identifier))) ;) (expression_statement "pbVar3 = pbVar3 + 1;" (assignment_expression "pbVar3 = pbVar3 + 1" identifier = (binary_expression "pbVar3 + 1" identifier + number_literal)) ;) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar7)" ( identifier )) ;) (if_statement "if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" if (parenthesized_expression "((!bVar6 && !bVar7) == bVar6)" ( (binary_expression "(!bVar6 && !bVar7) == bVar6" (parenthesized_expression "(!bVar6 && !bVar7)" ( (binary_expression "!bVar6 && !bVar7" (unary_expression "!bVar6" ! identifier) && (unary_expression "!bVar7" ! identifier)) )) == identifier) )) (compound_statement "{\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" { (expression_statement "uVar1 = *(ulong *)(param_1 + 4);" (assignment_expression "uVar1 = *(ulong *)(param_1 + 4)" identifier = (pointer_expression "*(ulong *)(param_1 + 4)" * (cast_expression "(ulong *)(param_1 + 4)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) ))))) ;) (if_statement "if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" if (parenthesized_expression "(param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38))" ( (binary_expression "param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" identifier != (parenthesized_expression "(uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" ( (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28" (binary_expression "uVar1 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar1 & 0xff000000000000)" ( (binary_expression "uVar1 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar1 & 0xff0000000000)" ( (binary_expression "uVar1 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00000000) >> 8" (parenthesized_expression "(uVar1 & 0xff00000000)" ( (binary_expression "uVar1 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff000000) << 8" (parenthesized_expression "(uVar1 & 0xff000000)" ( (binary_expression "uVar1 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff0000) << 0x18" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar1 & 0xff00) << 0x28" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x38" identifier << number_literal)) ))) )) (compound_statement "{\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" { (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" identifier (argument_list "("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" ( (string_literal ""../../gold/compressed_output.cc"" " string_content ") , number_literal , (string_literal ""decompress_input_section"" " string_content ") ))) ;) })) (expression_statement "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" identifier = (call_expression "FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" identifier (argument_list "(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) , (binary_expression "param_2 - 0xc" identifier - number_literal) , identifier , identifier )))) ;) (return_statement "return uVar2;" return identifier ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) != LIT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) != LIT) )) (compound_statement { (return_statement return LIT ;) })))) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + IDENT) , (binary_expression IDENT - IDENT) , IDENT , IDENT )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT - LIT) , IDENT , IDENT )))) ;) (return_statement return IDENT ;) })) })) (return_statement return LIT ;) })))
(function_definition "undefined8\nFUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_00296e10(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" (identifier "FUN_00296e10") (parameter_list "(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,\n            ulong param_7)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "char param_6" (primitive_type "char") (identifier "param_6")) (, ",") (parameter_declaration "ulong param_7" (type_identifier "ulong") (identifier "param_7")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  byte *pbVar3;\n  long lVar4;\n  byte *pbVar5;\n  bool bVar6;\n  bool bVar7;\n  \n  if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }\n  bVar6 = param_2 < 0xb;\n  bVar7 = param_2 == 0xb;\n  if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "byte *pbVar3;" (type_identifier "byte") (pointer_declarator "*pbVar3" (* "*") (identifier "pbVar3")) (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "bool bVar6;" (primitive_type "bool") (identifier "bVar6") (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (if_statement "if ((param_7 & 0x800) != 0) {\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" (if "if") (parenthesized_expression "((param_7 & 0x800) != 0)" (( "(") (binary_expression "(param_7 & 0x800) != 0" (parenthesized_expression "(param_7 & 0x800)" (( "(") (binary_expression "param_7 & 0x800" (identifier "param_7") (& "&") (number_literal "0x800")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }\n    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);\n    return uVar2;\n  }" ({ "{") (if_statement "if (param_5 == 0x20) {\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }\n    else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" (if "if") (parenthesized_expression "(param_5 == 0x20)" (( "(") (binary_expression "param_5 == 0x20" (identifier "param_5") (== "==") (number_literal "0x20")) () ")")) (compound_statement "{\n      if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }\n      lVar4 = 0xc;\n    }" ({ "{") (if_statement "if (param_6 == '\0') {\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }\n      else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_6 == '\0')" (( "(") (binary_expression "param_6 == '\0'" (identifier "param_6") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        if (*(int *)param_1 != 1) {\n          return 0;\n        }\n      }" ({ "{") (if_statement "if (*(int *)param_1 != 1) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(*(int *)param_1 != 1)" (( "(") (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" (* "*") (cast_expression "(int *)param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")) (else_clause "else if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" (else "else") (if_statement "if (*(int *)param_1 != 0x1000000) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)param_1 != 0x1000000)" (( "(") (binary_expression "*(int *)param_1 != 0x1000000" (pointer_expression "*(int *)param_1" (* "*") (cast_expression "(int *)param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (!= "!=") (number_literal "0x1000000")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))))) (expression_statement "lVar4 = 0xc;" (assignment_expression "lVar4 = 0xc" (identifier "lVar4") (= "=") (number_literal "0xc")) (; ";")) (} "}")) (else_clause "else {\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" (else "else") (compound_statement "{\n      if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }\n      if (param_6 != '\0') {\n        return 0;\n      }\n      if (*(int *)param_1 != 1) {\n        return 0;\n      }\n      lVar4 = 0x18;\n    }" ({ "{") (if_statement "if (param_5 != 0x40) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" (if "if") (parenthesized_expression "(param_5 != 0x40)" (( "(") (binary_expression "param_5 != 0x40" (identifier "param_5") (!= "!=") (number_literal "0x40")) () ")")) (compound_statement "{\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");\n      }" ({ "{") (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" (identifier "FUN_0017c650") (argument_list "("../../gold/compressed_output.cc",0xb8,"decompress_input_section")" (( "(") (string_literal ""../../gold/compressed_output.cc"" (" """) (string_content "../../gold/compressed_output.cc") (" """)) (, ",") (number_literal "0xb8") (, ",") (string_literal ""decompress_input_section"" (" """) (string_content "decompress_input_section") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_6 != '\0') {\n        return 0;\n      }" (if "if") (parenthesized_expression "(param_6 != '\0')" (( "(") (binary_expression "param_6 != '\0'" (identifier "param_6") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*(int *)param_1 != 1) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)param_1 != 1)" (( "(") (binary_expression "*(int *)param_1 != 1" (pointer_expression "*(int *)param_1" (* "*") (cast_expression "(int *)param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1"))) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "lVar4 = 0x18;" (assignment_expression "lVar4 = 0x18" (identifier "lVar4") (= "=") (number_literal "0x18")) (; ";")) (} "}")))) (expression_statement "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" (identifier "uVar2") (= "=") (call_expression "FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" (identifier "FUN_00296620") (argument_list "(param_1 + lVar4,param_2 - lVar4,param_3,param_4)" (( "(") (binary_expression "param_1 + lVar4" (identifier "param_1") (+ "+") (identifier "lVar4")) (, ",") (binary_expression "param_2 - lVar4" (identifier "param_2") (- "-") (identifier "lVar4")) (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")")))) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (expression_statement "bVar6 = param_2 < 0xb;" (assignment_expression "bVar6 = param_2 < 0xb" (identifier "bVar6") (= "=") (binary_expression "param_2 < 0xb" (identifier "param_2") (< "<") (number_literal "0xb"))) (; ";")) (expression_statement "bVar7 = param_2 == 0xb;" (assignment_expression "bVar7 = param_2 == 0xb" (identifier "bVar7") (= "=") (binary_expression "param_2 == 0xb" (identifier "param_2") (== "==") (number_literal "0xb"))) (; ";")) (if_statement "if (0xb < param_2) {\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" (if "if") (parenthesized_expression "(0xb < param_2)" (( "(") (binary_expression "0xb < param_2" (number_literal "0xb") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    lVar4 = 4;\n    pbVar3 = param_1;\n    pbVar5 = &DAT_0038ae77;\n    do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);\n    if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }\n  }" ({ "{") (expression_statement "lVar4 = 4;" (assignment_expression "lVar4 = 4" (identifier "lVar4") (= "=") (number_literal "4")) (; ";")) (expression_statement "pbVar3 = param_1;" (assignment_expression "pbVar3 = param_1" (identifier "pbVar3") (= "=") (identifier "param_1")) (; ";")) (expression_statement "pbVar5 = &DAT_0038ae77;" (assignment_expression "pbVar5 = &DAT_0038ae77" (identifier "pbVar5") (= "=") (pointer_expression "&DAT_0038ae77" (& "&") (identifier "DAT_0038ae77"))) (; ";")) (do_statement "do {\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    } while (bVar7);" (do "do") (compound_statement "{\n      if (lVar4 == 0) break;\n      lVar4 = lVar4 + -1;\n      bVar6 = *pbVar3 < *pbVar5;\n      bVar7 = *pbVar3 == *pbVar5;\n      pbVar3 = pbVar3 + 1;\n      pbVar5 = pbVar5 + 1;\n    }" ({ "{") (if_statement "if (lVar4 == 0) break;" (if "if") (parenthesized_expression "(lVar4 == 0)" (( "(") (binary_expression "lVar4 == 0" (identifier "lVar4") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar4 = lVar4 + -1;" (assignment_expression "lVar4 = lVar4 + -1" (identifier "lVar4") (= "=") (binary_expression "lVar4 + -1" (identifier "lVar4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar6 = *pbVar3 < *pbVar5;" (assignment_expression "bVar6 = *pbVar3 < *pbVar5" (identifier "bVar6") (= "=") (binary_expression "*pbVar3 < *pbVar5" (pointer_expression "*pbVar3" (* "*") (identifier "pbVar3")) (< "<") (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")))) (; ";")) (expression_statement "bVar7 = *pbVar3 == *pbVar5;" (assignment_expression "bVar7 = *pbVar3 == *pbVar5" (identifier "bVar7") (= "=") (binary_expression "*pbVar3 == *pbVar5" (pointer_expression "*pbVar3" (* "*") (identifier "pbVar3")) (== "==") (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")))) (; ";")) (expression_statement "pbVar3 = pbVar3 + 1;" (assignment_expression "pbVar3 = pbVar3 + 1" (identifier "pbVar3") (= "=") (binary_expression "pbVar3 + 1" (identifier "pbVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar5 + 1" (identifier "pbVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (; ";")) (if_statement "if ((!bVar6 && !bVar7) == bVar6) {\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" (if "if") (parenthesized_expression "((!bVar6 && !bVar7) == bVar6)" (( "(") (binary_expression "(!bVar6 && !bVar7) == bVar6" (parenthesized_expression "(!bVar6 && !bVar7)" (( "(") (binary_expression "!bVar6 && !bVar7" (unary_expression "!bVar6" (! "!") (identifier "bVar6")) (&& "&&") (unary_expression "!bVar7" (! "!") (identifier "bVar7"))) () ")")) (== "==") (identifier "bVar6")) () ")")) (compound_statement "{\n      uVar1 = *(ulong *)(param_1 + 4);\n      if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }\n      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);\n      return uVar2;\n    }" ({ "{") (expression_statement "uVar1 = *(ulong *)(param_1 + 4);" (assignment_expression "uVar1 = *(ulong *)(param_1 + 4)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(param_1 + 4)" (* "*") (cast_expression "(ulong *)(param_1 + 4)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" (if "if") (parenthesized_expression "(param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38))" (( "(") (binary_expression "param_4 !=\n          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" (identifier "param_4") (!= "!=") (parenthesized_expression "(uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)" (( "(") (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |\n           (uVar1 & 0xff00) << 0x28" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |\n           (uVar1 & 0xff00000000) >> 8" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18" (binary_expression "uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28" (binary_expression "uVar1 >> 0x38" (identifier "uVar1") (>> ">>") (number_literal "0x38")) (| "|") (binary_expression "(uVar1 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar1 & 0xff000000000000)" (( "(") (binary_expression "uVar1 & 0xff000000000000" (identifier "uVar1") (& "&") (number_literal "0xff000000000000")) () ")")) (>> ">>") (number_literal "0x28"))) (| "|") (binary_expression "(uVar1 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar1 & 0xff0000000000)" (( "(") (binary_expression "uVar1 & 0xff0000000000" (identifier "uVar1") (& "&") (number_literal "0xff0000000000")) () ")")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "(uVar1 & 0xff00000000) >> 8" (parenthesized_expression "(uVar1 & 0xff00000000)" (( "(") (binary_expression "uVar1 & 0xff00000000" (identifier "uVar1") (& "&") (number_literal "0xff00000000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar1 & 0xff000000) << 8" (parenthesized_expression "(uVar1 & 0xff000000)" (( "(") (binary_expression "uVar1 & 0xff000000" (identifier "uVar1") (& "&") (number_literal "0xff000000")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar1 & 0xff0000) << 0x18" (parenthesized_expression "(uVar1 & 0xff0000)" (( "(") (binary_expression "uVar1 & 0xff0000" (identifier "uVar1") (& "&") (number_literal "0xff0000")) () ")")) (<< "<<") (number_literal "0x18"))) (| "|") (binary_expression "(uVar1 & 0xff00) << 0x28" (parenthesized_expression "(uVar1 & 0xff00)" (( "(") (binary_expression "uVar1 & 0xff00" (identifier "uVar1") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "0x28"))) (| "|") (binary_expression "uVar1 << 0x38" (identifier "uVar1") (<< "<<") (number_literal "0x38"))) () ")"))) () ")")) (compound_statement "{\n                    \n        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");\n      }" ({ "{") (expression_statement "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");" (call_expression "FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" (identifier "FUN_0017c650") (argument_list "("../../gold/compressed_output.cc",0xcb,"decompress_input_section")" (( "(") (string_literal ""../../gold/compressed_output.cc"" (" """) (string_content "../../gold/compressed_output.cc") (" """)) (, ",") (number_literal "0xcb") (, ",") (string_literal ""decompress_input_section"" (" """) (string_content "decompress_input_section") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);" (assignment_expression "uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" (identifier "uVar2") (= "=") (call_expression "FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" (identifier "FUN_00296620") (argument_list "(param_1 + 0xc,param_2 - 0xc,param_3,param_4)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) (, ",") (binary_expression "param_2 - 0xc" (identifier "param_2") (- "-") (number_literal "0xc")) (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")")))) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Removing unreachable block (ram,0x00296ed8) */

bool gold::function_1
               (type_1 *var_5,type_2 var_7,type_1 *uncompressed_data,
               type_2 var_11,int var_2,bool big_endian,type_3 var_1)

{
  type_2 var_12;
  bool var_10;
  type_4 *var_8;
  long var_6;
  type_4 *var_9;
  bool bVar6;
  
  if ((var_1 & 0x800) != 0) {
    if (var_2 == 0x20) {
      if (big_endian) {
        if (*(int *)var_5 != 0x1000000) {
          return false;
        }
      }
      else if (*(int *)var_5 != 1) {
        return false;
      }
      var_6 = 0xc;
    }
    else {
      if (var_2 != 0x40) {
                    /* WARNING: Subroutine does not return */
        var_3("../../gold/compressed_output.cc",0xb8,"decompress_input_section");
      }
      if (big_endian) {
        return false;
      }
      if (*(int *)var_5 != 1) {
        return false;
      }
      var_6 = 0x18;
    }
    var_10 = var_4(var_5 + var_6,var_7 - var_6,uncompressed_data,
                            var_11);
    return var_10;
  }
  var_10 = var_7 < 0xb;
  bVar6 = var_7 == 0xb;
  if (0xb < var_7) {
    var_6 = 4;
    var_8 = var_5;
    var_9 = &DAT_0038ae77;
    do {
      if (var_6 == 0) break;
      var_6 = var_6 + -1;
      var_10 = *var_8 < *var_9;
      bVar6 = *var_8 == *var_9;
      var_8 = var_8 + 1;
      var_9 = var_9 + 1;
    } while (bVar6);
    if ((!var_10 && !bVar6) == var_10) {
      var_12 = *(type_2 *)(var_5 + 4);
      if (var_11 !=
          (var_12 >> 0x38 | (var_12 & 0xff000000000000) >> 0x28 | (var_12 & 0xff0000000000) >> 0x18 |
           (var_12 & 0xff00000000) >> 8 | (var_12 & 0xff000000) << 8 | (var_12 & 0xff0000) << 0x18 |
           (var_12 & 0xff00) << 0x28 | var_12 << 0x38)) {
                    /* WARNING: Subroutine does not return */
        var_3("../../gold/compressed_output.cc",0xcb,"decompress_input_section");
      }
      var_10 = var_4(var_5 + 0xc,var_7 - 0xc,uncompressed_data,
                              var_11);
      return var_10;
    }
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal)) (identifier) (identifier))))) (return_statement (identifier)))))) (return_statement (number_literal)))))

/* WARNING: Removing unreachable block (ram,0x00296ed8) */

undefined8
MASKED(byte *param_1,ulong param_2,undefined8 param_3,ulong param_4,int param_5,char param_6,
            ulong param_7)

{
  ulong uVar1;
  undefined8 uVar2;
  byte *pbVar3;
  long lVar4;
  byte *pbVar5;
  bool bVar6;
  bool bVar7;
  
  if ((param_7 & 0x800) != 0) {
    if (param_5 == 0x20) {
      if (param_6 == '\0') {
        if (*(int *)param_1 != 1) {
          return 0;
        }
      }
      else if (*(int *)param_1 != 0x1000000) {
        return 0;
      }
      lVar4 = 0xc;
    }
    else {
      if (param_5 != 0x40) {
                    /* WARNING: Subroutine does not return */
        FUN_0017c650("../../gold/compressed_output.cc",0xb8,"decompress_input_section");
      }
      if (param_6 != '\0') {
        return 0;
      }
      if (*(int *)param_1 != 1) {
        return 0;
      }
      lVar4 = 0x18;
    }
    uVar2 = FUN_00296620(param_1 + lVar4,param_2 - lVar4,param_3,param_4);
    return uVar2;
  }
  bVar6 = param_2 < 0xb;
  bVar7 = param_2 == 0xb;
  if (0xb < param_2) {
    lVar4 = 4;
    pbVar3 = param_1;
    pbVar5 = &DAT_0038ae77;
    do {
      if (lVar4 == 0) break;
      lVar4 = lVar4 + -1;
      bVar6 = *pbVar3 < *pbVar5;
      bVar7 = *pbVar3 == *pbVar5;
      pbVar3 = pbVar3 + 1;
      pbVar5 = pbVar5 + 1;
    } while (bVar7);
    if ((!bVar6 && !bVar7) == bVar6) {
      uVar1 = *(ulong *)(param_1 + 4);
      if (param_4 !=
          (uVar1 >> 0x38 | (uVar1 & 0xff000000000000) >> 0x28 | (uVar1 & 0xff0000000000) >> 0x18 |
           (uVar1 & 0xff00000000) >> 8 | (uVar1 & 0xff000000) << 8 | (uVar1 & 0xff0000) << 0x18 |
           (uVar1 & 0xff00) << 0x28 | uVar1 << 0x38)) {
                    /* WARNING: Subroutine does not return */
        FUN_0017c650("../../gold/compressed_output.cc",0xcb,"decompress_input_section");
      }
      uVar2 = FUN_00296620(param_1 + 0xc,param_2 - 0xc,param_3,param_4);
      return uVar2;
    }
  }
  return 0;
}

