
/* WARNING: Exceeded maximum restarts with more pending */

int charset_to_unicode(char **input,int *inlen,wchar_t *output,int outlen,int charset,
                      charset_state *state,wchar_t *errstr,int errlen)

{
  wchar_t *pwVar1;
  int iVar2;
  charset_spec *pcVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  int *piVar7;
  charset_state *pcVar8;
  _func_void_void_ptr_long *p_Var9;
  _func_void_void_ptr_long *p_Var10;
  unicode_emit_param *in_stack_ffffffa8;
  charset_state localstate;
  unicode_emit_param param;
  
  iVar2 = *(int *)PTR___stack_chk_guard_000be114;
  piVar7 = inlen;
  pcVar8 = (charset_state *)output;
  p_Var9 = (_func_void_void_ptr_long *)outlen;
  pcVar3 = charset_find_spec(charset);
  param.errstr = errstr;
  param.errlen = errlen;
  param.stopped = 0;
  if (state == (charset_state *)0x0) {
    localstate.s0 = 0;
  }
  else {
    localstate = (charset_state)state->s0;
  }
  param.output = output;
  param.outlen = outlen;
  if (0 < *inlen) {
    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);
    do {
      pwVar1 = param.output;
      piVar7 = (int *)(uint)(byte)**input;
      pcVar8 = &localstate;
      p_Var9 = p_Var10;
      in_stack_ffffffa8 = &param;
      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);
      if (param.stopped != 0) {
        iVar4 = (int)pwVar1 - (int)output;
        goto LAB_0001e880;
      }
      if (state != (charset_state *)0x0) {
        state->s0 = (ulong)localstate;
      }
      *input = *input + 1;
      iVar4 = *inlen;
      *inlen = iVar4 + -1;
    } while (0 < iVar4 + -1);
  }
  iVar4 = (int)param.output - (int)output;
LAB_0001e880:
  if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {
    return iVar4 >> 2;
  }
  (*(code *)PTR___stack_chk_fail_000bddb4)();
  if ((int)piVar7 < 0x80) {
    if (pcVar8->s0 != 0) {
      (*p_Var9)(in_stack_ffffffa8,0xffff);
      pcVar8->s0 = 0;
    }
    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);
    return iVar2;
  }
  if ((int)piVar7 - 0xfeU < 2) {
    if (pcVar8->s0 != 0) {
      (*p_Var9)(in_stack_ffffffa8,0xffff);
      pcVar8->s0 = 0;
    }
    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);
    return iVar2;
  }
  if ((int *)0x3f < piVar7 + -0x20) {
    if (pcVar8->s0 != 0) {
      (*p_Var9)(in_stack_ffffffa8,0xffff);
    }
    if (piVar7 + -0x30 < (int *)0x20) {
      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;
      return 0x44000000;
    }
    if (piVar7 + -0x38 < (int *)0x10) {
      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;
      return 0x64000000;
    }
    if (piVar7 + -0x3c < (int *)0x8) {
      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;
      return -0x7c000000;
    }
    if (piVar7 + -0x3e < (int *)0x4) {
      uVar5 = (uint)piVar7 & 3 | 0xa4000000;
      pcVar8->s0 = uVar5;
      return uVar5;
    }
    if ((int *)0x1 < piVar7 + -0x3f) {
      return 0;
    }
    uVar5 = (uint)piVar7 & 1 | 0xc4000000;
    pcVar8->s0 = uVar5;
    return uVar5;
  }
  uVar5 = pcVar8->s0;
  if (uVar5 == 0) {
    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);
    return iVar2;
  }
  uVar6 = (uVar5 & 0xfc000000) + 0x4000000;
  uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6;
  if (((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0) {
    pcVar8->s0 = uVar5 | uVar6;
    return uVar5 | uVar6;
  }
  pcVar8->s0 = 0;
  if (uVar5 - 0xd800 < 0x800) {
    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);
    return iVar2;
  }
  if (uVar5 - 0xfffe < 2) {
    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);
    return iVar2;
  }
  if (uVar5 < 0x80) goto LAB_0001ea8c;
  uVar6 = uVar6 >> 0x1d;
  if (uVar5 < 0x800) {
    if (2 < uVar6) goto LAB_0001ea8c;
LAB_0001ea68:
    if (3 < uVar6) goto LAB_0001ea8c;
LAB_0001ea74:
    if (4 < uVar6) goto LAB_0001ea8c;
  }
  else {
    if (uVar5 < 0x10000) goto LAB_0001ea68;
    if (uVar5 < 0x200000) goto LAB_0001ea74;
    if (0x3ffffff < uVar5) goto LAB_0001eaec;
  }
  if (uVar6 < 6) {
LAB_0001eaec:
    iVar2 = (*p_Var9)(in_stack_ffffffa8);
    return iVar2;
  }
LAB_0001ea8c:
  iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);
  return iVar2;
}



uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,
                       uint *param_6,undefined4 param_7,undefined4 param_8)

{
  uint *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int *piVar6;
  uint *puVar7;
  code *pcVar8;
  code *pcVar9;
  uint **local_58;
  uint local_44;
  uint *local_40;
  code *local_3c;
  undefined4 local_38;
  undefined4 local_34;
  int local_30;
  int local_2c;
  
  local_2c = *(int *)PTR___stack_chk_guard_000be114;
  piVar6 = param_2;
  puVar7 = param_3;
  pcVar8 = param_4;
  iVar2 = charset_find_spec(param_5);
  local_38 = param_7;
  local_34 = param_8;
  local_30 = 0;
  if (param_6 == (uint *)0x0) {
    local_44 = 0;
  }
  else {
    local_44 = *param_6;
  }
  local_40 = param_3;
  local_3c = param_4;
  if (0 < *param_2) {
    local_58 = &local_40;
    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);
    do {
      puVar1 = local_40;
      piVar6 = (int *)(uint)*(byte *)*param_1;
      puVar7 = &local_44;
      pcVar8 = pcVar9;
      (**(code **)(iVar2 + 4))(iVar2);
      if (local_30 != 0) {
        iVar2 = (int)puVar1 - (int)param_3;
        goto LAB_0001e880;
      }
      if (param_6 != (uint *)0x0) {
        *param_6 = local_44;
      }
      *param_1 = *param_1 + 1;
      iVar3 = *param_2;
      *param_2 = iVar3 + -1;
    } while (0 < iVar3 + -1);
  }
  iVar2 = (int)local_40 - (int)param_3;
LAB_0001e880:
  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {
    return iVar2 >> 2;
  }
  (*(code *)PTR___stack_chk_fail_000bddb4)();
  if ((int)piVar6 < 0x80) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
      *puVar7 = 0;
    }
    uVar4 = (*pcVar8)(local_58,piVar6);
    return uVar4;
  }
  if ((int)piVar6 - 0xfeU < 2) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
      *puVar7 = 0;
    }
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if ((int *)0x3f < piVar6 + -0x20) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
    }
    if (piVar6 + -0x30 < (int *)0x20) {
      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;
      return 0x44000000;
    }
    if (piVar6 + -0x38 < (int *)0x10) {
      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;
      return 0x64000000;
    }
    if (piVar6 + -0x3c < (int *)0x8) {
      *puVar7 = (uint)piVar6 & 7 | 0x84000000;
      return 0x84000000;
    }
    if (piVar6 + -0x3e < (int *)0x4) {
      uVar4 = (uint)piVar6 & 3 | 0xa4000000;
      *puVar7 = uVar4;
      return uVar4;
    }
    if ((int *)0x1 < piVar6 + -0x3f) {
      return 0;
    }
    uVar4 = (uint)piVar6 & 1 | 0xc4000000;
    *puVar7 = uVar4;
    return uVar4;
  }
  uVar4 = *puVar7;
  if (uVar4 == 0) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;
  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;
  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {
    *puVar7 = uVar4 | uVar5;
    return uVar4 | uVar5;
  }
  *puVar7 = 0;
  if (uVar4 - 0xd800 < 0x800) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if (uVar4 - 0xfffe < 2) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if (uVar4 < 0x80) goto LAB_0001ea8c;
  uVar5 = uVar5 >> 0x1d;
  if (uVar4 < 0x800) {
    if (2 < uVar5) goto LAB_0001ea8c;
LAB_0001ea68:
    if (3 < uVar5) goto LAB_0001ea8c;
LAB_0001ea74:
    if (4 < uVar5) goto LAB_0001ea8c;
  }
  else {
    if (uVar4 < 0x10000) goto LAB_0001ea68;
    if (uVar4 < 0x200000) goto LAB_0001ea74;
    if (0x3ffffff < uVar4) goto LAB_0001eaec;
  }
  if (uVar5 < 6) {
LAB_0001eaec:
    uVar4 = (*pcVar8)(local_58);
    return uVar4;
  }
LAB_0001ea8c:
  uVar4 = (*pcVar8)(local_58,0xffff);
  return uVar4;
}


