
/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* WARNING: Struct "Output_section_headers": ignoring overlapping field "layout_" */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Struct "Output_reduced_debug_abbrev_section": ignoring overlapping field "data_" */
/* WARNING: Struct "Output_reduced_debug_info_section": ignoring overlapping field "data_" */

int demangle_signature(work_stuff *work,char **mangled,string *declp)

{
  bool bVar1;
  undefined *puVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  string s;
  string tname;
  string trawname;
  
  puVar2 = PTR_UINT_004c12dc;
  iVar5 = 1;
  bVar1 = false;
  pcVar6 = *mangled;
  while( true ) {
    iVar4 = (int)*pcVar6;
    if (iVar4 == 0) {
      uVar3 = work->options;
      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {
        iVar5 = demangle_args(work,mangled,declp);
        if (iVar5 == 0) {
          return 0;
        }
        uVar3 = work->options;
      }
      if ((uVar3 & 1) != 0) {
        if (work->static_type != 0) {
          string_append(declp,PTR_UINT_004c12dc + -0x6eec);
        }
        iVar4 = work->type_quals;
        if (iVar4 != 0) {
          if (declp->b != declp->p) {
            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);
            iVar4 = work->type_quals;
          }
          pcVar6 = qualifier_string(iVar4);
          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {
            string_append(declp,pcVar6);
          }
        }
      }
      return iVar5;
    }
    uVar3 = iVar4 - 0x30U & 0xff;
    if (uVar3 < 0x46) {
                    /* WARNING: Could not emulate address calculation at 0x003188f8 */
                    /* WARNING: Treating indirect jump as call */
      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.
                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))
                        (iVar4,uVar3 < 0x46,pcVar6);
      return iVar5;
    }
    if ((work->options & 0x300U) == 0) break;
    iVar5 = demangle_args(work,mangled,declp);
    bVar1 = true;
    if (iVar5 == 0) {
      return 0;
    }
    pcVar6 = *mangled;
  }
  return 0;
}



int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)

{
  bool bVar1;
  undefined *puVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  
  puVar2 = PTR_UINT_004c12dc;
  iVar5 = 1;
  bVar1 = false;
  pcVar6 = (char *)*param_2;
  while( true ) {
    iVar4 = (int)*pcVar6;
    if (iVar4 == 0) {
      uVar3 = *param_1;
      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {
        iVar5 = FUN_00317ba0(param_1,param_2,param_3);
        if (iVar5 == 0) {
          return 0;
        }
        uVar3 = *param_1;
      }
      if ((uVar3 & 1) != 0) {
        if (param_1[0xc] != 0) {
          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);
        }
        uVar3 = param_1[0xe];
        if (uVar3 != 0) {
          if (*param_3 != param_3[1]) {
            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);
            uVar3 = param_1[0xe];
          }
          pcVar6 = (char *)FUN_00311db8(uVar3);
          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {
            FUN_00312594(param_3,pcVar6);
          }
        }
      }
      return iVar5;
    }
    uVar3 = iVar4 - 0x30U & 0xff;
    if (uVar3 < 0x46) {
                    /* WARNING: Could not emulate address calculation at 0x003188f8 */
                    /* WARNING: Treating indirect jump as call */
      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +
                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)
      ;
      return iVar5;
    }
    if ((*param_1 & 0x300) == 0) break;
    iVar5 = FUN_00317ba0(param_1,param_2,param_3);
    bVar1 = true;
    if (iVar5 == 0) {
      return 0;
    }
    pcVar6 = (char *)*param_2;
  }
  return 0;
}