lui gp,0xa
addiu gp,gp,0x6a8c
addu gp,gp,t9
addiu sp,sp,-0x68
sw ra,0x64(sp)
sw s8,0x60(sp)
sw s7,0x5c(sp)
sw s6,0x58(sp)
sw s5,0x54(sp)
sw s4,0x50(sp)
sw s3,0x4c(sp)
sw s2,0x48(sp)
sw s1,0x44(sp)
sw s0,0x40(sp)
sw gp,0x18(sp)
or s0,a0,zero
or s1,a1,zero
or s7,a2,zero
or s5,a3,zero
lw s3,0x7c(sp)
lw s4,0x80(sp)
lw v0,-0x70bc(gp)
lw v0,0x0(v0)
sw v0,0x3c(sp)
lw a0,0x78(sp)
lw t9,-0x7f7c(gp)
bal 0x0001e5f0
_nop
lw gp,0x18(sp)
or s2,v0,zero
sw s7,0x28(sp)
sw s5,0x2c(sp)
sw s4,0x30(sp)
lw v0,0x84(sp)
sw v0,0x34(sp)
beq s3,zero,0x0001e7fc
_sw zero,0x38(sp)
lw v0,0x0(s3)
sw v0,0x24(sp)
lw v0,0x0(s1)
blez v0,0x0001e874
_addiu s6,sp,0x24
addiu s5,sp,0x28
lw s4,-0x7fcc(gp)
b 0x0001e82c
_addiu s4,s4,-0x19b0
b 0x0001e7e0
_sw zero,0x24(sp)
subu s7,s8,s7
b 0x0001e880
_sra v0,s7,0x2
lw v0,0x0(s0)
addiu v0,v0,0x1
sw v0,0x0(s0)
lw v0,0x0(s1)
addiu v0,v0,-0x1
blez v0,0x0001e874
_sw v0,0x0(s1)
lw s8,0x28(sp)
lw v0,0x0(s0)
lbu a1,0x0(v0)
sw s5,0x10(sp)
lw t9,0x4(s2)
or a3,s4,zero
or a2,s6,zero
or a0,s2,zero
jalr t9
_nop
lw gp,0x18(sp)
lw v0,0x38(sp)
bne v0,zero,0x0001e804
_nop
beq s3,zero,0x0001e810
_lw v0,0x24(sp)
b 0x0001e810
_sw v0,0x0(s3)
lw v0,0x28(sp)
subu s7,v0,s7
sra v0,s7,0x2
lw a0,0x3c(sp)
lw v1,-0x70bc(gp)
lw v1,0x0(v1)
bne a0,v1,0x0001e8c0
_lw ra,0x64(sp)
lw s8,0x60(sp)
lw s7,0x5c(sp)
lw s6,0x58(sp)
lw s5,0x54(sp)
lw s4,0x50(sp)
lw s3,0x4c(sp)
lw s2,0x48(sp)
lw s1,0x44(sp)
lw s0,0x40(sp)
jr ra
_addiu sp,sp,0x68
lw t9,-0x741c(gp)
jalr t9
_nop
nop
addiu sp,sp,-0x28
sw ra,0x24(sp)
sw s2,0x20(sp)
sw s1,0x1c(sp)
sw s0,0x18(sp)
or s0,a1,zero
or s1,a2,zero
slti v0,a1,0x80
beq v0,zero,0x0001e948
_or s2,a3,zero
lw v0,0x0(a2)
beq v0,zero,0x0001e920
_or a1,s0,zero
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
sw zero,0x0(s1)
or a1,s0,zero
lw a0,0x38(sp)
or t9,s2,zero
jalr t9
_nop
lw ra,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
addiu v0,a1,-0xfe
sltiu v0,v0,0x2
bne v0,zero,0x0001e98c
_addiu v0,a1,-0x80
sltiu v0,v0,0x40
beq v0,zero,0x0001eb00
_nop
lw v0,0x0(a2)
bne v0,zero,0x0001e9c8
_andi s0,a1,0x3f
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
lw v0,0x0(a2)
beq v0,zero,0x0001e9b0
_ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
sw zero,0x0(s1)
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,s2,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
sll a1,v0,0x6
lui v1,0xfc00
and v0,v0,v1
lui v1,0x400
addu v0,v0,v1
sll v1,v0,0x3
xor v1,v1,v0
lui a0,0xe000
and v1,v1,a0
bne v1,zero,0x0001ea28
_or a1,s0,a1
lui v1,0xffff
addiu v1,v1,0x2800
addu v1,a1,v1
sltiu v1,v1,0x800
beq v1,zero,0x0001ea34
_sw zero,0x0(a2)
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
or v0,a1,v0
b 0x0001e930
_sw v0,0x0(a2)
lui v1,0xffff
addiu v1,v1,0x2
addu v1,a1,v1
sltiu v1,v1,0x2
bne v1,zero,0x0001eaa8
_sltiu v1,a1,0x80
bne v1,zero,0x0001ea8c
_sltiu v1,a1,0x800
beq v1,zero,0x0001eac4
_srl v0,v0,0x1d
slti v1,v0,0x3
beq v1,zero,0x0001ea8c
_nop
slti v1,v0,0x4
beq v1,zero,0x0001ea8c
_nop
slti v1,v0,0x5
beq v1,zero,0x0001ea8c
_nop
slti v0,v0,0x6
bne v0,zero,0x0001eaec
_lw a0,0x38(sp)
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,s2,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
lui v1,0x1
sltu v1,a1,v1
bne v1,zero,0x0001ea68
_lui v1,0x20
sltu v1,a1,v1
bne v1,zero,0x0001ea74
_lui v1,0x400
sltu v1,a1,v1
bne v1,zero,0x0001ea80
_lw a0,0x38(sp)
or t9,s2,zero
jalr t9
_nop
b 0x0001e934
_lw ra,0x24(sp)
lw v0,0x0(a2)
beq v0,zero,0x0001eb24
_addiu v0,s0,-0xc0
ori a1,zero,0xffff
lw a0,0x38(sp)
or t9,a3,zero
jalr t9
_nop
addiu v0,s0,-0xc0
sltiu v0,v0,0x20
beq v0,zero,0x0001eb44
_addiu v0,s0,-0xe0
andi s0,s0,0x1f
lui v0,0x4400
or s0,s0,v0
b 0x0001e930
_sw s0,0x0(s1)
sltiu v0,v0,0x10
beq v0,zero,0x0001eb64
_addiu v0,s0,-0xf0
andi s0,s0,0xf
lui v0,0x6400
or s0,s0,v0
b 0x0001e930
_sw s0,0x0(s1)
sltiu v0,v0,0x8
beq v0,zero,0x0001eb84
_addiu v0,s0,-0xf8
andi s0,s0,0x7
lui v0,0x8400
or s0,s0,v0
b 0x0001e930
_sw s0,0x0(s1)
sltiu v0,v0,0x4
beq v0,zero,0x0001eba4
_addiu v0,s0,-0xfc
andi v0,s0,0x3
lui v1,0xa400
or v0,v0,v1
b 0x0001e930
_sw v0,0x0(s1)
sltiu v0,v0,0x2
beq v0,zero,0x0001e934
_lw ra,0x24(sp)
andi v0,s0,0x1
lui v1,0xc400
or v0,v0,v1
b 0x0001e930
_sw v0,0x0(s1)
(translation_unit "uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)\n\n{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}\n\n" (function_definition "uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)\n\n{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" type_identifier (function_declarator "charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" identifier (parameter_list "(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "code *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "undefined4 param_7" type_identifier identifier) , (parameter_declaration "undefined4 param_8" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "code *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "uint *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "code *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000be114;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000be114" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar6 = param_2;" (assignment_expression "piVar6 = param_2" identifier = identifier) ;) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" identifier = identifier) ;) (expression_statement "pcVar8 = param_4;" (assignment_expression "pcVar8 = param_4" identifier = identifier) ;) (expression_statement "iVar2 = charset_find_spec(param_5);" (assignment_expression "iVar2 = charset_find_spec(param_5)" identifier = (call_expression "charset_find_spec(param_5)" identifier (argument_list "(param_5)" ( identifier )))) ;) (expression_statement "local_38 = param_7;" (assignment_expression "local_38 = param_7" identifier = identifier) ;) (expression_statement "local_34 = param_8;" (assignment_expression "local_34 = param_8" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_44 = 0;\n  }" { (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_44 = *param_6;\n  }" else (compound_statement "{\n    local_44 = *param_6;\n  }" { (expression_statement "local_44 = *param_6;" (assignment_expression "local_44 = *param_6" identifier = (pointer_expression "*param_6" * identifier)) ;) }))) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" identifier = identifier) ;) (expression_statement "local_3c = param_4;" (assignment_expression "local_3c = param_4" identifier = identifier) ;) (if_statement "if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" if (parenthesized_expression "(0 < *param_2)" ( (binary_expression "0 < *param_2" number_literal < (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" { (expression_statement "local_58 = &local_40;" (assignment_expression "local_58 = &local_40" identifier = (pointer_expression "&local_40" & identifier)) ;) (expression_statement "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);" (assignment_expression "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0)" identifier = (cast_expression "(code *)(PTR_LAB_000bd204 + -0x19b0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000bd204 + -0x19b0)" ( (binary_expression "PTR_LAB_000bd204 + -0x19b0" identifier + number_literal) )))) ;) (do_statement "do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);" do (compound_statement "{\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    }" { (expression_statement "puVar1 = local_40;" (assignment_expression "puVar1 = local_40" identifier = identifier) ;) (expression_statement "piVar6 = (int *)(uint)*(byte *)*param_1;" (assignment_expression "piVar6 = (int *)(uint)*(byte *)*param_1" identifier = (binary_expression "(int *)(uint)*(byte *)*param_1" (cast_expression "(int *)(uint)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)*param_1" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (expression_statement "puVar7 = &local_44;" (assignment_expression "puVar7 = &local_44" identifier = (pointer_expression "&local_44" & identifier)) ;) (expression_statement "pcVar8 = pcVar9;" (assignment_expression "pcVar8 = pcVar9" identifier = identifier) ;) (expression_statement "(**(code **)(iVar2 + 4))(iVar2);" (call_expression "(**(code **)(iVar2 + 4))(iVar2)" (parenthesized_expression "(**(code **)(iVar2 + 4))" ( (pointer_expression "**(code **)(iVar2 + 4)" * (pointer_expression "*(code **)(iVar2 + 4)" * (cast_expression "(code **)(iVar2 + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) ))))) )) (argument_list "(iVar2)" ( identifier ))) ;) (if_statement "if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" if (parenthesized_expression "(local_30 != 0)" ( (binary_expression "local_30 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" { (expression_statement "iVar2 = (int)puVar1 - (int)param_3;" (assignment_expression "iVar2 = (int)puVar1 - (int)param_3" identifier = (binary_expression "(int)puVar1 - (int)param_3" (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0001e880;" goto statement_identifier ;) })) (if_statement "if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }" if (parenthesized_expression "(param_6 != (uint *)0x0)" ( (binary_expression "param_6 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *param_6 = local_44;\n      }" { (expression_statement "*param_6 = local_44;" (assignment_expression "*param_6 = local_44" (pointer_expression "*param_6" * identifier) = identifier) ;) })) (expression_statement "*param_1 = *param_1 + 1;" (assignment_expression "*param_1 = *param_1 + 1" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 + 1" (pointer_expression "*param_1" * identifier) + number_literal)) ;) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = iVar3 + -1;" (assignment_expression "*param_2 = iVar3 + -1" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(0 < iVar3 + -1)" ( (binary_expression "0 < iVar3 + -1" number_literal < (binary_expression "iVar3 + -1" identifier + number_literal)) )) ;) })) (expression_statement "iVar2 = (int)local_40 - (int)param_3;" (assignment_expression "iVar2 = (int)local_40 - (int)param_3" identifier = (binary_expression "(int)local_40 - (int)param_3" (cast_expression "(int)local_40" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (labeled_statement "LAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" statement_identifier : (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" if (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_000be114)" ( (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_000be114" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return iVar2 >> 2;\n  }" { (return_statement "return iVar2 >> 2;" return (binary_expression "iVar2 >> 2" identifier >> number_literal) ;) }))) (expression_statement "(*(code *)PTR___stack_chk_fail_000bddb4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bddb4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bddb4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bddb4" * (cast_expression "(code *)PTR___stack_chk_fail_000bddb4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" if (parenthesized_expression "((int)piVar6 < 0x80)" ( (binary_expression "(int)piVar6 < 0x80" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) })) (expression_statement "uVar4 = (*pcVar8)(local_58,piVar6);" (assignment_expression "uVar4 = (*pcVar8)(local_58,piVar6)" identifier = (call_expression "(*pcVar8)(local_58,piVar6)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,piVar6)" ( identifier , identifier )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "((int)piVar6 - 0xfeU < 2)" ( (binary_expression "(int)piVar6 - 0xfeU < 2" (binary_expression "(int)piVar6 - 0xfeU" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) < number_literal) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) })) (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" if (parenthesized_expression "((int *)0x3f < piVar6 + -0x20)" ( (binary_expression "(int *)0x3f < piVar6 + -0x20" (cast_expression "(int *)0x3f" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar6 + -0x20" identifier + number_literal)) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) })) (if_statement "if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" if (parenthesized_expression "(piVar6 + -0x30 < (int *)0x20)" ( (binary_expression "piVar6 + -0x30 < (int *)0x20" (binary_expression "piVar6 + -0x30" identifier + number_literal) < (cast_expression "(int *)0x20" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 0x1f | 0x44000000" (binary_expression "(uint)piVar6 & 0x1f" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x44000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" if (parenthesized_expression "(piVar6 + -0x38 < (int *)0x10)" ( (binary_expression "piVar6 + -0x38 < (int *)0x10" (binary_expression "piVar6 + -0x38" identifier + number_literal) < (cast_expression "(int *)0x10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 0xf | 0x64000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0xf | 0x64000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 0xf | 0x64000000" (binary_expression "(uint)piVar6 & 0xf" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x64000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" if (parenthesized_expression "(piVar6 + -0x3c < (int *)0x8)" ( (binary_expression "piVar6 + -0x3c < (int *)0x8" (binary_expression "piVar6 + -0x3c" identifier + number_literal) < (cast_expression "(int *)0x8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 7 | 0x84000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 7 | 0x84000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 7 | 0x84000000" (binary_expression "(uint)piVar6 & 7" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x84000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" if (parenthesized_expression "(piVar6 + -0x3e < (int *)0x4)" ( (binary_expression "piVar6 + -0x3e < (int *)0x4" (binary_expression "piVar6 + -0x3e" identifier + number_literal) < (cast_expression "(int *)0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" { (expression_statement "uVar4 = (uint)piVar6 & 3 | 0xa4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 3 | 0xa4000000" identifier = (binary_expression "(uint)piVar6 & 3 | 0xa4000000" (binary_expression "(uint)piVar6 & 3" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }" if (parenthesized_expression "((int *)0x1 < piVar6 + -0x3f)" ( (binary_expression "(int *)0x1 < piVar6 + -0x3f" (cast_expression "(int *)0x1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar6 + -0x3f" identifier + number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = (uint)piVar6 & 1 | 0xc4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 1 | 0xc4000000" identifier = (binary_expression "(uint)piVar6 & 1 | 0xc4000000" (binary_expression "(uint)piVar6 & 1" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar4 = *puVar7;" (assignment_expression "uVar4 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (if_statement "if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar5 = (uVar4 & 0xfc000000) + 0x4000000;" (assignment_expression "uVar5 = (uVar4 & 0xfc000000) + 0x4000000" identifier = (binary_expression "(uVar4 & 0xfc000000) + 0x4000000" (parenthesized_expression "(uVar4 & 0xfc000000)" ( (binary_expression "uVar4 & 0xfc000000" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;" (assignment_expression "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6" identifier = (binary_expression "(uint)piVar6 & 0x3f | uVar4 << 6" (binary_expression "(uint)piVar6 & 0x3f" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | (binary_expression "uVar4 << 6" identifier << number_literal))) ;) (if_statement "if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" if (parenthesized_expression "(((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0)" ( (binary_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0" (parenthesized_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000)" ( (binary_expression "(uVar5 * 8 ^ uVar5) & 0xe0000000" (parenthesized_expression "(uVar5 * 8 ^ uVar5)" ( (binary_expression "uVar5 * 8 ^ uVar5" (binary_expression "uVar5 * 8" identifier * number_literal) ^ identifier) )) & number_literal) )) != number_literal) )) (compound_statement "{\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" { (expression_statement "*puVar7 = uVar4 | uVar5;" (assignment_expression "*puVar7 = uVar4 | uVar5" (pointer_expression "*puVar7" * identifier) = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (return_statement "return uVar4 | uVar5;" return (binary_expression "uVar4 | uVar5" identifier | identifier) ;) })) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (if_statement "if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 - 0xd800 < 0x800)" ( (binary_expression "uVar4 - 0xd800 < 0x800" (binary_expression "uVar4 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 - 0xfffe < 2)" ( (binary_expression "uVar4 - 0xfffe < 2" (binary_expression "uVar4 - 0xfffe" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if (uVar4 < 0x80) goto LAB_0001ea8c;" if (parenthesized_expression "(uVar4 < 0x80)" ( (binary_expression "uVar4 < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (expression_statement "uVar5 = uVar5 >> 0x1d;" (assignment_expression "uVar5 = uVar5 >> 0x1d" identifier = (binary_expression "uVar5 >> 0x1d" identifier >> number_literal)) ;) (if_statement "if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" if (parenthesized_expression "(uVar4 < 0x800)" ( (binary_expression "uVar4 < 0x800" identifier < number_literal) )) (compound_statement "{\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }" { (if_statement "if (2 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(2 < uVar5)" ( (binary_expression "2 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (labeled_statement "LAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (3 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(3 < uVar5)" ( (binary_expression "3 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) (labeled_statement "LAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (4 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(4 < uVar5)" ( (binary_expression "4 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) }) (else_clause "else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" else (compound_statement "{\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" { (if_statement "if (uVar4 < 0x10000) goto LAB_0001ea68;" if (parenthesized_expression "(uVar4 < 0x10000)" ( (binary_expression "uVar4 < 0x10000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea68;" goto statement_identifier ;)) (if_statement "if (uVar4 < 0x200000) goto LAB_0001ea74;" if (parenthesized_expression "(uVar4 < 0x200000)" ( (binary_expression "uVar4 < 0x200000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea74;" goto statement_identifier ;)) (if_statement "if (0x3ffffff < uVar4) goto LAB_0001eaec;" if (parenthesized_expression "(0x3ffffff < uVar4)" ( (binary_expression "0x3ffffff < uVar4" number_literal < identifier) )) (goto_statement "goto LAB_0001eaec;" goto statement_identifier ;)) }))) (if_statement "if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar5 < 6)" ( (binary_expression "uVar5 < 6" identifier < number_literal) )) (compound_statement "{\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" { (labeled_statement "LAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);" statement_identifier : (expression_statement "uVar4 = (*pcVar8)(local_58);" (assignment_expression "uVar4 = (*pcVar8)(local_58)" identifier = (call_expression "(*pcVar8)(local_58)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58)" ( identifier )))) ;)) (return_statement "return uVar4;" return identifier ;) })) (labeled_statement "LAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);" statement_identifier : (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;)) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Exceeded maximum restarts with more pending */\n\nint charset_to_unicode(char **input,int *inlen,wchar_t *output,int outlen,int charset,\n                      charset_state *state,wchar_t *errstr,int errlen)\n\n{\n  wchar_t *pwVar1;\n  int iVar2;\n  charset_spec *pcVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  int *piVar7;\n  charset_state *pcVar8;\n  _func_void_void_ptr_long *p_Var9;\n  _func_void_void_ptr_long *p_Var10;\n  unicode_emit_param *in_stack_ffffffa8;\n  charset_state localstate;\n  unicode_emit_param param;\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000be114;\n  piVar7 = inlen;\n  pcVar8 = (charset_state *)output;\n  p_Var9 = (_func_void_void_ptr_long *)outlen;\n  pcVar3 = charset_find_spec(charset);\n  param.errstr = errstr;\n  param.errlen = errlen;\n  param.stopped = 0;\n  if (state == (charset_state *)0x0) {\n    localstate.s0 = 0;\n  }\n  else {\n    localstate = (charset_state)state->s0;\n  }\n  param.output = output;\n  param.outlen = outlen;\n  if (0 < *inlen) {\n    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);\n  }\n  iVar4 = (int)param.output - (int)output;\nLAB_0001e880:\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar4 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar7 < 0x80) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);\n    return iVar2;\n  }\n  if ((int)piVar7 - 0xfeU < 2) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if ((int *)0x3f < piVar7 + -0x20) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }\n    if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }\n    if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }\n    if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }\n    uVar5 = (uint)piVar7 & 1 | 0xc4000000;\n    pcVar8->s0 = uVar5;\n    return uVar5;\n  }\n  uVar5 = pcVar8->s0;\n  if (uVar5 == 0) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  uVar6 = (uVar5 & 0xfc000000) + 0x4000000;\n  uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6;\n  if (((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0) {\n    pcVar8->s0 = uVar5 | uVar6;\n    return uVar5 | uVar6;\n  }\n  pcVar8->s0 = 0;\n  if (uVar5 - 0xd800 < 0x800) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 - 0xfffe < 2) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 < 0x80) goto LAB_0001ea8c;\n  uVar6 = uVar6 >> 0x1d;\n  if (uVar5 < 0x800) {\n    if (2 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }\n  if (uVar6 < 6) {\nLAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);\n    return iVar2;\n  }\nLAB_0001ea8c:\n  iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n  return iVar2;\n}\n\n" comment (function_definition "int charset_to_unicode(char **input,int *inlen,wchar_t *output,int outlen,int charset,\n                      charset_state *state,wchar_t *errstr,int errlen)\n\n{\n  wchar_t *pwVar1;\n  int iVar2;\n  charset_spec *pcVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  int *piVar7;\n  charset_state *pcVar8;\n  _func_void_void_ptr_long *p_Var9;\n  _func_void_void_ptr_long *p_Var10;\n  unicode_emit_param *in_stack_ffffffa8;\n  charset_state localstate;\n  unicode_emit_param param;\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000be114;\n  piVar7 = inlen;\n  pcVar8 = (charset_state *)output;\n  p_Var9 = (_func_void_void_ptr_long *)outlen;\n  pcVar3 = charset_find_spec(charset);\n  param.errstr = errstr;\n  param.errlen = errlen;\n  param.stopped = 0;\n  if (state == (charset_state *)0x0) {\n    localstate.s0 = 0;\n  }\n  else {\n    localstate = (charset_state)state->s0;\n  }\n  param.output = output;\n  param.outlen = outlen;\n  if (0 < *inlen) {\n    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);\n  }\n  iVar4 = (int)param.output - (int)output;\nLAB_0001e880:\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar4 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar7 < 0x80) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);\n    return iVar2;\n  }\n  if ((int)piVar7 - 0xfeU < 2) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if ((int *)0x3f < piVar7 + -0x20) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }\n    if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }\n    if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }\n    if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }\n    uVar5 = (uint)piVar7 & 1 | 0xc4000000;\n    pcVar8->s0 = uVar5;\n    return uVar5;\n  }\n  uVar5 = pcVar8->s0;\n  if (uVar5 == 0) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  uVar6 = (uVar5 & 0xfc000000) + 0x4000000;\n  uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6;\n  if (((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0) {\n    pcVar8->s0 = uVar5 | uVar6;\n    return uVar5 | uVar6;\n  }\n  pcVar8->s0 = 0;\n  if (uVar5 - 0xd800 < 0x800) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 - 0xfffe < 2) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 < 0x80) goto LAB_0001ea8c;\n  uVar6 = uVar6 >> 0x1d;\n  if (uVar5 < 0x800) {\n    if (2 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }\n  if (uVar6 < 6) {\nLAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);\n    return iVar2;\n  }\nLAB_0001ea8c:\n  iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n  return iVar2;\n}" primitive_type (function_declarator "charset_to_unicode(char **input,int *inlen,wchar_t *output,int outlen,int charset,\n                      charset_state *state,wchar_t *errstr,int errlen)" identifier (parameter_list "(char **input,int *inlen,wchar_t *output,int outlen,int charset,\n                      charset_state *state,wchar_t *errstr,int errlen)" ( (parameter_declaration "char **input" primitive_type (pointer_declarator "**input" * (pointer_declarator "*input" * identifier))) , (parameter_declaration "int *inlen" primitive_type (pointer_declarator "*inlen" * identifier)) , (parameter_declaration "wchar_t *output" type_identifier (pointer_declarator "*output" * identifier)) , (parameter_declaration "int outlen" primitive_type identifier) , (parameter_declaration "int charset" primitive_type identifier) , (parameter_declaration "charset_state *state" type_identifier (pointer_declarator "*state" * identifier)) , (parameter_declaration "wchar_t *errstr" type_identifier (pointer_declarator "*errstr" * identifier)) , (parameter_declaration "int errlen" primitive_type identifier) ))) (compound_statement "{\n  wchar_t *pwVar1;\n  int iVar2;\n  charset_spec *pcVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  int *piVar7;\n  charset_state *pcVar8;\n  _func_void_void_ptr_long *p_Var9;\n  _func_void_void_ptr_long *p_Var10;\n  unicode_emit_param *in_stack_ffffffa8;\n  charset_state localstate;\n  unicode_emit_param param;\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000be114;\n  piVar7 = inlen;\n  pcVar8 = (charset_state *)output;\n  p_Var9 = (_func_void_void_ptr_long *)outlen;\n  pcVar3 = charset_find_spec(charset);\n  param.errstr = errstr;\n  param.errlen = errlen;\n  param.stopped = 0;\n  if (state == (charset_state *)0x0) {\n    localstate.s0 = 0;\n  }\n  else {\n    localstate = (charset_state)state->s0;\n  }\n  param.output = output;\n  param.outlen = outlen;\n  if (0 < *inlen) {\n    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);\n  }\n  iVar4 = (int)param.output - (int)output;\nLAB_0001e880:\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar4 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar7 < 0x80) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);\n    return iVar2;\n  }\n  if ((int)piVar7 - 0xfeU < 2) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if ((int *)0x3f < piVar7 + -0x20) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }\n    if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }\n    if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }\n    if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }\n    uVar5 = (uint)piVar7 & 1 | 0xc4000000;\n    pcVar8->s0 = uVar5;\n    return uVar5;\n  }\n  uVar5 = pcVar8->s0;\n  if (uVar5 == 0) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  uVar6 = (uVar5 & 0xfc000000) + 0x4000000;\n  uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6;\n  if (((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0) {\n    pcVar8->s0 = uVar5 | uVar6;\n    return uVar5 | uVar6;\n  }\n  pcVar8->s0 = 0;\n  if (uVar5 - 0xd800 < 0x800) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 - 0xfffe < 2) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }\n  if (uVar5 < 0x80) goto LAB_0001ea8c;\n  uVar6 = uVar6 >> 0x1d;\n  if (uVar5 < 0x800) {\n    if (2 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }\n  if (uVar6 < 6) {\nLAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);\n    return iVar2;\n  }\nLAB_0001ea8c:\n  iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n  return iVar2;\n}" { (declaration "wchar_t *pwVar1;" type_identifier (pointer_declarator "*pwVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "charset_spec *pcVar3;" type_identifier (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "charset_state *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "_func_void_void_ptr_long *p_Var9;" type_identifier (pointer_declarator "*p_Var9" * identifier) ;) (declaration "_func_void_void_ptr_long *p_Var10;" type_identifier (pointer_declarator "*p_Var10" * identifier) ;) (declaration "unicode_emit_param *in_stack_ffffffa8;" type_identifier (pointer_declarator "*in_stack_ffffffa8" * identifier) ;) (declaration "charset_state localstate;" type_identifier identifier ;) (declaration "unicode_emit_param param;" type_identifier identifier ;) (expression_statement "iVar2 = *(int *)PTR___stack_chk_guard_000be114;" (assignment_expression "iVar2 = *(int *)PTR___stack_chk_guard_000be114" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar7 = inlen;" (assignment_expression "piVar7 = inlen" identifier = identifier) ;) (expression_statement "pcVar8 = (charset_state *)output;" (assignment_expression "pcVar8 = (charset_state *)output" identifier = (cast_expression "(charset_state *)output" ( (type_descriptor "charset_state *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "p_Var9 = (_func_void_void_ptr_long *)outlen;" (assignment_expression "p_Var9 = (_func_void_void_ptr_long *)outlen" identifier = (cast_expression "(_func_void_void_ptr_long *)outlen" ( (type_descriptor "_func_void_void_ptr_long *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pcVar3 = charset_find_spec(charset);" (assignment_expression "pcVar3 = charset_find_spec(charset)" identifier = (call_expression "charset_find_spec(charset)" identifier (argument_list "(charset)" ( identifier )))) ;) (expression_statement "param.errstr = errstr;" (assignment_expression "param.errstr = errstr" (field_expression "param.errstr" identifier . field_identifier) = identifier) ;) (expression_statement "param.errlen = errlen;" (assignment_expression "param.errlen = errlen" (field_expression "param.errlen" identifier . field_identifier) = identifier) ;) (expression_statement "param.stopped = 0;" (assignment_expression "param.stopped = 0" (field_expression "param.stopped" identifier . field_identifier) = number_literal) ;) (if_statement "if (state == (charset_state *)0x0) {\n    localstate.s0 = 0;\n  }\n  else {\n    localstate = (charset_state)state->s0;\n  }" if (parenthesized_expression "(state == (charset_state *)0x0)" ( (binary_expression "state == (charset_state *)0x0" identifier == (cast_expression "(charset_state *)0x0" ( (type_descriptor "charset_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    localstate.s0 = 0;\n  }" { (expression_statement "localstate.s0 = 0;" (assignment_expression "localstate.s0 = 0" (field_expression "localstate.s0" identifier . field_identifier) = number_literal) ;) }) (else_clause "else {\n    localstate = (charset_state)state->s0;\n  }" else (compound_statement "{\n    localstate = (charset_state)state->s0;\n  }" { (expression_statement "localstate = (charset_state)state->s0;" (assignment_expression "localstate = (charset_state)state->s0" identifier = (cast_expression "(charset_state)state->s0" ( (type_descriptor "charset_state" type_identifier) ) (field_expression "state->s0" identifier -> field_identifier))) ;) }))) (expression_statement "param.output = output;" (assignment_expression "param.output = output" (field_expression "param.output" identifier . field_identifier) = identifier) ;) (expression_statement "param.outlen = outlen;" (assignment_expression "param.outlen = outlen" (field_expression "param.outlen" identifier . field_identifier) = identifier) ;) (if_statement "if (0 < *inlen) {\n    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);\n  }" if (parenthesized_expression "(0 < *inlen)" ( (binary_expression "0 < *inlen" number_literal < (pointer_expression "*inlen" * identifier)) )) (compound_statement "{\n    p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);\n  }" { (expression_statement "p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0);" (assignment_expression "p_Var10 = (_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0)" identifier = (cast_expression "(_func_void_void_ptr_long *)(PTR_LAB_000bd204 + -0x19b0)" ( (type_descriptor "_func_void_void_ptr_long *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000bd204 + -0x19b0)" ( (binary_expression "PTR_LAB_000bd204 + -0x19b0" identifier + number_literal) )))) ;) (do_statement "do {\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    } while (0 < iVar4 + -1);" do (compound_statement "{\n      pwVar1 = param.output;\n      piVar7 = (int *)(uint)(byte)**input;\n      pcVar8 = &localstate;\n      p_Var9 = p_Var10;\n      in_stack_ffffffa8 = &param;\n      (*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);\n      if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }\n      if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }\n      *input = *input + 1;\n      iVar4 = *inlen;\n      *inlen = iVar4 + -1;\n    }" { (expression_statement "pwVar1 = param.output;" (assignment_expression "pwVar1 = param.output" identifier = (field_expression "param.output" identifier . field_identifier)) ;) (expression_statement "piVar7 = (int *)(uint)(byte)**input;" (assignment_expression "piVar7 = (int *)(uint)(byte)**input" identifier = (binary_expression "(int *)(uint)(byte)**input" (cast_expression "(int *)(uint)(byte)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier )))) * (pointer_expression "*input" * identifier))) ;) (expression_statement "pcVar8 = &localstate;" (assignment_expression "pcVar8 = &localstate" identifier = (pointer_expression "&localstate" & identifier)) ;) (expression_statement "p_Var9 = p_Var10;" (assignment_expression "p_Var9 = p_Var10" identifier = identifier) ;) (expression_statement "in_stack_ffffffa8 = &param;" (assignment_expression "in_stack_ffffffa8 = &param" identifier = (pointer_expression "&param" & identifier)) ;) (expression_statement "(*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param);" (call_expression "(*pcVar3->read)(pcVar3,(long)piVar7,&localstate,p_Var10,&param)" (parenthesized_expression "(*pcVar3->read)" ( (pointer_expression "*pcVar3->read" * (field_expression "pcVar3->read" identifier -> field_identifier)) )) (argument_list "(pcVar3,(long)piVar7,&localstate,p_Var10,&param)" ( identifier , (cast_expression "(long)piVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) , (pointer_expression "&localstate" & identifier) , identifier , (pointer_expression "&param" & identifier) ))) ;) (if_statement "if (param.stopped != 0) {\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }" if (parenthesized_expression "(param.stopped != 0)" ( (binary_expression "param.stopped != 0" (field_expression "param.stopped" identifier . field_identifier) != number_literal) )) (compound_statement "{\n        iVar4 = (int)pwVar1 - (int)output;\n        goto LAB_0001e880;\n      }" { (expression_statement "iVar4 = (int)pwVar1 - (int)output;" (assignment_expression "iVar4 = (int)pwVar1 - (int)output" identifier = (binary_expression "(int)pwVar1 - (int)output" (cast_expression "(int)pwVar1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)output" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0001e880;" goto statement_identifier ;) })) (if_statement "if (state != (charset_state *)0x0) {\n        state->s0 = (ulong)localstate;\n      }" if (parenthesized_expression "(state != (charset_state *)0x0)" ( (binary_expression "state != (charset_state *)0x0" identifier != (cast_expression "(charset_state *)0x0" ( (type_descriptor "charset_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        state->s0 = (ulong)localstate;\n      }" { (expression_statement "state->s0 = (ulong)localstate;" (assignment_expression "state->s0 = (ulong)localstate" (field_expression "state->s0" identifier -> field_identifier) = (cast_expression "(ulong)localstate" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "*input = *input + 1;" (assignment_expression "*input = *input + 1" (pointer_expression "*input" * identifier) = (binary_expression "*input + 1" (pointer_expression "*input" * identifier) + number_literal)) ;) (expression_statement "iVar4 = *inlen;" (assignment_expression "iVar4 = *inlen" identifier = (pointer_expression "*inlen" * identifier)) ;) (expression_statement "*inlen = iVar4 + -1;" (assignment_expression "*inlen = iVar4 + -1" (pointer_expression "*inlen" * identifier) = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(0 < iVar4 + -1)" ( (binary_expression "0 < iVar4 + -1" number_literal < (binary_expression "iVar4 + -1" identifier + number_literal)) )) ;) })) (expression_statement "iVar4 = (int)param.output - (int)output;" (assignment_expression "iVar4 = (int)param.output - (int)output" identifier = (binary_expression "(int)param.output - (int)output" (cast_expression "(int)param.output" ( (type_descriptor "int" primitive_type) ) (field_expression "param.output" identifier . field_identifier)) - (cast_expression "(int)output" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (labeled_statement "LAB_0001e880:\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar4 >> 2;\n  }" statement_identifier : (if_statement "if (iVar2 == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar4 >> 2;\n  }" if (parenthesized_expression "(iVar2 == *(int *)PTR___stack_chk_guard_000be114)" ( (binary_expression "iVar2 == *(int *)PTR___stack_chk_guard_000be114" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return iVar4 >> 2;\n  }" { (return_statement "return iVar4 >> 2;" return (binary_expression "iVar4 >> 2" identifier >> number_literal) ;) }))) (expression_statement "(*(code *)PTR___stack_chk_fail_000bddb4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bddb4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bddb4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bddb4" * (cast_expression "(code *)PTR___stack_chk_fail_000bddb4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)piVar7 < 0x80) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);\n    return iVar2;\n  }" if (parenthesized_expression "((int)piVar7 < 0x80)" ( (binary_expression "(int)piVar7 < 0x80" (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);\n    return iVar2;\n  }" { (if_statement "if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }" if (parenthesized_expression "(pcVar8->s0 != 0)" ( (binary_expression "pcVar8->s0 != 0" (field_expression "pcVar8->s0" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }" { (expression_statement "(*p_Var9)(in_stack_ffffffa8,0xffff);" (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "pcVar8->s0 = 0;" (assignment_expression "pcVar8->s0 = 0" (field_expression "pcVar8->s0" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,(long)piVar7)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,(long)piVar7)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,(long)piVar7)" ( identifier , (cast_expression "(long)piVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) )))) ;) (return_statement "return iVar2;" return identifier ;) })) (if_statement "if ((int)piVar7 - 0xfeU < 2) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" if (parenthesized_expression "((int)piVar7 - 0xfeU < 2)" ( (binary_expression "(int)piVar7 - 0xfeU < 2" (binary_expression "(int)piVar7 - 0xfeU" (cast_expression "(int)piVar7" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) < number_literal) )) (compound_statement "{\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" { (if_statement "if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }" if (parenthesized_expression "(pcVar8->s0 != 0)" ( (binary_expression "pcVar8->s0 != 0" (field_expression "pcVar8->s0" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n      pcVar8->s0 = 0;\n    }" { (expression_statement "(*p_Var9)(in_stack_ffffffa8,0xffff);" (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "pcVar8->s0 = 0;" (assignment_expression "pcVar8->s0 = 0" (field_expression "pcVar8->s0" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return iVar2;" return identifier ;) })) (if_statement "if ((int *)0x3f < piVar7 + -0x20) {\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }\n    if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }\n    if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }\n    if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }\n    uVar5 = (uint)piVar7 & 1 | 0xc4000000;\n    pcVar8->s0 = uVar5;\n    return uVar5;\n  }" if (parenthesized_expression "((int *)0x3f < piVar7 + -0x20)" ( (binary_expression "(int *)0x3f < piVar7 + -0x20" (cast_expression "(int *)0x3f" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar7 + -0x20" identifier + number_literal)) )) (compound_statement "{\n    if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }\n    if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }\n    if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }\n    if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }\n    uVar5 = (uint)piVar7 & 1 | 0xc4000000;\n    pcVar8->s0 = uVar5;\n    return uVar5;\n  }" { (if_statement "if (pcVar8->s0 != 0) {\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }" if (parenthesized_expression "(pcVar8->s0 != 0)" ( (binary_expression "pcVar8->s0 != 0" (field_expression "pcVar8->s0" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      (*p_Var9)(in_stack_ffffffa8,0xffff);\n    }" { (expression_statement "(*p_Var9)(in_stack_ffffffa8,0xffff);" (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal ))) ;) })) (if_statement "if (piVar7 + -0x30 < (int *)0x20) {\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" if (parenthesized_expression "(piVar7 + -0x30 < (int *)0x20)" ( (binary_expression "piVar7 + -0x30 < (int *)0x20" (binary_expression "piVar7 + -0x30" identifier + number_literal) < (cast_expression "(int *)0x20" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" { (expression_statement "pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000;" (assignment_expression "pcVar8->s0 = (uint)piVar7 & 0x1f | 0x44000000" (field_expression "pcVar8->s0" identifier -> field_identifier) = (binary_expression "(uint)piVar7 & 0x1f | 0x44000000" (binary_expression "(uint)piVar7 & 0x1f" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x44000000;" return number_literal ;) })) (if_statement "if (piVar7 + -0x38 < (int *)0x10) {\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" if (parenthesized_expression "(piVar7 + -0x38 < (int *)0x10)" ( (binary_expression "piVar7 + -0x38 < (int *)0x10" (binary_expression "piVar7 + -0x38" identifier + number_literal) < (cast_expression "(int *)0x10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" { (expression_statement "pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000;" (assignment_expression "pcVar8->s0 = (uint)piVar7 & 0xf | 0x64000000" (field_expression "pcVar8->s0" identifier -> field_identifier) = (binary_expression "(uint)piVar7 & 0xf | 0x64000000" (binary_expression "(uint)piVar7 & 0xf" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x64000000;" return number_literal ;) })) (if_statement "if (piVar7 + -0x3c < (int *)0x8) {\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }" if (parenthesized_expression "(piVar7 + -0x3c < (int *)0x8)" ( (binary_expression "piVar7 + -0x3c < (int *)0x8" (binary_expression "piVar7 + -0x3c" identifier + number_literal) < (cast_expression "(int *)0x8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;\n      return -0x7c000000;\n    }" { (expression_statement "pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000;" (assignment_expression "pcVar8->s0 = (uint)piVar7 & 7 | 0x84000000" (field_expression "pcVar8->s0" identifier -> field_identifier) = (binary_expression "(uint)piVar7 & 7 | 0x84000000" (binary_expression "(uint)piVar7 & 7" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return -0x7c000000;" return number_literal ;) })) (if_statement "if (piVar7 + -0x3e < (int *)0x4) {\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }" if (parenthesized_expression "(piVar7 + -0x3e < (int *)0x4)" ( (binary_expression "piVar7 + -0x3e < (int *)0x4" (binary_expression "piVar7 + -0x3e" identifier + number_literal) < (cast_expression "(int *)0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar5 = (uint)piVar7 & 3 | 0xa4000000;\n      pcVar8->s0 = uVar5;\n      return uVar5;\n    }" { (expression_statement "uVar5 = (uint)piVar7 & 3 | 0xa4000000;" (assignment_expression "uVar5 = (uint)piVar7 & 3 | 0xa4000000" identifier = (binary_expression "(uint)piVar7 & 3 | 0xa4000000" (binary_expression "(uint)piVar7 & 3" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "pcVar8->s0 = uVar5;" (assignment_expression "pcVar8->s0 = uVar5" (field_expression "pcVar8->s0" identifier -> field_identifier) = identifier) ;) (return_statement "return uVar5;" return identifier ;) })) (if_statement "if ((int *)0x1 < piVar7 + -0x3f) {\n      return 0;\n    }" if (parenthesized_expression "((int *)0x1 < piVar7 + -0x3f)" ( (binary_expression "(int *)0x1 < piVar7 + -0x3f" (cast_expression "(int *)0x1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar7 + -0x3f" identifier + number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar5 = (uint)piVar7 & 1 | 0xc4000000;" (assignment_expression "uVar5 = (uint)piVar7 & 1 | 0xc4000000" identifier = (binary_expression "(uint)piVar7 & 1 | 0xc4000000" (binary_expression "(uint)piVar7 & 1" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "pcVar8->s0 = uVar5;" (assignment_expression "pcVar8->s0 = uVar5" (field_expression "pcVar8->s0" identifier -> field_identifier) = identifier) ;) (return_statement "return uVar5;" return identifier ;) })) (expression_statement "uVar5 = pcVar8->s0;" (assignment_expression "uVar5 = pcVar8->s0" identifier = (field_expression "pcVar8->s0" identifier -> field_identifier)) ;) (if_statement "if (uVar5 == 0) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" { (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return iVar2;" return identifier ;) })) (expression_statement "uVar6 = (uVar5 & 0xfc000000) + 0x4000000;" (assignment_expression "uVar6 = (uVar5 & 0xfc000000) + 0x4000000" identifier = (binary_expression "(uVar5 & 0xfc000000) + 0x4000000" (parenthesized_expression "(uVar5 & 0xfc000000)" ( (binary_expression "uVar5 & 0xfc000000" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6;" (assignment_expression "uVar5 = (uint)piVar7 & 0x3f | uVar5 << 6" identifier = (binary_expression "(uint)piVar7 & 0x3f | uVar5 << 6" (binary_expression "(uint)piVar7 & 0x3f" (cast_expression "(uint)piVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | (binary_expression "uVar5 << 6" identifier << number_literal))) ;) (if_statement "if (((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0) {\n    pcVar8->s0 = uVar5 | uVar6;\n    return uVar5 | uVar6;\n  }" if (parenthesized_expression "(((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0)" ( (binary_expression "((uVar6 * 8 ^ uVar6) & 0xe0000000) != 0" (parenthesized_expression "((uVar6 * 8 ^ uVar6) & 0xe0000000)" ( (binary_expression "(uVar6 * 8 ^ uVar6) & 0xe0000000" (parenthesized_expression "(uVar6 * 8 ^ uVar6)" ( (binary_expression "uVar6 * 8 ^ uVar6" (binary_expression "uVar6 * 8" identifier * number_literal) ^ identifier) )) & number_literal) )) != number_literal) )) (compound_statement "{\n    pcVar8->s0 = uVar5 | uVar6;\n    return uVar5 | uVar6;\n  }" { (expression_statement "pcVar8->s0 = uVar5 | uVar6;" (assignment_expression "pcVar8->s0 = uVar5 | uVar6" (field_expression "pcVar8->s0" identifier -> field_identifier) = (binary_expression "uVar5 | uVar6" identifier | identifier)) ;) (return_statement "return uVar5 | uVar6;" return (binary_expression "uVar5 | uVar6" identifier | identifier) ;) })) (expression_statement "pcVar8->s0 = 0;" (assignment_expression "pcVar8->s0 = 0" (field_expression "pcVar8->s0" identifier -> field_identifier) = number_literal) ;) (if_statement "if (uVar5 - 0xd800 < 0x800) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" if (parenthesized_expression "(uVar5 - 0xd800 < 0x800)" ( (binary_expression "uVar5 - 0xd800 < 0x800" (binary_expression "uVar5 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" { (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return iVar2;" return identifier ;) })) (if_statement "if (uVar5 - 0xfffe < 2) {\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" if (parenthesized_expression "(uVar5 - 0xfffe < 2)" ( (binary_expression "uVar5 - 0xfffe < 2" (binary_expression "uVar5 - 0xfffe" identifier - number_literal) < number_literal) )) (compound_statement "{\n    iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);\n    return iVar2;\n  }" { (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return iVar2;" return identifier ;) })) (if_statement "if (uVar5 < 0x80) goto LAB_0001ea8c;" if (parenthesized_expression "(uVar5 < 0x80)" ( (binary_expression "uVar5 < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (expression_statement "uVar6 = uVar6 >> 0x1d;" (assignment_expression "uVar6 = uVar6 >> 0x1d" identifier = (binary_expression "uVar6 >> 0x1d" identifier >> number_literal)) ;) (if_statement "if (uVar5 < 0x800) {\n    if (2 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }" if (parenthesized_expression "(uVar5 < 0x800)" ( (binary_expression "uVar5 < 0x800" identifier < number_literal) )) (compound_statement "{\n    if (2 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;\n  }" { (if_statement "if (2 < uVar6) goto LAB_0001ea8c;" if (parenthesized_expression "(2 < uVar6)" ( (binary_expression "2 < uVar6" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (labeled_statement "LAB_0001ea68:\n    if (3 < uVar6) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (3 < uVar6) goto LAB_0001ea8c;" if (parenthesized_expression "(3 < uVar6)" ( (binary_expression "3 < uVar6" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) (labeled_statement "LAB_0001ea74:\n    if (4 < uVar6) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (4 < uVar6) goto LAB_0001ea8c;" if (parenthesized_expression "(4 < uVar6)" ( (binary_expression "4 < uVar6" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) }) (else_clause "else {\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }" else (compound_statement "{\n    if (uVar5 < 0x10000) goto LAB_0001ea68;\n    if (uVar5 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar5) goto LAB_0001eaec;\n  }" { (if_statement "if (uVar5 < 0x10000) goto LAB_0001ea68;" if (parenthesized_expression "(uVar5 < 0x10000)" ( (binary_expression "uVar5 < 0x10000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea68;" goto statement_identifier ;)) (if_statement "if (uVar5 < 0x200000) goto LAB_0001ea74;" if (parenthesized_expression "(uVar5 < 0x200000)" ( (binary_expression "uVar5 < 0x200000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea74;" goto statement_identifier ;)) (if_statement "if (0x3ffffff < uVar5) goto LAB_0001eaec;" if (parenthesized_expression "(0x3ffffff < uVar5)" ( (binary_expression "0x3ffffff < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001eaec;" goto statement_identifier ;)) }))) (if_statement "if (uVar6 < 6) {\nLAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);\n    return iVar2;\n  }" if (parenthesized_expression "(uVar6 < 6)" ( (binary_expression "uVar6 < 6" identifier < number_literal) )) (compound_statement "{\nLAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);\n    return iVar2;\n  }" { (labeled_statement "LAB_0001eaec:\n    iVar2 = (*p_Var9)(in_stack_ffffffa8);" statement_identifier : (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8)" ( identifier )))) ;)) (return_statement "return iVar2;" return identifier ;) })) (labeled_statement "LAB_0001ea8c:\n  iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" statement_identifier : (expression_statement "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff);" (assignment_expression "iVar2 = (*p_Var9)(in_stack_ffffffa8,0xffff)" identifier = (call_expression "(*p_Var9)(in_stack_ffffffa8,0xffff)" (parenthesized_expression "(*p_Var9)" ( (pointer_expression "*p_Var9" * identifier) )) (argument_list "(in_stack_ffffffa8,0xffff)" ( identifier , number_literal )))) ;)) (return_statement "return iVar2;" return identifier ;) })))
(translation_unit "uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)\n\n{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}\n\n" (function_definition "uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)\n\n{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" type_identifier (function_declarator "charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" identifier (parameter_list "(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "code *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "uint *param_6" type_identifier (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "undefined4 param_7" type_identifier identifier) , (parameter_declaration "undefined4 param_8" type_identifier identifier) ))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "code *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "uint *local_40;" type_identifier (pointer_declarator "*local_40" * identifier) ;) (declaration "code *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "undefined4 local_38;" type_identifier identifier ;) (declaration "undefined4 local_34;" type_identifier identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000be114;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000be114" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar6 = param_2;" (assignment_expression "piVar6 = param_2" identifier = identifier) ;) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" identifier = identifier) ;) (expression_statement "pcVar8 = param_4;" (assignment_expression "pcVar8 = param_4" identifier = identifier) ;) (expression_statement "iVar2 = charset_find_spec(param_5);" (assignment_expression "iVar2 = charset_find_spec(param_5)" identifier = (call_expression "charset_find_spec(param_5)" identifier (argument_list "(param_5)" ( identifier )))) ;) (expression_statement "local_38 = param_7;" (assignment_expression "local_38 = param_7" identifier = identifier) ;) (expression_statement "local_34 = param_8;" (assignment_expression "local_34 = param_8" identifier = identifier) ;) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (if_statement "if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }" if (parenthesized_expression "(param_6 == (uint *)0x0)" ( (binary_expression "param_6 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_44 = 0;\n  }" { (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_44 = *param_6;\n  }" else (compound_statement "{\n    local_44 = *param_6;\n  }" { (expression_statement "local_44 = *param_6;" (assignment_expression "local_44 = *param_6" identifier = (pointer_expression "*param_6" * identifier)) ;) }))) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" identifier = identifier) ;) (expression_statement "local_3c = param_4;" (assignment_expression "local_3c = param_4" identifier = identifier) ;) (if_statement "if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" if (parenthesized_expression "(0 < *param_2)" ( (binary_expression "0 < *param_2" number_literal < (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" { (expression_statement "local_58 = &local_40;" (assignment_expression "local_58 = &local_40" identifier = (pointer_expression "&local_40" & identifier)) ;) (expression_statement "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);" (assignment_expression "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0)" identifier = (cast_expression "(code *)(PTR_LAB_000bd204 + -0x19b0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000bd204 + -0x19b0)" ( (binary_expression "PTR_LAB_000bd204 + -0x19b0" identifier + number_literal) )))) ;) (do_statement "do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);" do (compound_statement "{\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    }" { (expression_statement "puVar1 = local_40;" (assignment_expression "puVar1 = local_40" identifier = identifier) ;) (expression_statement "piVar6 = (int *)(uint)*(byte *)*param_1;" (assignment_expression "piVar6 = (int *)(uint)*(byte *)*param_1" identifier = (binary_expression "(int *)(uint)*(byte *)*param_1" (cast_expression "(int *)(uint)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)*param_1" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (expression_statement "puVar7 = &local_44;" (assignment_expression "puVar7 = &local_44" identifier = (pointer_expression "&local_44" & identifier)) ;) (expression_statement "pcVar8 = pcVar9;" (assignment_expression "pcVar8 = pcVar9" identifier = identifier) ;) (expression_statement "(**(code **)(iVar2 + 4))(iVar2);" (call_expression "(**(code **)(iVar2 + 4))(iVar2)" (parenthesized_expression "(**(code **)(iVar2 + 4))" ( (pointer_expression "**(code **)(iVar2 + 4)" * (pointer_expression "*(code **)(iVar2 + 4)" * (cast_expression "(code **)(iVar2 + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 4)" ( (binary_expression "iVar2 + 4" identifier + number_literal) ))))) )) (argument_list "(iVar2)" ( identifier ))) ;) (if_statement "if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" if (parenthesized_expression "(local_30 != 0)" ( (binary_expression "local_30 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" { (expression_statement "iVar2 = (int)puVar1 - (int)param_3;" (assignment_expression "iVar2 = (int)puVar1 - (int)param_3" identifier = (binary_expression "(int)puVar1 - (int)param_3" (cast_expression "(int)puVar1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (goto_statement "goto LAB_0001e880;" goto statement_identifier ;) })) (if_statement "if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }" if (parenthesized_expression "(param_6 != (uint *)0x0)" ( (binary_expression "param_6 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        *param_6 = local_44;\n      }" { (expression_statement "*param_6 = local_44;" (assignment_expression "*param_6 = local_44" (pointer_expression "*param_6" * identifier) = identifier) ;) })) (expression_statement "*param_1 = *param_1 + 1;" (assignment_expression "*param_1 = *param_1 + 1" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 + 1" (pointer_expression "*param_1" * identifier) + number_literal)) ;) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*param_2 = iVar3 + -1;" (assignment_expression "*param_2 = iVar3 + -1" (pointer_expression "*param_2" * identifier) = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(0 < iVar3 + -1)" ( (binary_expression "0 < iVar3 + -1" number_literal < (binary_expression "iVar3 + -1" identifier + number_literal)) )) ;) })) (expression_statement "iVar2 = (int)local_40 - (int)param_3;" (assignment_expression "iVar2 = (int)local_40 - (int)param_3" identifier = (binary_expression "(int)local_40 - (int)param_3" (cast_expression "(int)local_40" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (labeled_statement "LAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" statement_identifier : (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" if (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_000be114)" ( (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_000be114" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" * (cast_expression "(int *)PTR___stack_chk_guard_000be114" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return iVar2 >> 2;\n  }" { (return_statement "return iVar2 >> 2;" return (binary_expression "iVar2 >> 2" identifier >> number_literal) ;) }))) (expression_statement "(*(code *)PTR___stack_chk_fail_000bddb4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bddb4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bddb4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000bddb4" * (cast_expression "(code *)PTR___stack_chk_fail_000bddb4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" if (parenthesized_expression "((int)piVar6 < 0x80)" ( (binary_expression "(int)piVar6 < 0x80" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) })) (expression_statement "uVar4 = (*pcVar8)(local_58,piVar6);" (assignment_expression "uVar4 = (*pcVar8)(local_58,piVar6)" identifier = (call_expression "(*pcVar8)(local_58,piVar6)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,piVar6)" ( identifier , identifier )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "((int)piVar6 - 0xfeU < 2)" ( (binary_expression "(int)piVar6 - 0xfeU < 2" (binary_expression "(int)piVar6 - 0xfeU" (cast_expression "(int)piVar6" ( (type_descriptor "int" primitive_type) ) identifier) - number_literal) < number_literal) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) })) (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" if (parenthesized_expression "((int *)0x3f < piVar6 + -0x20)" ( (binary_expression "(int *)0x3f < piVar6 + -0x20" (cast_expression "(int *)0x3f" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar6 + -0x20" identifier + number_literal)) )) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" { (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }" if (parenthesized_expression "(*puVar7 != 0)" ( (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" * identifier) != number_literal) )) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n    }" { (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal ))) ;) })) (if_statement "if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" if (parenthesized_expression "(piVar6 + -0x30 < (int *)0x20)" ( (binary_expression "piVar6 + -0x30 < (int *)0x20" (binary_expression "piVar6 + -0x30" identifier + number_literal) < (cast_expression "(int *)0x20" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 0x1f | 0x44000000" (binary_expression "(uint)piVar6 & 0x1f" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x44000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" if (parenthesized_expression "(piVar6 + -0x38 < (int *)0x10)" ( (binary_expression "piVar6 + -0x38 < (int *)0x10" (binary_expression "piVar6 + -0x38" identifier + number_literal) < (cast_expression "(int *)0x10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 0xf | 0x64000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0xf | 0x64000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 0xf | 0x64000000" (binary_expression "(uint)piVar6 & 0xf" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x64000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" if (parenthesized_expression "(piVar6 + -0x3c < (int *)0x8)" ( (binary_expression "piVar6 + -0x3c < (int *)0x8" (binary_expression "piVar6 + -0x3c" identifier + number_literal) < (cast_expression "(int *)0x8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" { (expression_statement "*puVar7 = (uint)piVar6 & 7 | 0x84000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 7 | 0x84000000" (pointer_expression "*puVar7" * identifier) = (binary_expression "(uint)piVar6 & 7 | 0x84000000" (binary_expression "(uint)piVar6 & 7" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (return_statement "return 0x84000000;" return number_literal ;) })) (if_statement "if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" if (parenthesized_expression "(piVar6 + -0x3e < (int *)0x4)" ( (binary_expression "piVar6 + -0x3e < (int *)0x4" (binary_expression "piVar6 + -0x3e" identifier + number_literal) < (cast_expression "(int *)0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" { (expression_statement "uVar4 = (uint)piVar6 & 3 | 0xa4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 3 | 0xa4000000" identifier = (binary_expression "(uint)piVar6 & 3 | 0xa4000000" (binary_expression "(uint)piVar6 & 3" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }" if (parenthesized_expression "((int *)0x1 < piVar6 + -0x3f)" ( (binary_expression "(int *)0x1 < piVar6 + -0x3f" (cast_expression "(int *)0x1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) < (binary_expression "piVar6 + -0x3f" identifier + number_literal)) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = (uint)piVar6 & 1 | 0xc4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 1 | 0xc4000000" identifier = (binary_expression "(uint)piVar6 & 1 | 0xc4000000" (binary_expression "(uint)piVar6 & 1" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar4 = *puVar7;" (assignment_expression "uVar4 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (if_statement "if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "uVar5 = (uVar4 & 0xfc000000) + 0x4000000;" (assignment_expression "uVar5 = (uVar4 & 0xfc000000) + 0x4000000" identifier = (binary_expression "(uVar4 & 0xfc000000) + 0x4000000" (parenthesized_expression "(uVar4 & 0xfc000000)" ( (binary_expression "uVar4 & 0xfc000000" identifier & number_literal) )) + number_literal)) ;) (expression_statement "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;" (assignment_expression "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6" identifier = (binary_expression "(uint)piVar6 & 0x3f | uVar4 << 6" (binary_expression "(uint)piVar6 & 0x3f" (cast_expression "(uint)piVar6" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) | (binary_expression "uVar4 << 6" identifier << number_literal))) ;) (if_statement "if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" if (parenthesized_expression "(((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0)" ( (binary_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0" (parenthesized_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000)" ( (binary_expression "(uVar5 * 8 ^ uVar5) & 0xe0000000" (parenthesized_expression "(uVar5 * 8 ^ uVar5)" ( (binary_expression "uVar5 * 8 ^ uVar5" (binary_expression "uVar5 * 8" identifier * number_literal) ^ identifier) )) & number_literal) )) != number_literal) )) (compound_statement "{\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" { (expression_statement "*puVar7 = uVar4 | uVar5;" (assignment_expression "*puVar7 = uVar4 | uVar5" (pointer_expression "*puVar7" * identifier) = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (return_statement "return uVar4 | uVar5;" return (binary_expression "uVar4 | uVar5" identifier | identifier) ;) })) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (if_statement "if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 - 0xd800 < 0x800)" ( (binary_expression "uVar4 - 0xd800 < 0x800" (binary_expression "uVar4 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar4 - 0xfffe < 2)" ( (binary_expression "uVar4 - 0xfffe < 2" (binary_expression "uVar4 - 0xfffe" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" { (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (if_statement "if (uVar4 < 0x80) goto LAB_0001ea8c;" if (parenthesized_expression "(uVar4 < 0x80)" ( (binary_expression "uVar4 < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (expression_statement "uVar5 = uVar5 >> 0x1d;" (assignment_expression "uVar5 = uVar5 >> 0x1d" identifier = (binary_expression "uVar5 >> 0x1d" identifier >> number_literal)) ;) (if_statement "if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" if (parenthesized_expression "(uVar4 < 0x800)" ( (binary_expression "uVar4 < 0x800" identifier < number_literal) )) (compound_statement "{\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }" { (if_statement "if (2 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(2 < uVar5)" ( (binary_expression "2 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;)) (labeled_statement "LAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (3 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(3 < uVar5)" ( (binary_expression "3 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) (labeled_statement "LAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;" statement_identifier : (if_statement "if (4 < uVar5) goto LAB_0001ea8c;" if (parenthesized_expression "(4 < uVar5)" ( (binary_expression "4 < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001ea8c;" goto statement_identifier ;))) }) (else_clause "else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" else (compound_statement "{\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" { (if_statement "if (uVar4 < 0x10000) goto LAB_0001ea68;" if (parenthesized_expression "(uVar4 < 0x10000)" ( (binary_expression "uVar4 < 0x10000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea68;" goto statement_identifier ;)) (if_statement "if (uVar4 < 0x200000) goto LAB_0001ea74;" if (parenthesized_expression "(uVar4 < 0x200000)" ( (binary_expression "uVar4 < 0x200000" identifier < number_literal) )) (goto_statement "goto LAB_0001ea74;" goto statement_identifier ;)) (if_statement "if (0x3ffffff < uVar4) goto LAB_0001eaec;" if (parenthesized_expression "(0x3ffffff < uVar4)" ( (binary_expression "0x3ffffff < uVar4" number_literal < identifier) )) (goto_statement "goto LAB_0001eaec;" goto statement_identifier ;)) }))) (if_statement "if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" if (parenthesized_expression "(uVar5 < 6)" ( (binary_expression "uVar5 < 6" identifier < number_literal) )) (compound_statement "{\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" { (labeled_statement "LAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);" statement_identifier : (expression_statement "uVar4 = (*pcVar8)(local_58);" (assignment_expression "uVar4 = (*pcVar8)(local_58)" identifier = (call_expression "(*pcVar8)(local_58)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58)" ( identifier )))) ;)) (return_statement "return uVar4;" return identifier ;) })) (labeled_statement "LAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);" statement_identifier : (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" identifier = (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(local_58,0xffff)" ( identifier , number_literal )))) ;)) (return_statement "return uVar4;" return identifier ;) })))
(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)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return (binary_expression IDENT >> LIT) ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) < (binary_expression IDENT + LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT)) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT)) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT)) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) < (binary_expression IDENT + LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | (binary_expression IDENT << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) ^ IDENT) )) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT | IDENT)) ;) (return_statement return (binary_expression IDENT | IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT )))) ;)) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , LIT )))) ;)) (return_statement return IDENT ;) })))
(function_definition "uint charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)\n\n{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" (type_identifier "uint") (function_declarator "charset_to_unicode(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" (identifier "charset_to_unicode") (parameter_list "(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,\n                       uint *param_6,undefined4 param_7,undefined4 param_8)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "code *param_4" (type_identifier "code") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) (, ",") (parameter_declaration "uint *param_6" (type_identifier "uint") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) (, ",") (parameter_declaration "undefined4 param_7" (type_identifier "undefined4") (identifier "param_7")) (, ",") (parameter_declaration "undefined4 param_8" (type_identifier "undefined4") (identifier "param_8")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  uint uVar5;\n  int *piVar6;\n  uint *puVar7;\n  code *pcVar8;\n  code *pcVar9;\n  uint **local_58;\n  uint local_44;\n  uint *local_40;\n  code *local_3c;\n  undefined4 local_38;\n  undefined4 local_34;\n  int local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_000be114;\n  piVar6 = param_2;\n  puVar7 = param_3;\n  pcVar8 = param_4;\n  iVar2 = charset_find_spec(param_5);\n  local_38 = param_7;\n  local_34 = param_8;\n  local_30 = 0;\n  if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }\n  local_40 = param_3;\n  local_3c = param_4;\n  if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }\n  iVar2 = (int)local_40 - (int)param_3;\nLAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }\n  (*(code *)PTR___stack_chk_fail_000bddb4)();\n  if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }\n  if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }\n  uVar4 = *puVar7;\n  if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;\n  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;\n  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }\n  *puVar7 = 0;\n  if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }\n  if (uVar4 < 0x80) goto LAB_0001ea8c;\n  uVar5 = uVar5 >> 0x1d;\n  if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }\n  if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }\nLAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);\n  return uVar4;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "code *pcVar8;" (type_identifier "code") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "code *pcVar9;" (type_identifier "code") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "uint **local_58;" (type_identifier "uint") (pointer_declarator "**local_58" (* "*") (pointer_declarator "*local_58" (* "*") (identifier "local_58"))) (; ";")) (declaration "uint local_44;" (type_identifier "uint") (identifier "local_44") (; ";")) (declaration "uint *local_40;" (type_identifier "uint") (pointer_declarator "*local_40" (* "*") (identifier "local_40")) (; ";")) (declaration "code *local_3c;" (type_identifier "code") (pointer_declarator "*local_3c" (* "*") (identifier "local_3c")) (; ";")) (declaration "undefined4 local_38;" (type_identifier "undefined4") (identifier "local_38") (; ";")) (declaration "undefined4 local_34;" (type_identifier "undefined4") (identifier "local_34") (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000be114;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000be114" (identifier "local_2c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_000be114" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000be114")))) (; ";")) (expression_statement "piVar6 = param_2;" (assignment_expression "piVar6 = param_2" (identifier "piVar6") (= "=") (identifier "param_2")) (; ";")) (expression_statement "puVar7 = param_3;" (assignment_expression "puVar7 = param_3" (identifier "puVar7") (= "=") (identifier "param_3")) (; ";")) (expression_statement "pcVar8 = param_4;" (assignment_expression "pcVar8 = param_4" (identifier "pcVar8") (= "=") (identifier "param_4")) (; ";")) (expression_statement "iVar2 = charset_find_spec(param_5);" (assignment_expression "iVar2 = charset_find_spec(param_5)" (identifier "iVar2") (= "=") (call_expression "charset_find_spec(param_5)" (identifier "charset_find_spec") (argument_list "(param_5)" (( "(") (identifier "param_5") () ")")))) (; ";")) (expression_statement "local_38 = param_7;" (assignment_expression "local_38 = param_7" (identifier "local_38") (= "=") (identifier "param_7")) (; ";")) (expression_statement "local_34 = param_8;" (assignment_expression "local_34 = param_8" (identifier "local_34") (= "=") (identifier "param_8")) (; ";")) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_6 == (uint *)0x0) {\n    local_44 = 0;\n  }\n  else {\n    local_44 = *param_6;\n  }" (if "if") (parenthesized_expression "(param_6 == (uint *)0x0)" (( "(") (binary_expression "param_6 == (uint *)0x0" (identifier "param_6") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    local_44 = 0;\n  }" ({ "{") (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" (identifier "local_44") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    local_44 = *param_6;\n  }" (else "else") (compound_statement "{\n    local_44 = *param_6;\n  }" ({ "{") (expression_statement "local_44 = *param_6;" (assignment_expression "local_44 = *param_6" (identifier "local_44") (= "=") (pointer_expression "*param_6" (* "*") (identifier "param_6"))) (; ";")) (} "}")))) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" (identifier "local_40") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_3c = param_4;" (assignment_expression "local_3c = param_4" (identifier "local_3c") (= "=") (identifier "param_4")) (; ";")) (if_statement "if (0 < *param_2) {\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" (if "if") (parenthesized_expression "(0 < *param_2)" (( "(") (binary_expression "0 < *param_2" (number_literal "0") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (compound_statement "{\n    local_58 = &local_40;\n    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);\n    do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);\n  }" ({ "{") (expression_statement "local_58 = &local_40;" (assignment_expression "local_58 = &local_40" (identifier "local_58") (= "=") (pointer_expression "&local_40" (& "&") (identifier "local_40"))) (; ";")) (expression_statement "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);" (assignment_expression "pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0)" (identifier "pcVar9") (= "=") (cast_expression "(code *)(PTR_LAB_000bd204 + -0x19b0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000bd204 + -0x19b0)" (( "(") (binary_expression "PTR_LAB_000bd204 + -0x19b0" (identifier "PTR_LAB_000bd204") (+ "+") (number_literal "-0x19b0")) () ")")))) (; ";")) (do_statement "do {\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    } while (0 < iVar3 + -1);" (do "do") (compound_statement "{\n      puVar1 = local_40;\n      piVar6 = (int *)(uint)*(byte *)*param_1;\n      puVar7 = &local_44;\n      pcVar8 = pcVar9;\n      (**(code **)(iVar2 + 4))(iVar2);\n      if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }\n      if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }\n      *param_1 = *param_1 + 1;\n      iVar3 = *param_2;\n      *param_2 = iVar3 + -1;\n    }" ({ "{") (expression_statement "puVar1 = local_40;" (assignment_expression "puVar1 = local_40" (identifier "puVar1") (= "=") (identifier "local_40")) (; ";")) (expression_statement "piVar6 = (int *)(uint)*(byte *)*param_1;" (assignment_expression "piVar6 = (int *)(uint)*(byte *)*param_1" (identifier "piVar6") (= "=") (binary_expression "(int *)(uint)*(byte *)*param_1" (cast_expression "(int *)(uint)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")"))) (* "*") (cast_expression "(byte *)*param_1" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))))) (; ";")) (expression_statement "puVar7 = &local_44;" (assignment_expression "puVar7 = &local_44" (identifier "puVar7") (= "=") (pointer_expression "&local_44" (& "&") (identifier "local_44"))) (; ";")) (expression_statement "pcVar8 = pcVar9;" (assignment_expression "pcVar8 = pcVar9" (identifier "pcVar8") (= "=") (identifier "pcVar9")) (; ";")) (expression_statement "(**(code **)(iVar2 + 4))(iVar2);" (call_expression "(**(code **)(iVar2 + 4))(iVar2)" (parenthesized_expression "(**(code **)(iVar2 + 4))" (( "(") (pointer_expression "**(code **)(iVar2 + 4)" (* "*") (pointer_expression "*(code **)(iVar2 + 4)" (* "*") (cast_expression "(code **)(iVar2 + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 4)" (( "(") (binary_expression "iVar2 + 4" (identifier "iVar2") (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (if_statement "if (local_30 != 0) {\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" (if "if") (parenthesized_expression "(local_30 != 0)" (( "(") (binary_expression "local_30 != 0" (identifier "local_30") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar2 = (int)puVar1 - (int)param_3;\n        goto LAB_0001e880;\n      }" ({ "{") (expression_statement "iVar2 = (int)puVar1 - (int)param_3;" (assignment_expression "iVar2 = (int)puVar1 - (int)param_3" (identifier "iVar2") (= "=") (binary_expression "(int)puVar1 - (int)param_3" (cast_expression "(int)puVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar1")) (- "-") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")))) (; ";")) (goto_statement "goto LAB_0001e880;" (goto "goto") (statement_identifier "LAB_0001e880") (; ";")) (} "}"))) (if_statement "if (param_6 != (uint *)0x0) {\n        *param_6 = local_44;\n      }" (if "if") (parenthesized_expression "(param_6 != (uint *)0x0)" (( "(") (binary_expression "param_6 != (uint *)0x0" (identifier "param_6") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        *param_6 = local_44;\n      }" ({ "{") (expression_statement "*param_6 = local_44;" (assignment_expression "*param_6 = local_44" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (identifier "local_44")) (; ";")) (} "}"))) (expression_statement "*param_1 = *param_1 + 1;" (assignment_expression "*param_1 = *param_1 + 1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "*param_1 + 1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = *param_2;" (assignment_expression "iVar3 = *param_2" (identifier "iVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "*param_2 = iVar3 + -1;" (assignment_expression "*param_2 = iVar3 + -1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0 < iVar3 + -1)" (( "(") (binary_expression "0 < iVar3 + -1" (number_literal "0") (< "<") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar2 = (int)local_40 - (int)param_3;" (assignment_expression "iVar2 = (int)local_40 - (int)param_3" (identifier "iVar2") (= "=") (binary_expression "(int)local_40 - (int)param_3" (cast_expression "(int)local_40" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_40")) (- "-") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")))) (; ";")) (labeled_statement "LAB_0001e880:\n  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" (statement_identifier "LAB_0001e880") (: ":") (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {\n    return iVar2 >> 2;\n  }" (if "if") (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_000be114)" (( "(") (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_000be114" (identifier "local_2c") (== "==") (pointer_expression "*(int *)PTR___stack_chk_guard_000be114" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_000be114" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000be114")))) () ")")) (compound_statement "{\n    return iVar2 >> 2;\n  }" ({ "{") (return_statement "return iVar2 >> 2;" (return "return") (binary_expression "iVar2 >> 2" (identifier "iVar2") (>> ">>") (number_literal "2")) (; ";")) (} "}")))) (expression_statement "(*(code *)PTR___stack_chk_fail_000bddb4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000bddb4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000bddb4)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000bddb4" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000bddb4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000bddb4"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if ((int)piVar6 < 0x80) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "((int)piVar6 < 0x80)" (( "(") (binary_expression "(int)piVar6 < 0x80" (cast_expression "(int)piVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar6")) (< "<") (number_literal "0x80")) () ")")) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,piVar6);\n    return uVar4;\n  }" ({ "{") (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" (if "if") (parenthesized_expression "(*puVar7 != 0)" (( "(") (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" ({ "{") (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")"))) (; ";")) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar4 = (*pcVar8)(local_58,piVar6);" (assignment_expression "uVar4 = (*pcVar8)(local_58,piVar6)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,piVar6)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,piVar6)" (( "(") (identifier "local_58") (, ",") (identifier "piVar6") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (if_statement "if ((int)piVar6 - 0xfeU < 2) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "((int)piVar6 - 0xfeU < 2)" (( "(") (binary_expression "(int)piVar6 - 0xfeU < 2" (binary_expression "(int)piVar6 - 0xfeU" (cast_expression "(int)piVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar6")) (- "-") (number_literal "0xfeU")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" ({ "{") (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" (if "if") (parenthesized_expression "(*puVar7 != 0)" (( "(") (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n      *puVar7 = 0;\n    }" ({ "{") (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")"))) (; ";")) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (if_statement "if ((int *)0x3f < piVar6 + -0x20) {\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" (if "if") (parenthesized_expression "((int *)0x3f < piVar6 + -0x20)" (( "(") (binary_expression "(int *)0x3f < piVar6 + -0x20" (cast_expression "(int *)0x3f" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x3f")) (< "<") (binary_expression "piVar6 + -0x20" (identifier "piVar6") (+ "+") (number_literal "-0x20"))) () ")")) (compound_statement "{\n    if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }\n    if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }\n    if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }\n    if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }\n    if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }\n    if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }\n    uVar4 = (uint)piVar6 & 1 | 0xc4000000;\n    *puVar7 = uVar4;\n    return uVar4;\n  }" ({ "{") (if_statement "if (*puVar7 != 0) {\n      (*pcVar8)(local_58,0xffff);\n    }" (if "if") (parenthesized_expression "(*puVar7 != 0)" (( "(") (binary_expression "*puVar7 != 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      (*pcVar8)(local_58,0xffff);\n    }" ({ "{") (expression_statement "(*pcVar8)(local_58,0xffff);" (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")"))) (; ";")) (} "}"))) (if_statement "if (piVar6 + -0x30 < (int *)0x20) {\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" (if "if") (parenthesized_expression "(piVar6 + -0x30 < (int *)0x20)" (( "(") (binary_expression "piVar6 + -0x30 < (int *)0x20" (binary_expression "piVar6 + -0x30" (identifier "piVar6") (+ "+") (number_literal "-0x30")) (< "<") (cast_expression "(int *)0x20" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x20"))) () ")")) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;\n      return 0x44000000;\n    }" ({ "{") (expression_statement "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0x1f | 0x44000000" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (binary_expression "(uint)piVar6 & 0x1f | 0x44000000" (binary_expression "(uint)piVar6 & 0x1f" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "0x1f")) (| "|") (number_literal "0x44000000"))) (; ";")) (return_statement "return 0x44000000;" (return "return") (number_literal "0x44000000") (; ";")) (} "}"))) (if_statement "if (piVar6 + -0x38 < (int *)0x10) {\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" (if "if") (parenthesized_expression "(piVar6 + -0x38 < (int *)0x10)" (( "(") (binary_expression "piVar6 + -0x38 < (int *)0x10" (binary_expression "piVar6 + -0x38" (identifier "piVar6") (+ "+") (number_literal "-0x38")) (< "<") (cast_expression "(int *)0x10" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x10"))) () ")")) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;\n      return 0x64000000;\n    }" ({ "{") (expression_statement "*puVar7 = (uint)piVar6 & 0xf | 0x64000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 0xf | 0x64000000" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (binary_expression "(uint)piVar6 & 0xf | 0x64000000" (binary_expression "(uint)piVar6 & 0xf" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "0xf")) (| "|") (number_literal "0x64000000"))) (; ";")) (return_statement "return 0x64000000;" (return "return") (number_literal "0x64000000") (; ";")) (} "}"))) (if_statement "if (piVar6 + -0x3c < (int *)0x8) {\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" (if "if") (parenthesized_expression "(piVar6 + -0x3c < (int *)0x8)" (( "(") (binary_expression "piVar6 + -0x3c < (int *)0x8" (binary_expression "piVar6 + -0x3c" (identifier "piVar6") (+ "+") (number_literal "-0x3c")) (< "<") (cast_expression "(int *)0x8" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x8"))) () ")")) (compound_statement "{\n      *puVar7 = (uint)piVar6 & 7 | 0x84000000;\n      return 0x84000000;\n    }" ({ "{") (expression_statement "*puVar7 = (uint)piVar6 & 7 | 0x84000000;" (assignment_expression "*puVar7 = (uint)piVar6 & 7 | 0x84000000" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (binary_expression "(uint)piVar6 & 7 | 0x84000000" (binary_expression "(uint)piVar6 & 7" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "7")) (| "|") (number_literal "0x84000000"))) (; ";")) (return_statement "return 0x84000000;" (return "return") (number_literal "0x84000000") (; ";")) (} "}"))) (if_statement "if (piVar6 + -0x3e < (int *)0x4) {\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" (if "if") (parenthesized_expression "(piVar6 + -0x3e < (int *)0x4)" (( "(") (binary_expression "piVar6 + -0x3e < (int *)0x4" (binary_expression "piVar6 + -0x3e" (identifier "piVar6") (+ "+") (number_literal "-0x3e")) (< "<") (cast_expression "(int *)0x4" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x4"))) () ")")) (compound_statement "{\n      uVar4 = (uint)piVar6 & 3 | 0xa4000000;\n      *puVar7 = uVar4;\n      return uVar4;\n    }" ({ "{") (expression_statement "uVar4 = (uint)piVar6 & 3 | 0xa4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 3 | 0xa4000000" (identifier "uVar4") (= "=") (binary_expression "(uint)piVar6 & 3 | 0xa4000000" (binary_expression "(uint)piVar6 & 3" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "3")) (| "|") (number_literal "0xa4000000"))) (; ";")) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar4")) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (if_statement "if ((int *)0x1 < piVar6 + -0x3f) {\n      return 0;\n    }" (if "if") (parenthesized_expression "((int *)0x1 < piVar6 + -0x3f)" (( "(") (binary_expression "(int *)0x1 < piVar6 + -0x3f" (cast_expression "(int *)0x1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x1")) (< "<") (binary_expression "piVar6 + -0x3f" (identifier "piVar6") (+ "+") (number_literal "-0x3f"))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar4 = (uint)piVar6 & 1 | 0xc4000000;" (assignment_expression "uVar4 = (uint)piVar6 & 1 | 0xc4000000" (identifier "uVar4") (= "=") (binary_expression "(uint)piVar6 & 1 | 0xc4000000" (binary_expression "(uint)piVar6 & 1" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "1")) (| "|") (number_literal "0xc4000000"))) (; ";")) (expression_statement "*puVar7 = uVar4;" (assignment_expression "*puVar7 = uVar4" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (identifier "uVar4")) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (expression_statement "uVar4 = *puVar7;" (assignment_expression "uVar4 = *puVar7" (identifier "uVar4") (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (if_statement "if (uVar4 == 0) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" ({ "{") (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (expression_statement "uVar5 = (uVar4 & 0xfc000000) + 0x4000000;" (assignment_expression "uVar5 = (uVar4 & 0xfc000000) + 0x4000000" (identifier "uVar5") (= "=") (binary_expression "(uVar4 & 0xfc000000) + 0x4000000" (parenthesized_expression "(uVar4 & 0xfc000000)" (( "(") (binary_expression "uVar4 & 0xfc000000" (identifier "uVar4") (& "&") (number_literal "0xfc000000")) () ")")) (+ "+") (number_literal "0x4000000"))) (; ";")) (expression_statement "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;" (assignment_expression "uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6" (identifier "uVar4") (= "=") (binary_expression "(uint)piVar6 & 0x3f | uVar4 << 6" (binary_expression "(uint)piVar6 & 0x3f" (cast_expression "(uint)piVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar6")) (& "&") (number_literal "0x3f")) (| "|") (binary_expression "uVar4 << 6" (identifier "uVar4") (<< "<<") (number_literal "6")))) (; ";")) (if_statement "if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" (if "if") (parenthesized_expression "(((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0)" (( "(") (binary_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0" (parenthesized_expression "((uVar5 * 8 ^ uVar5) & 0xe0000000)" (( "(") (binary_expression "(uVar5 * 8 ^ uVar5) & 0xe0000000" (parenthesized_expression "(uVar5 * 8 ^ uVar5)" (( "(") (binary_expression "uVar5 * 8 ^ uVar5" (binary_expression "uVar5 * 8" (identifier "uVar5") (* "*") (number_literal "8")) (^ "^") (identifier "uVar5")) () ")")) (& "&") (number_literal "0xe0000000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    *puVar7 = uVar4 | uVar5;\n    return uVar4 | uVar5;\n  }" ({ "{") (expression_statement "*puVar7 = uVar4 | uVar5;" (assignment_expression "*puVar7 = uVar4 | uVar5" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (binary_expression "uVar4 | uVar5" (identifier "uVar4") (| "|") (identifier "uVar5"))) (; ";")) (return_statement "return uVar4 | uVar5;" (return "return") (binary_expression "uVar4 | uVar5" (identifier "uVar4") (| "|") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar4 - 0xd800 < 0x800) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(uVar4 - 0xd800 < 0x800)" (( "(") (binary_expression "uVar4 - 0xd800 < 0x800" (binary_expression "uVar4 - 0xd800" (identifier "uVar4") (- "-") (number_literal "0xd800")) (< "<") (number_literal "0x800")) () ")")) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" ({ "{") (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (if_statement "if (uVar4 - 0xfffe < 2) {\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(uVar4 - 0xfffe < 2)" (( "(") (binary_expression "uVar4 - 0xfffe < 2" (binary_expression "uVar4 - 0xfffe" (identifier "uVar4") (- "-") (number_literal "0xfffe")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    uVar4 = (*pcVar8)(local_58,0xffff);\n    return uVar4;\n  }" ({ "{") (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (if_statement "if (uVar4 < 0x80) goto LAB_0001ea8c;" (if "if") (parenthesized_expression "(uVar4 < 0x80)" (( "(") (binary_expression "uVar4 < 0x80" (identifier "uVar4") (< "<") (number_literal "0x80")) () ")")) (goto_statement "goto LAB_0001ea8c;" (goto "goto") (statement_identifier "LAB_0001ea8c") (; ";"))) (expression_statement "uVar5 = uVar5 >> 0x1d;" (assignment_expression "uVar5 = uVar5 >> 0x1d" (identifier "uVar5") (= "=") (binary_expression "uVar5 >> 0x1d" (identifier "uVar5") (>> ">>") (number_literal "0x1d"))) (; ";")) (if_statement "if (uVar4 < 0x800) {\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }\n  else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" (if "if") (parenthesized_expression "(uVar4 < 0x800)" (( "(") (binary_expression "uVar4 < 0x800" (identifier "uVar4") (< "<") (number_literal "0x800")) () ")")) (compound_statement "{\n    if (2 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;\nLAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;\n  }" ({ "{") (if_statement "if (2 < uVar5) goto LAB_0001ea8c;" (if "if") (parenthesized_expression "(2 < uVar5)" (( "(") (binary_expression "2 < uVar5" (number_literal "2") (< "<") (identifier "uVar5")) () ")")) (goto_statement "goto LAB_0001ea8c;" (goto "goto") (statement_identifier "LAB_0001ea8c") (; ";"))) (labeled_statement "LAB_0001ea68:\n    if (3 < uVar5) goto LAB_0001ea8c;" (statement_identifier "LAB_0001ea68") (: ":") (if_statement "if (3 < uVar5) goto LAB_0001ea8c;" (if "if") (parenthesized_expression "(3 < uVar5)" (( "(") (binary_expression "3 < uVar5" (number_literal "3") (< "<") (identifier "uVar5")) () ")")) (goto_statement "goto LAB_0001ea8c;" (goto "goto") (statement_identifier "LAB_0001ea8c") (; ";")))) (labeled_statement "LAB_0001ea74:\n    if (4 < uVar5) goto LAB_0001ea8c;" (statement_identifier "LAB_0001ea74") (: ":") (if_statement "if (4 < uVar5) goto LAB_0001ea8c;" (if "if") (parenthesized_expression "(4 < uVar5)" (( "(") (binary_expression "4 < uVar5" (number_literal "4") (< "<") (identifier "uVar5")) () ")")) (goto_statement "goto LAB_0001ea8c;" (goto "goto") (statement_identifier "LAB_0001ea8c") (; ";")))) (} "}")) (else_clause "else {\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" (else "else") (compound_statement "{\n    if (uVar4 < 0x10000) goto LAB_0001ea68;\n    if (uVar4 < 0x200000) goto LAB_0001ea74;\n    if (0x3ffffff < uVar4) goto LAB_0001eaec;\n  }" ({ "{") (if_statement "if (uVar4 < 0x10000) goto LAB_0001ea68;" (if "if") (parenthesized_expression "(uVar4 < 0x10000)" (( "(") (binary_expression "uVar4 < 0x10000" (identifier "uVar4") (< "<") (number_literal "0x10000")) () ")")) (goto_statement "goto LAB_0001ea68;" (goto "goto") (statement_identifier "LAB_0001ea68") (; ";"))) (if_statement "if (uVar4 < 0x200000) goto LAB_0001ea74;" (if "if") (parenthesized_expression "(uVar4 < 0x200000)" (( "(") (binary_expression "uVar4 < 0x200000" (identifier "uVar4") (< "<") (number_literal "0x200000")) () ")")) (goto_statement "goto LAB_0001ea74;" (goto "goto") (statement_identifier "LAB_0001ea74") (; ";"))) (if_statement "if (0x3ffffff < uVar4) goto LAB_0001eaec;" (if "if") (parenthesized_expression "(0x3ffffff < uVar4)" (( "(") (binary_expression "0x3ffffff < uVar4" (number_literal "0x3ffffff") (< "<") (identifier "uVar4")) () ")")) (goto_statement "goto LAB_0001eaec;" (goto "goto") (statement_identifier "LAB_0001eaec") (; ";"))) (} "}")))) (if_statement "if (uVar5 < 6) {\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(uVar5 < 6)" (( "(") (binary_expression "uVar5 < 6" (identifier "uVar5") (< "<") (number_literal "6")) () ")")) (compound_statement "{\nLAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);\n    return uVar4;\n  }" ({ "{") (labeled_statement "LAB_0001eaec:\n    uVar4 = (*pcVar8)(local_58);" (statement_identifier "LAB_0001eaec") (: ":") (expression_statement "uVar4 = (*pcVar8)(local_58);" (assignment_expression "uVar4 = (*pcVar8)(local_58)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58)" (( "(") (identifier "local_58") () ")")))) (; ";"))) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (labeled_statement "LAB_0001ea8c:\n  uVar4 = (*pcVar8)(local_58,0xffff);" (statement_identifier "LAB_0001ea8c") (: ":") (expression_statement "uVar4 = (*pcVar8)(local_58,0xffff);" (assignment_expression "uVar4 = (*pcVar8)(local_58,0xffff)" (identifier "uVar4") (= "=") (call_expression "(*pcVar8)(local_58,0xffff)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(local_58,0xffff)" (( "(") (identifier "local_58") (, ",") (number_literal "0xffff") () ")")))) (; ";"))) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (return_statement (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (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: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (identifier)))) (return_statement (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier)))))) (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (number_literal)))))) (return_statement (identifier)))))

uint MASKED(int *param_1,int *param_2,uint *param_3,code *param_4,undefined4 param_5,
                       uint *param_6,undefined4 param_7,undefined4 param_8)

{
  uint *puVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int *piVar6;
  uint *puVar7;
  code *pcVar8;
  code *pcVar9;
  uint **local_58;
  uint local_44;
  uint *local_40;
  code *local_3c;
  undefined4 local_38;
  undefined4 local_34;
  int local_30;
  int local_2c;
  
  local_2c = *(int *)PTR___stack_chk_guard_000be114;
  piVar6 = param_2;
  puVar7 = param_3;
  pcVar8 = param_4;
  iVar2 = charset_find_spec(param_5);
  local_38 = param_7;
  local_34 = param_8;
  local_30 = 0;
  if (param_6 == (uint *)0x0) {
    local_44 = 0;
  }
  else {
    local_44 = *param_6;
  }
  local_40 = param_3;
  local_3c = param_4;
  if (0 < *param_2) {
    local_58 = &local_40;
    pcVar9 = (code *)(PTR_LAB_000bd204 + -0x19b0);
    do {
      puVar1 = local_40;
      piVar6 = (int *)(uint)*(byte *)*param_1;
      puVar7 = &local_44;
      pcVar8 = pcVar9;
      (**(code **)(iVar2 + 4))(iVar2);
      if (local_30 != 0) {
        iVar2 = (int)puVar1 - (int)param_3;
        goto LAB_0001e880;
      }
      if (param_6 != (uint *)0x0) {
        *param_6 = local_44;
      }
      *param_1 = *param_1 + 1;
      iVar3 = *param_2;
      *param_2 = iVar3 + -1;
    } while (0 < iVar3 + -1);
  }
  iVar2 = (int)local_40 - (int)param_3;
LAB_0001e880:
  if (local_2c == *(int *)PTR___stack_chk_guard_000be114) {
    return iVar2 >> 2;
  }
  (*(code *)PTR___stack_chk_fail_000bddb4)();
  if ((int)piVar6 < 0x80) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
      *puVar7 = 0;
    }
    uVar4 = (*pcVar8)(local_58,piVar6);
    return uVar4;
  }
  if ((int)piVar6 - 0xfeU < 2) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
      *puVar7 = 0;
    }
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if ((int *)0x3f < piVar6 + -0x20) {
    if (*puVar7 != 0) {
      (*pcVar8)(local_58,0xffff);
    }
    if (piVar6 + -0x30 < (int *)0x20) {
      *puVar7 = (uint)piVar6 & 0x1f | 0x44000000;
      return 0x44000000;
    }
    if (piVar6 + -0x38 < (int *)0x10) {
      *puVar7 = (uint)piVar6 & 0xf | 0x64000000;
      return 0x64000000;
    }
    if (piVar6 + -0x3c < (int *)0x8) {
      *puVar7 = (uint)piVar6 & 7 | 0x84000000;
      return 0x84000000;
    }
    if (piVar6 + -0x3e < (int *)0x4) {
      uVar4 = (uint)piVar6 & 3 | 0xa4000000;
      *puVar7 = uVar4;
      return uVar4;
    }
    if ((int *)0x1 < piVar6 + -0x3f) {
      return 0;
    }
    uVar4 = (uint)piVar6 & 1 | 0xc4000000;
    *puVar7 = uVar4;
    return uVar4;
  }
  uVar4 = *puVar7;
  if (uVar4 == 0) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  uVar5 = (uVar4 & 0xfc000000) + 0x4000000;
  uVar4 = (uint)piVar6 & 0x3f | uVar4 << 6;
  if (((uVar5 * 8 ^ uVar5) & 0xe0000000) != 0) {
    *puVar7 = uVar4 | uVar5;
    return uVar4 | uVar5;
  }
  *puVar7 = 0;
  if (uVar4 - 0xd800 < 0x800) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if (uVar4 - 0xfffe < 2) {
    uVar4 = (*pcVar8)(local_58,0xffff);
    return uVar4;
  }
  if (uVar4 < 0x80) goto LAB_0001ea8c;
  uVar5 = uVar5 >> 0x1d;
  if (uVar4 < 0x800) {
    if (2 < uVar5) goto LAB_0001ea8c;
LAB_0001ea68:
    if (3 < uVar5) goto LAB_0001ea8c;
LAB_0001ea74:
    if (4 < uVar5) goto LAB_0001ea8c;
  }
  else {
    if (uVar4 < 0x10000) goto LAB_0001ea68;
    if (uVar4 < 0x200000) goto LAB_0001ea74;
    if (0x3ffffff < uVar4) goto LAB_0001eaec;
  }
  if (uVar5 < 6) {
LAB_0001eaec:
    uVar4 = (*pcVar8)(local_58);
    return uVar4;
  }
LAB_0001ea8c:
  uVar4 = (*pcVar8)(local_58,0xffff);
  return uVar4;
}