lui gp,0x1b
addiu gp,gp,0x9f0
addu gp,gp,t9
addiu sp,sp,-0x88
lw v0,-0x4268(gp)
sw v0,0x4c(sp)
sw s3,0x6c(sp)
sw s1,0x64(sp)
lw v0,-0x4268(gp)
lw s3,-0x4268(gp)
lw s1,-0x7f64(gp)
sw v0,0x50(sp)
sw s7,0x7c(sp)
addiu s3,s3,0x7ba0
sw s6,0x78(sp)
addiu s1,s1,-0x657c
sw s5,0x74(sp)
or s6,zero,zero
sw s4,0x70(sp)
li s5,0x1
lw v0,-0x4268(gp)
or s4,zero,zero
lw s7,0x0(a1)
sw s8,0x80(sp)
or s8,a0,zero
addiu v0,v0,0x6a98
sw s2,0x68(sp)
sw s0,0x60(sp)
or s2,a2,zero
sw gp,0x18(sp)
or s0,a1,zero
sw ra,0x84(sp)
sw zero,0x54(sp)
sw v0,0x48(sp)
lb a0,0x0(s7)
beq a0,zero,0x00318a94
_or a2,s7,zero
addiu v0,a0,-0x30
andi v0,v0,0xff
sltiu a1,v0,0x46
beq a1,zero,0x00319000
_sll v0,v0,0x2
addu v0,s1,v0
lw v0,0x0(v0)
addu v0,v0,gp
jr v0
_nop
li v0,0x1
lw t9,0x48(sp)
addiu v1,sp,0x38
sw zero,0x40(sp)
addiu s5,sp,0x2c
sw zero,0x3c(sp)
sw v1,0x58(sp)
or a3,v1,zero
sw v0,0x14(sp)
or a2,s5,zero
sw v0,0x10(sp)
or a1,s0,zero
sw zero,0x38(sp)
or a0,s8,zero
sw zero,0x34(sp)
sw zero,0x30(sp)
jalr t9
_sw zero,0x2c(sp)
lw gp,0x18(sp)
or s4,v0,zero
bne v0,zero,0x00319090
_movz s6,s7,s6
lw v0,0x0(s8)
andi v0,v0,0x4
bne v0,zero,0x00319040
_lw a1,-0x7f64(gp)
lw a1,-0x77f0(gp)
addiu a1,a1,0x208
lw t9,-0x4268(gp)
addiu t9,t9,0x2594
bal 0x00312594
_or a0,s5,zero
lw a1,0x2c(sp)
lw a2,0x30(sp)
beq a1,a2,0x003189b4
_lw gp,0x18(sp)
lw t9,-0x4268(gp)
subu a2,a2,a1
addiu t9,t9,0x2470
bal 0x00312470
_or a0,s2,zero
lw gp,0x18(sp)
lw v0,0x2c(s8)
andi v0,v0,0x1
bne v0,zero,0x00319138
_lw v0,-0x4268(gp)
lw v0,0x28(s8)
andi v0,v0,0x1
beq v0,zero,0x00318a04
_lw a0,0x38(sp)
lw s5,-0x4268(gp)
addiu s5,s5,0x27e8
lw a2,0x3c(sp)
or a0,s2,zero
or t9,s5,zero
bal 0x003127e8
_lw a1,0x58(sp)
lw v0,0x28(s8)
lw gp,0x18(sp)
addiu v0,v0,-0x1
sw v0,0x28(s8)
lw a0,0x38(sp)
beq a0,zero,0x00318a24
_lw t9,-0x3628(gp)
jalr t9
_nop
lw gp,0x18(sp)
sw zero,0x3c(sp)
sw zero,0x40(sp)
sw zero,0x38(sp)
lw a0,0x2c(sp)
beq a0,zero,0x00318a44
_lw t9,-0x3628(gp)
jalr t9
_nop
sw zero,0x30(sp)
sw zero,0x34(sp)
sw zero,0x2c(sp)
beq s4,zero,0x00318b5c
_or s5,zero,zero
lw a0,0x0(s8)
andi a0,a0,0x2c00
bne a0,zero,0x00318fe8
_lw v0,0x4c(sp)
or a2,s2,zero
or a1,s0,zero
or t9,s3,zero
bal 0x00317ba0
_or a0,s8,zero
lw gp,0x18(sp)
beq v0,zero,0x00318b58
_or s5,v0,zero
lw s7,0x0(s0)
lb a0,0x0(s7)
or s6,zero,zero
li s4,0x1
bne a0,zero,0x003188e4
_or a2,s7,zero
bne s4,zero,0x00318aa8
_lw v0,0x0(s8)
andi v1,v0,0x300
bne v1,zero,0x003192b0
_lw t9,-0x4268(gp)
andi v0,v0,0x1
beq v0,zero,0x00318b60
_lw ra,0x84(sp)
lw v0,0x30(s8)
bne v0,zero,0x003192d8
_lw a1,-0x7f64(gp)
lw a0,0x38(s8)
beq a0,zero,0x00318b60
_lw ra,0x84(sp)
lw v1,0x0(s2)
lw v0,0x4(s2)
beq v1,v0,0x00318af8
_lw a1,-0x7924(gp)
or a0,s2,zero
lw t9,-0x4268(gp)
addiu t9,t9,0x2594
bal 0x00312594
_addiu a1,a1,-0x8c
lw gp,0x18(sp)
lw a0,0x38(s8)
lw t9,-0x4268(gp)
addiu t9,t9,0x1db8
bal 0x00311db8
_nop
beq v0,zero,0x00318b5c
_lw gp,0x18(sp)
lb v1,0x0(v0)
beq v1,zero,0x00318b5c
_lw t9,-0x4268(gp)
or a1,v0,zero
addiu t9,t9,0x2594
bal 0x00312594
_or a0,s2,zero
b 0x00318b60
_lw ra,0x84(sp)
lw v0,0x0(s8)
andi a0,v0,0x300
beq a0,zero,0x00318b4c
_lw v1,0x54(sp)
bne v1,zero,0x00319218
_addiu v1,s7,0x1
andi v0,v0,0x1000
bne v0,zero,0x003191b0
_addiu a1,s7,0x1
or s5,zero,zero
lw ra,0x84(sp)
or v0,s5,zero
lw s8,0x80(sp)
lw s7,0x7c(sp)
lw s6,0x78(sp)
lw s5,0x74(sp)
lw s4,0x70(sp)
lw s3,0x6c(sp)
lw s2,0x68(sp)
lw s1,0x64(sp)
lw s0,0x60(sp)
jr ra
_addiu sp,sp,0x88
addiu v0,s7,0x1
movz s6,s7,s6
sw v0,0x0(s0)
li v0,0x1
lw s7,0x0(s0)
b 0x003188d8
_sw v0,0x30(s8)
lw t9,-0x4268(gp)
li a3,0x1
sw zero,0x10(sp)
or a2,s2,zero
or a1,s0,zero
addiu t9,t9,0x7320
bal 0x00317320
_or a0,s8,zero
lw gp,0x18(sp)
beq v0,zero,0x00318b58
_or s5,v0,zero
lw t9,-0x4268(gp)
or a0,s8,zero
lw a2,0x0(s0)
or a1,s7,zero
addiu t9,t9,0x2c3c
bal 0x00312c3c
_subu a2,a2,s7
lw a0,0x0(s8)
andi v0,a0,0x300
bne v0,zero,0x00318a50
_lw gp,0x18(sp)
or s6,zero,zero
b 0x003188d8
_lw s7,0x0(s0)
lw v0,0x0(s8)
andi v0,v0,0x1000
beq v0,zero,0x00318b58
_li a0,0x5f
b 0x00318c38
_addiu v1,a2,0x1
beq v0,a0,0x00319328
_nop
or a2,v1,zero
addiu v1,a2,0x1
sw v1,0x0(s0)
lb v0,0x1(a2)
bne v0,zero,0x00318c28
_nop
b 0x00318b5c
_or s5,zero,zero
li v0,0x56
beq a0,v0,0x0031906c
_li v0,0x75
beq a0,v0,0x00318c74
_li a1,0x4
li v0,0x43
bne a0,v0,0x00319380
_lw t9,-0x351c(gp)
li a1,0x1
lw v0,0x38(s8)
addiu a0,s7,0x1
movz s6,s7,s6
or s7,a0,zero
or v0,v0,a1
sw v0,0x38(s8)
b 0x003188d8
_sw a0,0x0(s0)
lw v0,0x50(sp)
addiu s4,sp,0x20
or a1,s0,zero
or a2,s4,zero
addiu t9,v0,0x439c
bal 0x0031439c
_or a0,s8,zero
lw gp,0x18(sp)
beq v0,zero,0x00318b5c
_or s5,v0,zero
lw v0,0x0(s8)
andi v0,v0,0x4
bne v0,zero,0x0031919c
_lw a1,-0x7f64(gp)
lw a1,-0x77f0(gp)
addiu a1,a1,0x208
lw t9,-0x4268(gp)
addiu t9,t9,0x2594
bal 0x00312594
_or a0,s4,zero
lw a1,0x20(sp)
lw a0,0x24(sp)
beq a1,a0,0x00318d10
_lw gp,0x18(sp)
lw t9,-0x4268(gp)
subu a2,a0,a1
addiu t9,t9,0x2470
bal 0x00312470
_or a0,s2,zero
lw gp,0x18(sp)
lw a0,0x20(sp)
beq a0,zero,0x00318a4c
_lw t9,-0x3628(gp)
jalr t9
_nop
b 0x00318a50
_lw a0,0x0(s8)
lw t9,-0x4268(gp)
li v0,-0x1
or a0,s8,zero
sw zero,0x28(sp)
sw v0,0x34(s8)
addiu t9,t9,0x1bac
sw zero,0x24(sp)
bal 0x00311bac
_sw zero,0x20(sp)
addiu a2,sp,0x20
lw gp,0x18(sp)
or a1,s0,zero
or a0,s8,zero
movz s6,s7,s6
lw t9,-0x4268(gp)
addiu t9,t9,0x6108
bal 0x00316108
_or s5,v0,zero
beq v0,zero,0x00319050
_lw gp,0x18(sp)
lw v0,0x28(s8)
andi v0,v0,0x1
bne v0,zero,0x003190c4
_lw a3,0x24(sp)
lw v0,0x2c(s8)
andi v0,v0,0x1
bne v0,zero,0x003190c4
_lw v0,-0x4268(gp)
addiu s7,v0,0x251c
lw a1,0x20(sp)
beq a3,a1,0x00319130
_sw a3,0x24(sp)
subu a2,a3,a1
lw t9,-0x4268(gp)
addiu t9,t9,0x1cb4
bal 0x00311cb4
_or a0,s8,zero
lw a1,0x20(sp)
lw a2,0x24(sp)
beq a1,a2,0x00319320
_lw gp,0x18(sp)
subu a2,a2,a1
lw t9,-0x4268(gp)
addiu a0,s8,0xc
addiu t9,t9,0x2278
bal 0x00312278
_or a3,s5,zero
lw v0,0x0(s8)
andi v0,v0,0x4
beq v0,zero,0x003192f4
_lw gp,0x18(sp)
lw a1,-0x7f64(gp)
addiu a1,a1,-0x5450
or t9,s7,zero
bal 0x0031251c
_or a0,s2,zero
lw a1,0x20(sp)
lw a0,0x24(sp)
beq a1,a0,0x00318e34
_lw gp,0x18(sp)
lw t9,-0x4268(gp)
subu a2,a0,a1
addiu t9,t9,0x2470
bal 0x00312470
_or a0,s2,zero
lw gp,0x18(sp)
lw a0,0x20(sp)
beq a0,zero,0x00318e48
_lw t9,-0x3628(gp)
jalr t9
_nop
lw gp,0x18(sp)
lw t9,-0x4268(gp)
or a0,s8,zero
lw a2,0x0(s0)
or a1,s6,zero
addiu t9,t9,0x2c3c
bal 0x00312c3c
_subu a2,a2,s6
lw a0,0x0(s8)
andi v0,a0,0x2300
bne v0,zero,0x00319300
_lw gp,0x18(sp)
or s6,zero,zero
lw s7,0x0(s0)
b 0x003188d8
_li s5,0x1
lw v0,0x0(s8)
andi v0,v0,0x300
beq v0,zero,0x00318b5c
_or s5,zero,zero
lw t9,0x48(sp)
or a3,zero,zero
or a2,s2,zero
sw zero,0x14(sp)
or a1,s0,zero
sw zero,0x10(sp)
jalr t9
_or a0,s8,zero
li a1,0x1
or s5,v0,zero
lw v0,0x28(s8)
lw a2,0x54(sp)
lw v1,0x0(s0)
andi v0,v0,0x1
lw gp,0x18(sp)
movz a2,a1,v0
lb a0,0x0(v1)
beq a0,zero,0x00318b58
_sw a2,0x54(sp)
addiu v1,v1,0x1
beq s5,zero,0x00318b58
_sw v1,0x0(s0)
b 0x003188d8
_lw s7,0x0(s0)
lw v0,0x0(s8)
addiu v1,s7,0x1
andi v0,v0,0x3c00
bne v0,zero,0x00319074
_sw v1,0x0(s0)
or a2,s2,zero
or a1,s0,zero
or t9,s3,zero
bal 0x00317ba0
_or a0,s8,zero
lw gp,0x18(sp)
beq v0,zero,0x00318b58
_or s5,v0,zero
lw v0,0x0(s8)
andi v0,v0,0x2100
beq v0,zero,0x003191a4
_or s6,zero,zero
lw s7,0x0(s0)
li v0,0x5f
lb a0,0x0(s7)
bne a0,v0,0x00318a8c
_li s4,0x1
lw v0,0x50(sp)
addiu v1,s7,0x1
addiu a2,sp,0x2c
sw v1,0x0(s0)
or a1,s0,zero
addiu t9,v0,0x439c
bal 0x0031439c
_or a0,s8,zero
lw s6,0x2c(sp)
or s5,v0,zero
beq s6,zero,0x00319378
_lw gp,0x18(sp)
lw t9,-0x3628(gp)
or a0,s6,zero
li s4,0x1
jalr t9
_or s6,zero,zero
lw gp,0x18(sp)
sw zero,0x30(sp)
sw zero,0x34(sp)
b 0x0031902c
_sw zero,0x2c(sp)
lw t9,-0x4268(gp)
li a3,0x1
or a0,s8,zero
sw zero,0x10(sp)
or a2,s2,zero
addiu t9,t9,0x7320
bal 0x00317320
_or a1,s0,zero
lw a0,0x0(s8)
or s5,v0,zero
andi v0,a0,0x300
beq v0,zero,0x00319048
_lw gp,0x18(sp)
beq s5,zero,0x00318b58
_andi a0,a0,0x2c00
beq a0,zero,0x00318a5c
_lw v0,0x4c(sp)
addiu a1,s8,0x20
addiu t9,v0,0x20bc
bal 0x003120bc
_addiu a0,s8,0x4
b 0x00318a60
_or a2,s2,zero
lw v0,0x0(s8)
andi v0,v0,0x300
beq v0,zero,0x00318b58
_or a2,s2,zero
or a1,s0,zero
or t9,s3,zero
bal 0x00317ba0
_or a0,s8,zero
li s4,0x1
lw gp,0x18(sp)
or s5,v0,zero
beq s5,zero,0x00318b58
_nop
b 0x003188d8
_lw s7,0x0(s0)
lw a1,-0x7f64(gp)
b 0x0031897c
_addiu a1,a1,-0x5450
b 0x0031902c
_or s6,zero,zero
lw a0,0x20(sp)
beq a0,zero,0x00318b58
_lw t9,-0x3628(gp)
jalr t9
_or s5,zero,zero
b 0x00318b60
_lw ra,0x84(sp)
b 0x00318c74
_li a1,0x2
lw v0,0x4c(sp)
addiu a1,s8,0x20
addiu t9,v0,0x20bc
bal 0x003120bc
_addiu a0,s8,0x4
b 0x00318f0c
_or a2,s2,zero
lw t9,-0x4268(gp)
or a1,s6,zero
lw a2,0x0(s0)
or a0,s8,zero
addiu t9,t9,0x2c3c
bal 0x00312c3c
_subu a2,a2,s6
lw v0,0x0(s8)
andi v0,v0,0x4
bne v0,zero,0x0031903c
_lw gp,0x18(sp)
b 0x00318978
_lw a1,-0x77f0(gp)
lw a2,0x34(s8)
addiu v0,a2,0x1
sltiu v0,v0,0x2
bne v0,zero,0x003192a8
_lw a1,0x20(sp)
addu a2,a1,a2
sw a2,0x24(sp)
beq a1,a2,0x00319104
_lw t9,-0x4268(gp)
subu a2,a2,a1
sw a3,0x58(sp)
addiu t9,t9,0x2470
bal 0x00312470
_or a0,s2,zero
lw gp,0x18(sp)
lw a3,0x58(sp)
lw v0,0x2c(s8)
andi v0,v0,0x1
bne v0,zero,0x00319338
_lw v1,-0x4268(gp)
lw v0,0x28(s8)
lw a1,0x20(sp)
addiu v0,v0,-0x1
sw a3,0x24(sp)
addiu s7,v1,0x251c
bne a3,a1,0x00318da8
_sw v0,0x28(s8)
b 0x00318dac
_or a2,zero,zero
lw a1,-0x7924(gp)
lw s5,0x58(sp)
addiu s7,v0,0x251c
addiu a1,a1,0x78e4
or t9,s7,zero
bal 0x0031251c
_or a0,s5,zero
or a1,s5,zero
lw gp,0x18(sp)
or a0,s2,zero
lw s5,-0x4268(gp)
addiu s5,s5,0x27e8
or t9,s5,zero
bal 0x003127e8
_lw a2,0x3c(sp)
lw v1,0x2c(s8)
lw v0,0x28(s8)
lw gp,0x18(sp)
addiu v1,v1,-0x1
or v0,v1,v0
andi v0,v0,0x1
bne v0,zero,0x003189dc
_sw v1,0x2c(s8)
b 0x00318a04
_lw a0,0x38(sp)
b 0x00318cd4
_addiu a1,a1,-0x5450
lw s7,0x0(s0)
b 0x003188d8
_li s4,0x1
sw a1,0x0(s0)
lb v0,0x1(s7)
beq v0,zero,0x00319370
_lw a0,-0x4564(gp)
andi v0,v0,0xff
sll v0,v0,0x1
addu v0,a0,v0
lhu v0,0x0(v0)
andi v0,v0,0x4
bne v0,zero,0x00319200
_addiu v1,s7,0x2
b 0x003188d8
_or s7,a1,zero
andi v0,v0,0xff
sll v0,v0,0x1
addu v0,a0,v0
lhu v0,0x0(v0)
andi v0,v0,0x4
beq v0,zero,0x00318eec
_addiu v1,v1,0x1
sw v1,0x0(s0)
lb v0,0x0(v1)
bne v0,zero,0x003191e4
_or s7,v1,zero
b 0x003188dc
_lb a0,0x0(s7)
lw v0,0x50(sp)
addiu s7,sp,0x20
or a0,s8,zero
sw v1,0x0(s0)
addiu t9,v0,0x439c
or a2,s7,zero
bal 0x0031439c
_or a1,s0,zero
or s5,v0,zero
lw a0,0x24(sp)
lw v0,0x20(sp)
beq v0,a0,0x00319290
_lw gp,0x18(sp)
lw a1,-0x7924(gp)
or a0,s7,zero
lw t9,-0x4268(gp)
addiu t9,t9,0x2594
bal 0x00312594
_addiu a1,a1,-0x8c
lw a1,0x20(sp)
lw a0,0x24(sp)
beq a1,a0,0x00319290
_lw gp,0x18(sp)
lw t9,-0x4268(gp)
subu a2,a0,a1
addiu t9,t9,0x2470
bal 0x00312470
_or a0,s2,zero
lw gp,0x18(sp)
lw a0,0x20(sp)
beq a0,zero,0x0031902c
_lw t9,-0x3628(gp)
jalr t9
_nop
b 0x0031902c
_lw gp,0x18(sp)
b 0x003190e0
_or a2,a3,zero
or a2,s2,zero
or a1,s0,zero
addiu t9,t9,0x7ba0
bal 0x00317ba0
_or a0,s8,zero
lw gp,0x18(sp)
beq v0,zero,0x00318b58
_or s5,v0,zero
b 0x00318aa8
_lw v0,0x0(s8)
or a0,s2,zero
lw t9,-0x4268(gp)
addiu t9,t9,0x2594
bal 0x00312594
_addiu a1,a1,-0x6eec
b 0x00318ac0
_lw gp,0x18(sp)
lw a1,-0x77f0(gp)
b 0x00318dfc
_addiu a1,a1,0x208
lw s7,0x0(s0)
li v0,0x46
lb a1,0x0(s7)
bne a1,v0,0x00318a54
_andi a0,a0,0x2c00
or s6,zero,zero
b 0x003188d8
_li s5,0x1
b 0x00318dd0
_or a2,zero,zero
addiu v1,a2,0x2
sw v1,0x0(s0)
b 0x003188d8
_or s7,v1,zero
lw v0,-0x4268(gp)
or a0,s2,zero
lw a1,-0x7924(gp)
sw a3,0x58(sp)
addiu s7,v0,0x251c
or t9,s7,zero
bal 0x0031251c
_addiu a1,a1,0x78e4
lw v0,0x2c(s8)
lw gp,0x18(sp)
lw a3,0x58(sp)
addiu v0,v0,-0x1
b 0x00318d9c
_sw v0,0x2c(s8)
b 0x003188d8
_or s7,a1,zero
b 0x0031902c
_li s4,0x1
jalr t9
_nop
(translation_unit "int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)" identifier (parameter_list "(uint *param_1,undefined4 *param_2,int *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "puVar2 = PTR_UINT_004c12dc;" (assignment_expression "puVar2 = PTR_UINT_004c12dc" identifier = identifier) ;) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;) (expression_statement "bVar1 = false;" (assignment_expression "bVar1 = false" identifier = false) ;) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (while_statement "while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" { (expression_statement "iVar4 = (int)*pcVar6;" (assignment_expression "iVar4 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (if_statement "if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" { (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" if (parenthesized_expression "((!bVar1) && ((uVar3 & 0x300) != 0))" ( (binary_expression "(!bVar1) && ((uVar3 & 0x300) != 0)" (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) && (parenthesized_expression "((uVar3 & 0x300) != 0)" ( (binary_expression "(uVar3 & 0x300) != 0" (parenthesized_expression "(uVar3 & 0x300)" ( (binary_expression "uVar3 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" { (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" identifier = (call_expression "FUN_00317ba0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) })) (if_statement "if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" if (parenthesized_expression "((uVar3 & 1) != 0)" ( (binary_expression "(uVar3 & 1) != 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" { (if_statement "if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" if (parenthesized_expression "(param_1[0xc] != 0)" ( (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" { (expression_statement "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);" (call_expression "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec)" identifier (argument_list "(param_3,PTR_UINT_004c12dc + -0x6eec)" ( identifier , (binary_expression "PTR_UINT_004c12dc + -0x6eec" identifier + number_literal) ))) ;) })) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (if_statement "if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" { (if_statement "if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" if (parenthesized_expression "(*param_3 != param_3[1])" ( (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" * identifier) != (subscript_expression "param_3[1]" identifier [ number_literal ])) )) (compound_statement "{\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" { (expression_statement "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);" (call_expression "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" identifier (argument_list "(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" ( identifier , (binary_expression "PTR_s_in_a_linker_script_004c191c + -0x8c" identifier + number_literal) ))) ;) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) })) (expression_statement "pcVar6 = (char *)FUN_00311db8(uVar3);" (assignment_expression "pcVar6 = (char *)FUN_00311db8(uVar3)" identifier = (cast_expression "(char *)FUN_00311db8(uVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00311db8(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))))) ;) (if_statement "if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }" if (parenthesized_expression "((pcVar6 != (char *)0x0) && (*pcVar6 != '\0'))" ( (binary_expression "(pcVar6 != (char *)0x0) && (*pcVar6 != '\0')" (parenthesized_expression "(pcVar6 != (char *)0x0)" ( (binary_expression "pcVar6 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar6 != '\0')" ( (binary_expression "*pcVar6 != '\0'" (pointer_expression "*pcVar6" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n            FUN_00312594(param_3,pcVar6);\n          }" { (expression_statement "FUN_00312594(param_3,pcVar6);" (call_expression "FUN_00312594(param_3,pcVar6)" identifier (argument_list "(param_3,pcVar6)" ( identifier , identifier ))) ;) })) })) })) (return_statement "return iVar5;" return identifier ;) })) (expression_statement "uVar3 = iVar4 - 0x30U & 0xff;" (assignment_expression "uVar3 = iVar4 - 0x30U & 0xff" identifier = (binary_expression "iVar4 - 0x30U & 0xff" (binary_expression "iVar4 - 0x30U" identifier - number_literal) & number_literal)) ;) (if_statement "if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" if (parenthesized_expression "(uVar3 < 0x46)" ( (binary_expression "uVar3 < 0x46" identifier < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" { comment comment (expression_statement "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;" (assignment_expression "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" identifier = (call_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" (parenthesized_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))" ( (pointer_expression "*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" * (cast_expression "(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" ( (ERROR "gold::Position_dependent_options::" identifier : : identifier : :) (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210" (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c)" identifier + (pointer_expression "*(int *)(puVar2 + uVar3 * 4 + -0x657c)" * (cast_expression "(int *)(puVar2 + uVar3 * 4 + -0x657c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar3 * 4 + -0x657c)" ( (binary_expression "puVar2 + uVar3 * 4 + -0x657c" (binary_expression "puVar2 + uVar3 * 4" identifier + (binary_expression "uVar3 * 4" identifier * number_literal)) + number_literal) ))))) + number_literal) )))) )) (argument_list "(iVar4,uVar3 < 0x46,pcVar6)" ( identifier , (binary_expression "uVar3 < 0x46" identifier < number_literal) , identifier )))) ;) (return_statement "return iVar5;" return identifier ;) })) (if_statement "if ((*param_1 & 0x300) == 0) break;" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" identifier = (call_expression "FUN_00317ba0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (if_statement "if (iVar5 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */\n/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */\n/* WARNING: Struct "Output_section_headers": ignoring overlapping field "layout_" */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Struct "Output_reduced_debug_abbrev_section": ignoring overlapping field "data_" */\n/* WARNING: Struct "Output_reduced_debug_info_section": ignoring overlapping field "data_" */\n\nint demangle_signature(work_stuff *work,char **mangled,string *declp)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  string s;\n  string tname;\n  string trawname;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = *mangled;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }\n    if ((work->options & 0x300U) == 0) break;\n    iVar5 = demangle_args(work,mangled,declp);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = *mangled;\n  }\n  return 0;\n}\n\n" comment comment comment comment comment comment (function_definition "int demangle_signature(work_stuff *work,char **mangled,string *declp)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  string s;\n  string tname;\n  string trawname;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = *mangled;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }\n    if ((work->options & 0x300U) == 0) break;\n    iVar5 = demangle_args(work,mangled,declp);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = *mangled;\n  }\n  return 0;\n}" primitive_type (function_declarator "demangle_signature(work_stuff *work,char **mangled,string *declp)" identifier (parameter_list "(work_stuff *work,char **mangled,string *declp)" ( (parameter_declaration "work_stuff *work" type_identifier (pointer_declarator "*work" * identifier)) , (parameter_declaration "char **mangled" primitive_type (pointer_declarator "**mangled" * (pointer_declarator "*mangled" * identifier))) , (parameter_declaration "string *declp" type_identifier (pointer_declarator "*declp" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  string s;\n  string tname;\n  string trawname;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = *mangled;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }\n    if ((work->options & 0x300U) == 0) break;\n    iVar5 = demangle_args(work,mangled,declp);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = *mangled;\n  }\n  return 0;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "string s;" type_identifier identifier ;) (declaration "string tname;" type_identifier identifier ;) (declaration "string trawname;" type_identifier identifier ;) (expression_statement "puVar2 = PTR_UINT_004c12dc;" (assignment_expression "puVar2 = PTR_UINT_004c12dc" identifier = identifier) ;) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;) (expression_statement "bVar1 = false;" (assignment_expression "bVar1 = false" identifier = false) ;) (expression_statement "pcVar6 = *mangled;" (assignment_expression "pcVar6 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (while_statement "while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }\n    if ((work->options & 0x300U) == 0) break;\n    iVar5 = demangle_args(work,mangled,declp);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = *mangled;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }\n    if ((work->options & 0x300U) == 0) break;\n    iVar5 = demangle_args(work,mangled,declp);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = *mangled;\n  }" { (expression_statement "iVar4 = (int)*pcVar6;" (assignment_expression "iVar4 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (if_statement "if (iVar4 == 0) {\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar3 = work->options;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" { (expression_statement "uVar3 = work->options;" (assignment_expression "uVar3 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) (if_statement "if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }" if (parenthesized_expression "((!bVar1) && ((uVar3 & 0x300) != 0))" ( (binary_expression "(!bVar1) && ((uVar3 & 0x300) != 0)" (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) && (parenthesized_expression "((uVar3 & 0x300) != 0)" ( (binary_expression "(uVar3 & 0x300) != 0" (parenthesized_expression "(uVar3 & 0x300)" ( (binary_expression "uVar3 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar5 = demangle_args(work,mangled,declp);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = work->options;\n      }" { (expression_statement "iVar5 = demangle_args(work,mangled,declp);" (assignment_expression "iVar5 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = work->options;" (assignment_expression "uVar3 = work->options" identifier = (field_expression "work->options" identifier -> field_identifier)) ;) })) (if_statement "if ((uVar3 & 1) != 0) {\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }" if (parenthesized_expression "((uVar3 & 1) != 0)" ( (binary_expression "(uVar3 & 1) != 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }\n        iVar4 = work->type_quals;\n        if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }\n      }" { (if_statement "if (work->static_type != 0) {\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }" if (parenthesized_expression "(work->static_type != 0)" ( (binary_expression "work->static_type != 0" (field_expression "work->static_type" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n          string_append(declp,PTR_UINT_004c12dc + -0x6eec);\n        }" { (expression_statement "string_append(declp,PTR_UINT_004c12dc + -0x6eec);" (call_expression "string_append(declp,PTR_UINT_004c12dc + -0x6eec)" identifier (argument_list "(declp,PTR_UINT_004c12dc + -0x6eec)" ( identifier , (binary_expression "PTR_UINT_004c12dc + -0x6eec" identifier + number_literal) ))) ;) })) (expression_statement "iVar4 = work->type_quals;" (assignment_expression "iVar4 = work->type_quals" identifier = (field_expression "work->type_quals" identifier -> field_identifier)) ;) (if_statement "if (iVar4 != 0) {\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }\n          pcVar6 = qualifier_string(iVar4);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }\n        }" { (if_statement "if (declp->b != declp->p) {\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }" if (parenthesized_expression "(declp->b != declp->p)" ( (binary_expression "declp->b != declp->p" (field_expression "declp->b" identifier -> field_identifier) != (field_expression "declp->p" identifier -> field_identifier)) )) (compound_statement "{\n            string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            iVar4 = work->type_quals;\n          }" { (expression_statement "string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c);" (call_expression "string_append(declp,PTR_s_in_a_linker_script_004c191c + -0x8c)" identifier (argument_list "(declp,PTR_s_in_a_linker_script_004c191c + -0x8c)" ( identifier , (binary_expression "PTR_s_in_a_linker_script_004c191c + -0x8c" identifier + number_literal) ))) ;) (expression_statement "iVar4 = work->type_quals;" (assignment_expression "iVar4 = work->type_quals" identifier = (field_expression "work->type_quals" identifier -> field_identifier)) ;) })) (expression_statement "pcVar6 = qualifier_string(iVar4);" (assignment_expression "pcVar6 = qualifier_string(iVar4)" identifier = (call_expression "qualifier_string(iVar4)" identifier (argument_list "(iVar4)" ( identifier )))) ;) (if_statement "if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            string_append(declp,pcVar6);\n          }" if (parenthesized_expression "((pcVar6 != (char *)0x0) && (*pcVar6 != '\0'))" ( (binary_expression "(pcVar6 != (char *)0x0) && (*pcVar6 != '\0')" (parenthesized_expression "(pcVar6 != (char *)0x0)" ( (binary_expression "pcVar6 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar6 != '\0')" ( (binary_expression "*pcVar6 != '\0'" (pointer_expression "*pcVar6" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n            string_append(declp,pcVar6);\n          }" { (expression_statement "string_append(declp,pcVar6);" (call_expression "string_append(declp,pcVar6)" identifier (argument_list "(declp,pcVar6)" ( identifier , identifier ))) ;) })) })) })) (return_statement "return iVar5;" return identifier ;) })) (expression_statement "uVar3 = iVar4 - 0x30U & 0xff;" (assignment_expression "uVar3 = iVar4 - 0x30U & 0xff" identifier = (binary_expression "iVar4 - 0x30U & 0xff" (binary_expression "iVar4 - 0x30U" identifier - number_literal) & number_literal)) ;) (if_statement "if (uVar3 < 0x46) {\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }" if (parenthesized_expression "(uVar3 < 0x46)" ( (binary_expression "uVar3 < 0x46" identifier < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not emulate address calculation at 0x003188f8 */\n                    /* WARNING: Treating indirect jump as call */\n      iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);\n      return iVar5;\n    }" { comment comment (expression_statement "iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6);" (assignment_expression "iVar5 = (*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6)" identifier = (call_expression "(*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))\n                        (iVar4,uVar3 < 0x46,pcVar6)" (parenthesized_expression "(*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)))" ( (pointer_expression "*(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c))" * (cast_expression "(code *)(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c))" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&gold::Position_dependent_options::default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c))" ( (ERROR "&gold::Position_dependent_options::" (pointer_expression "&gold" & identifier) : : identifier : :) (binary_expression "default_options_.relax_.\n                          user_set_via_option + *(int *)(puVar2 + uVar3 * 4 + -0x657c)" (field_expression "default_options_.relax_.\n                          user_set_via_option" (field_expression "default_options_.relax_" identifier . field_identifier) . field_identifier) + (pointer_expression "*(int *)(puVar2 + uVar3 * 4 + -0x657c)" * (cast_expression "(int *)(puVar2 + uVar3 * 4 + -0x657c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar3 * 4 + -0x657c)" ( (binary_expression "puVar2 + uVar3 * 4 + -0x657c" (binary_expression "puVar2 + uVar3 * 4" identifier + (binary_expression "uVar3 * 4" identifier * number_literal)) + number_literal) ))))) )))) )) (argument_list "(iVar4,uVar3 < 0x46,pcVar6)" ( identifier , (binary_expression "uVar3 < 0x46" identifier < number_literal) , identifier )))) ;) (return_statement "return iVar5;" return identifier ;) })) (if_statement "if ((work->options & 0x300U) == 0) break;" if (parenthesized_expression "((work->options & 0x300U) == 0)" ( (binary_expression "(work->options & 0x300U) == 0" (parenthesized_expression "(work->options & 0x300U)" ( (binary_expression "work->options & 0x300U" (field_expression "work->options" identifier -> field_identifier) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = demangle_args(work,mangled,declp);" (assignment_expression "iVar5 = demangle_args(work,mangled,declp)" identifier = (call_expression "demangle_args(work,mangled,declp)" identifier (argument_list "(work,mangled,declp)" ( identifier , identifier , identifier )))) ;) (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (if_statement "if (iVar5 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar6 = *mangled;" (assignment_expression "pcVar6 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}\n\n" (function_definition "int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" primitive_type (function_declarator "FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)" identifier (parameter_list "(uint *param_1,undefined4 *param_2,int *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "puVar2 = PTR_UINT_004c12dc;" (assignment_expression "puVar2 = PTR_UINT_004c12dc" identifier = identifier) ;) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;) (expression_statement "bVar1 = false;" (assignment_expression "bVar1 = false" identifier = false) ;) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (while_statement "while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" { (expression_statement "iVar4 = (int)*pcVar6;" (assignment_expression "iVar4 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (if_statement "if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" { (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" if (parenthesized_expression "((!bVar1) && ((uVar3 & 0x300) != 0))" ( (binary_expression "(!bVar1) && ((uVar3 & 0x300) != 0)" (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) && (parenthesized_expression "((uVar3 & 0x300) != 0)" ( (binary_expression "(uVar3 & 0x300) != 0" (parenthesized_expression "(uVar3 & 0x300)" ( (binary_expression "uVar3 & 0x300" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" { (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" identifier = (call_expression "FUN_00317ba0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n          return 0;\n        }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) })) (if_statement "if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" if (parenthesized_expression "((uVar3 & 1) != 0)" ( (binary_expression "(uVar3 & 1) != 0" (parenthesized_expression "(uVar3 & 1)" ( (binary_expression "uVar3 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" { (if_statement "if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" if (parenthesized_expression "(param_1[0xc] != 0)" ( (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" { (expression_statement "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);" (call_expression "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec)" identifier (argument_list "(param_3,PTR_UINT_004c12dc + -0x6eec)" ( identifier , (binary_expression "PTR_UINT_004c12dc + -0x6eec" identifier + number_literal) ))) ;) })) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (if_statement "if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" if (parenthesized_expression "(uVar3 != 0)" ( (binary_expression "uVar3 != 0" identifier != number_literal) )) (compound_statement "{\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" { (if_statement "if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" if (parenthesized_expression "(*param_3 != param_3[1])" ( (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" * identifier) != (subscript_expression "param_3[1]" identifier [ number_literal ])) )) (compound_statement "{\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" { (expression_statement "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);" (call_expression "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" identifier (argument_list "(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" ( identifier , (binary_expression "PTR_s_in_a_linker_script_004c191c + -0x8c" identifier + number_literal) ))) ;) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) })) (expression_statement "pcVar6 = (char *)FUN_00311db8(uVar3);" (assignment_expression "pcVar6 = (char *)FUN_00311db8(uVar3)" identifier = (cast_expression "(char *)FUN_00311db8(uVar3)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00311db8(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))))) ;) (if_statement "if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }" if (parenthesized_expression "((pcVar6 != (char *)0x0) && (*pcVar6 != '\0'))" ( (binary_expression "(pcVar6 != (char *)0x0) && (*pcVar6 != '\0')" (parenthesized_expression "(pcVar6 != (char *)0x0)" ( (binary_expression "pcVar6 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*pcVar6 != '\0')" ( (binary_expression "*pcVar6 != '\0'" (pointer_expression "*pcVar6" * identifier) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n            FUN_00312594(param_3,pcVar6);\n          }" { (expression_statement "FUN_00312594(param_3,pcVar6);" (call_expression "FUN_00312594(param_3,pcVar6)" identifier (argument_list "(param_3,pcVar6)" ( identifier , identifier ))) ;) })) })) })) (return_statement "return iVar5;" return identifier ;) })) (expression_statement "uVar3 = iVar4 - 0x30U & 0xff;" (assignment_expression "uVar3 = iVar4 - 0x30U & 0xff" identifier = (binary_expression "iVar4 - 0x30U & 0xff" (binary_expression "iVar4 - 0x30U" identifier - number_literal) & number_literal)) ;) (if_statement "if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" if (parenthesized_expression "(uVar3 < 0x46)" ( (binary_expression "uVar3 < 0x46" identifier < number_literal) )) (compound_statement "{\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" { (expression_statement "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;" (assignment_expression "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" identifier = (call_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" (parenthesized_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))" ( (pointer_expression "*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" * (cast_expression "(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" ( (ERROR "gold::Position_dependent_options::" identifier : : identifier : :) (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210" (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c)" identifier + (pointer_expression "*(int *)(puVar2 + uVar3 * 4 + -0x657c)" * (cast_expression "(int *)(puVar2 + uVar3 * 4 + -0x657c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar3 * 4 + -0x657c)" ( (binary_expression "puVar2 + uVar3 * 4 + -0x657c" (binary_expression "puVar2 + uVar3 * 4" identifier + (binary_expression "uVar3 * 4" identifier * number_literal)) + number_literal) ))))) + number_literal) )))) )) (argument_list "(iVar4,uVar3 < 0x46,pcVar6)" ( identifier , (binary_expression "uVar3 < 0x46" identifier < number_literal) , identifier )))) ;) (return_statement "return iVar5;" return identifier ;) })) (if_statement "if ((*param_1 & 0x300) == 0) break;" if (parenthesized_expression "((*param_1 & 0x300) == 0)" ( (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" ( (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" * identifier) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" identifier = (call_expression "FUN_00317ba0(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (if_statement "if (iVar5 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" identifier = (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * 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 (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (unary_expression ! IDENT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) })) })) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - LIT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (ERROR IDENT : : IDENT : :) (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) + LIT) )))) )) (argument_list ( IDENT , (binary_expression IDENT < LIT) , IDENT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) })) (return_statement return LIT ;) })))
(function_definition "int FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)\n\n{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" (primitive_type "int") (function_declarator "FUN_00318850(uint *param_1,undefined4 *param_2,int *param_3)" (identifier "FUN_00318850") (parameter_list "(uint *param_1,undefined4 *param_2,int *param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  bool bVar1;\n  undefined *puVar2;\n  uint uVar3;\n  int iVar4;\n  int iVar5;\n  char *pcVar6;\n  \n  puVar2 = PTR_UINT_004c12dc;\n  iVar5 = 1;\n  bVar1 = false;\n  pcVar6 = (char *)*param_2;\n  while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }\n  return 0;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (expression_statement "puVar2 = PTR_UINT_004c12dc;" (assignment_expression "puVar2 = PTR_UINT_004c12dc" (identifier "puVar2") (= "=") (identifier "PTR_UINT_004c12dc")) (; ";")) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" (identifier "iVar5") (= "=") (number_literal "1")) (; ";")) (expression_statement "bVar1 = false;" (assignment_expression "bVar1 = false" (identifier "bVar1") (= "=") (false "false")) (; ";")) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" (identifier "pcVar6") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (while_statement "while( true ) {\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar4 = (int)*pcVar6;\n    if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }\n    uVar3 = iVar4 - 0x30U & 0xff;\n    if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }\n    if ((*param_1 & 0x300) == 0) break;\n    iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n    bVar1 = true;\n    if (iVar5 == 0) {\n      return 0;\n    }\n    pcVar6 = (char *)*param_2;\n  }" ({ "{") (expression_statement "iVar4 = (int)*pcVar6;" (assignment_expression "iVar4 = (int)*pcVar6" (identifier "iVar4") (= "=") (cast_expression "(int)*pcVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")))) (; ";")) (if_statement "if (iVar4 == 0) {\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = *param_1;\n      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }\n      if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }\n      return iVar5;\n    }" ({ "{") (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" (identifier "uVar3") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((!bVar1) && ((uVar3 & 0x300) != 0)) {\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" (if "if") (parenthesized_expression "((!bVar1) && ((uVar3 & 0x300) != 0))" (( "(") (binary_expression "(!bVar1) && ((uVar3 & 0x300) != 0)" (parenthesized_expression "(!bVar1)" (( "(") (unary_expression "!bVar1" (! "!") (identifier "bVar1")) () ")")) (&& "&&") (parenthesized_expression "((uVar3 & 0x300) != 0)" (( "(") (binary_expression "(uVar3 & 0x300) != 0" (parenthesized_expression "(uVar3 & 0x300)" (( "(") (binary_expression "uVar3 & 0x300" (identifier "uVar3") (& "&") (number_literal "0x300")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        iVar5 = FUN_00317ba0(param_1,param_2,param_3);\n        if (iVar5 == 0) {\n          return 0;\n        }\n        uVar3 = *param_1;\n      }" ({ "{") (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" (identifier "iVar5") (= "=") (call_expression "FUN_00317ba0(param_1,param_2,param_3)" (identifier "FUN_00317ba0") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar5 == 0) {\n          return 0;\n        }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar3 = *param_1;" (assignment_expression "uVar3 = *param_1" (identifier "uVar3") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (} "}"))) (if_statement "if ((uVar3 & 1) != 0) {\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" (if "if") (parenthesized_expression "((uVar3 & 1) != 0)" (( "(") (binary_expression "(uVar3 & 1) != 0" (parenthesized_expression "(uVar3 & 1)" (( "(") (binary_expression "uVar3 & 1" (identifier "uVar3") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }\n        uVar3 = param_1[0xe];\n        if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }\n      }" ({ "{") (if_statement "if (param_1[0xc] != 0) {\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" (if "if") (parenthesized_expression "(param_1[0xc] != 0)" (( "(") (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);\n        }" ({ "{") (expression_statement "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);" (call_expression "FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec)" (identifier "FUN_00312594") (argument_list "(param_3,PTR_UINT_004c12dc + -0x6eec)" (( "(") (identifier "param_3") (, ",") (binary_expression "PTR_UINT_004c12dc + -0x6eec" (identifier "PTR_UINT_004c12dc") (+ "+") (number_literal "-0x6eec")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" (identifier "uVar3") (= "=") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]"))) (; ";")) (if_statement "if (uVar3 != 0) {\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" (if "if") (parenthesized_expression "(uVar3 != 0)" (( "(") (binary_expression "uVar3 != 0" (identifier "uVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }\n          pcVar6 = (char *)FUN_00311db8(uVar3);\n          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }\n        }" ({ "{") (if_statement "if (*param_3 != param_3[1]) {\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" (if "if") (parenthesized_expression "(*param_3 != param_3[1])" (( "(") (binary_expression "*param_3 != param_3[1]" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (!= "!=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);\n            uVar3 = param_1[0xe];\n          }" ({ "{") (expression_statement "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);" (call_expression "FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" (identifier "FUN_00312594") (argument_list "(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c)" (( "(") (identifier "param_3") (, ",") (binary_expression "PTR_s_in_a_linker_script_004c191c + -0x8c" (identifier "PTR_s_in_a_linker_script_004c191c") (+ "+") (number_literal "-0x8c")) () ")"))) (; ";")) (expression_statement "uVar3 = param_1[0xe];" (assignment_expression "uVar3 = param_1[0xe]" (identifier "uVar3") (= "=") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]"))) (; ";")) (} "}"))) (expression_statement "pcVar6 = (char *)FUN_00311db8(uVar3);" (assignment_expression "pcVar6 = (char *)FUN_00311db8(uVar3)" (identifier "pcVar6") (= "=") (cast_expression "(char *)FUN_00311db8(uVar3)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00311db8(uVar3)" (identifier "FUN_00311db8") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))))) (; ";")) (if_statement "if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {\n            FUN_00312594(param_3,pcVar6);\n          }" (if "if") (parenthesized_expression "((pcVar6 != (char *)0x0) && (*pcVar6 != '\0'))" (( "(") (binary_expression "(pcVar6 != (char *)0x0) && (*pcVar6 != '\0')" (parenthesized_expression "(pcVar6 != (char *)0x0)" (( "(") (binary_expression "pcVar6 != (char *)0x0" (identifier "pcVar6") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*pcVar6 != '\0')" (( "(") (binary_expression "*pcVar6 != '\0'" (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n            FUN_00312594(param_3,pcVar6);\n          }" ({ "{") (expression_statement "FUN_00312594(param_3,pcVar6);" (call_expression "FUN_00312594(param_3,pcVar6)" (identifier "FUN_00312594") (argument_list "(param_3,pcVar6)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar6") () ")"))) (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}"))) (expression_statement "uVar3 = iVar4 - 0x30U & 0xff;" (assignment_expression "uVar3 = iVar4 - 0x30U & 0xff" (identifier "uVar3") (= "=") (binary_expression "iVar4 - 0x30U & 0xff" (binary_expression "iVar4 - 0x30U" (identifier "iVar4") (- "-") (number_literal "0x30U")) (& "&") (number_literal "0xff"))) (; ";")) (if_statement "if (uVar3 < 0x46) {\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" (if "if") (parenthesized_expression "(uVar3 < 0x46)" (( "(") (binary_expression "uVar3 < 0x46" (identifier "uVar3") (< "<") (number_literal "0x46")) () ")")) (compound_statement "{\n                    \n                    \n      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;\n      return iVar5;\n    }" ({ "{") (expression_statement "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)\n      ;" (assignment_expression "iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" (identifier "iVar5") (= "=") (call_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)" (parenthesized_expression "(*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))" (( "(") (pointer_expression "*(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" (* "*") (cast_expression "(code *)(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(gold::Position_dependent_options::default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210)" (( "(") (ERROR "gold::Position_dependent_options::" (identifier "gold") (: ":") (: ":") (identifier "Position_dependent_options") (: ":") (: ":")) (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210" (binary_expression "default_options_ +\n                        *(int *)(puVar2 + uVar3 * 4 + -0x657c)" (identifier "default_options_") (+ "+") (pointer_expression "*(int *)(puVar2 + uVar3 * 4 + -0x657c)" (* "*") (cast_expression "(int *)(puVar2 + uVar3 * 4 + -0x657c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar3 * 4 + -0x657c)" (( "(") (binary_expression "puVar2 + uVar3 * 4 + -0x657c" (binary_expression "puVar2 + uVar3 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar3 * 4" (identifier "uVar3") (* "*") (number_literal "4"))) (+ "+") (number_literal "-0x657c")) () ")"))))) (+ "+") (number_literal "0x3210")) () ")")))) () ")")) (argument_list "(iVar4,uVar3 < 0x46,pcVar6)" (( "(") (identifier "iVar4") (, ",") (binary_expression "uVar3 < 0x46" (identifier "uVar3") (< "<") (number_literal "0x46")) (, ",") (identifier "pcVar6") () ")")))) (; ";")) (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}"))) (if_statement "if ((*param_1 & 0x300) == 0) break;" (if "if") (parenthesized_expression "((*param_1 & 0x300) == 0)" (( "(") (binary_expression "(*param_1 & 0x300) == 0" (parenthesized_expression "(*param_1 & 0x300)" (( "(") (binary_expression "*param_1 & 0x300" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x300")) () ")")) (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar5 = FUN_00317ba0(param_1,param_2,param_3);" (assignment_expression "iVar5 = FUN_00317ba0(param_1,param_2,param_3)" (identifier "iVar5") (= "=") (call_expression "FUN_00317ba0(param_1,param_2,param_3)" (identifier "FUN_00317ba0") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (if_statement "if (iVar5 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar6 = (char *)*param_2;" (assignment_expression "pcVar6 = (char *)*param_2" (identifier "pcVar6") (= "=") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* WARNING: Struct "Output_section_headers": ignoring overlapping field "layout_" */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Struct "Output_reduced_debug_abbrev_section": ignoring overlapping field "data_" */
/* WARNING: Struct "Output_reduced_debug_info_section": ignoring overlapping field "data_" */

int function_1(type_1 *work,char **mangled,type_2 *declp)

{
  bool bVar1;
  type_3 *var_10;
  type_4 var_2;
  int var_1;
  int var_4;
  char *var_9;
  type_2 s;
  type_2 tname;
  type_2 trawname;
  
  var_10 = var_6;
  var_4 = 1;
  bVar1 = false;
  var_9 = *mangled;
  while( true ) {
    var_1 = (int)*var_9;
    if (var_1 == 0) {
      var_2 = work->options;
      if ((!bVar1) && ((var_2 & 0x300) != 0)) {
        var_4 = var_3(work,mangled,declp);
        if (var_4 == 0) {
          return 0;
        }
        var_2 = work->options;
      }
      if ((var_2 & 1) != 0) {
        if (work->static_type != 0) {
          var_5(declp,var_6 + -0x6eec);
        }
        var_1 = work->type_quals;
        if (var_1 != 0) {
          if (declp->b != declp->p) {
            var_5(declp,var_7 + -0x8c);
            var_1 = work->type_quals;
          }
          var_9 = var_8(var_1);
          if ((var_9 != (char *)0x0) && (*var_9 != '\0')) {
            var_5(declp,var_9);
          }
        }
      }
      return var_4;
    }
    var_2 = var_1 - 0x30U & 0xff;
    if (var_2 < 0x46) {
                    /* WARNING: Could not emulate address calculation at 0x003188f8 */
                    /* WARNING: Treating indirect jump as call */
      var_4 = (*(type_5 *)(&gold::Position_dependent_options::default_options_.relax_.
                          user_set_via_option + *(int *)(var_10 + var_2 * 4 + -0x657c)))
                        (var_1,var_2 < 0x46,var_9);
      return var_4;
    }
    if ((work->options & 0x300U) == 0) break;
    var_4 = var_3(work,mangled,declp);
    bVar1 = true;
    if (var_4 == 0) {
      return 0;
    }
    var_9 = *mangled;
  }
  return 0;
}


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

int MASKED(uint *param_1,undefined4 *param_2,int *param_3)

{
  bool bVar1;
  undefined *puVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  
  puVar2 = PTR_UINT_004c12dc;
  iVar5 = 1;
  bVar1 = false;
  pcVar6 = (char *)*param_2;
  while( true ) {
    iVar4 = (int)*pcVar6;
    if (iVar4 == 0) {
      uVar3 = *param_1;
      if ((!bVar1) && ((uVar3 & 0x300) != 0)) {
        iVar5 = FUN_00317ba0(param_1,param_2,param_3);
        if (iVar5 == 0) {
          return 0;
        }
        uVar3 = *param_1;
      }
      if ((uVar3 & 1) != 0) {
        if (param_1[0xc] != 0) {
          FUN_00312594(param_3,PTR_UINT_004c12dc + -0x6eec);
        }
        uVar3 = param_1[0xe];
        if (uVar3 != 0) {
          if (*param_3 != param_3[1]) {
            FUN_00312594(param_3,PTR_s_in_a_linker_script_004c191c + -0x8c);
            uVar3 = param_1[0xe];
          }
          pcVar6 = (char *)FUN_00311db8(uVar3);
          if ((pcVar6 != (char *)0x0) && (*pcVar6 != '\0')) {
            FUN_00312594(param_3,pcVar6);
          }
        }
      }
      return iVar5;
    }
    uVar3 = iVar4 - 0x30U & 0xff;
    if (uVar3 < 0x46) {
                    /* WARNING: Could not emulate address calculation at 0x003188f8 */
                    /* WARNING: Treating indirect jump as call */
      iVar5 = (*(code *)(gold::Position_dependent_options::default_options_ +
                        *(int *)(puVar2 + uVar3 * 4 + -0x657c) + 0x3210))(iVar4,uVar3 < 0x46,pcVar6)
      ;
      return iVar5;
    }
    if ((*param_1 & 0x300) == 0) break;
    iVar5 = FUN_00317ba0(param_1,param_2,param_3);
    bVar1 = true;
    if (iVar5 == 0) {
      return 0;
    }
    pcVar6 = (char *)*param_2;
  }
  return 0;
}

