
z_size_t gz_read(gz_statep state,voidp buf,z_size_t len)

{
  undefined *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  gz_statep state_00;
  uchar *buf_00;
  uint uVar5;
  code *pcVar6;
  undefined1 *puVar7;
  z_size_t zVar8;
  undefined4 in_stack_ffffffcc;
  uint n;
  gz_statep local_2c;
  
  puVar1 = PTR___stack_chk_guard_000360f4;
  puVar7 = &_gp;
  local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4;
  zVar8 = 0;
  buf_00 = (uchar *)buf;
  uVar5 = len;
  if (len == 0) {
LAB_0001f2bc:
    if (local_2c == *(gz_statep *)puVar1) {
      return zVar8;
    }
    pcVar6 = *(code **)(puVar7 + -0x7f04);
    state_00 = local_2c;
    (*pcVar6)();
    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||
       ((state_00->err != 0 && (state_00->err != -5)))) {
      return 0xffffffff;
    }
    if ((int)uVar5 < 0) {
      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));
    }
    else {
      zVar8 = gz_read(state_00,buf_00,uVar5);
      if (zVar8 != 0) {
        return zVar8;
      }
      if (state_00->err == 0) {
        return 0;
      }
      if (state_00->err == -5) {
        return 0;
      }
    }
    return 0xffffffff;
  }
  puVar7 = &_gp;
  if (state->seek != 0) {
    uVar5 = *(uint *)&state->skip;
    state->seek = 0;
    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));
    if (iVar4 == -1) {
      zVar8 = 0;
      goto LAB_0001f2bc;
    }
  }
  zVar8 = 0;
LAB_0001f1a8:
  uVar2 = (state->x).have;
  if (uVar2 == 0) goto LAB_0001f230;
LAB_0001f1b4:
  n = len;
  if (uVar2 < len) {
    n = uVar2;
  }
  uVar2 = n;
  buf_00 = (state->x).next;
  uVar5 = n;
  (**(code **)(puVar7 + -0x7ef4))(buf);
  (state->x).next = (state->x).next + uVar2;
  (state->x).have = (state->x).have - uVar2;
LAB_0001f1f8:
  while( true ) {
    uVar3 = (uint)(state->x).pos;
    len = len - uVar2;
    iVar4 = *(int *)&(state->x).pos;
    buf = (voidp)((int)buf + uVar2);
    zVar8 = zVar8 + uVar2;
    uVar2 = uVar3 + uVar2;
    *(uint *)((int)&(state->x).pos + 4) = uVar2;
    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;
    if (len == 0) goto LAB_0001f2bc;
    uVar2 = (state->x).have;
    if (uVar2 != 0) break;
LAB_0001f230:
    n = len;
    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {
      state->past = 1;
      goto LAB_0001f2bc;
    }
    uVar5 = len;
    if ((state->how == 0) || (len < state->size << 1)) {
      iVar4 = gz_fetch(state);
      if (iVar4 == -1) goto LAB_0001f2b8;
      goto LAB_0001f1a8;
    }
    if (state->how == 1) goto LAB_0001f328;
    (state->strm).avail_out = len;
    (state->strm).next_out = (Bytef *)buf;
    iVar4 = gz_decomp(state);
    if (iVar4 == -1) goto LAB_0001f2b8;
    n = (state->x).have;
    (state->x).have = 0;
    uVar2 = n;
  }
  goto LAB_0001f1b4;
LAB_0001f328:
  buf_00 = (uchar *)buf;
  iVar4 = gz_load(state,(uchar *)buf,len,&n);
  uVar2 = n;
  if (iVar4 == -1) {
LAB_0001f2b8:
    zVar8 = 0;
    goto LAB_0001f2bc;
  }
  goto LAB_0001f1f8;
}



int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)

{
  undefined *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint local_30;
  int local_2c;
  
  puVar1 = PTR___stack_chk_guard_000360f4;
  local_2c = *(int *)PTR___stack_chk_guard_000360f4;
  iVar6 = 0;
  uVar5 = param_3;
  if (param_3 == 0) {
LAB_0001f2bc:
    if (local_2c == *(int *)puVar1) {
      return iVar6;
    }
    iVar6 = local_2c;
    (*(code *)PTR___stack_chk_fail_000360ec)();
    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||
       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {
      return -1;
    }
    if ((int)uVar5 < 0) {
      FUN_0001e5ec();
    }
    else {
      iVar4 = FUN_0001f12c();
      if (iVar4 != 0) {
        return iVar4;
      }
      if (*(int *)(iVar6 + 0x5c) == 0) {
        return 0;
      }
      if (*(int *)(iVar6 + 0x5c) == -5) {
        return 0;
      }
    }
    return -1;
  }
  if (param_1[0x16] != 0) {
    uVar5 = param_1[0x14];
    param_1[0x16] = 0;
    iVar6 = FUN_0001eff4();
    if (iVar6 == -1) {
      iVar6 = 0;
      goto LAB_0001f2bc;
    }
  }
  iVar6 = 0;
LAB_0001f1a8:
  uVar2 = *param_1;
  if (uVar2 == 0) goto LAB_0001f230;
LAB_0001f1b4:
  local_30 = param_3;
  if (uVar2 < param_3) {
    local_30 = uVar2;
  }
  uVar2 = local_30;
  uVar5 = local_30;
  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);
  param_1[1] = param_1[1] + uVar2;
  *param_1 = *param_1 - uVar2;
LAB_0001f1f8:
  while( true ) {
    uVar3 = param_1[3];
    param_3 = param_3 - uVar2;
    param_2 = param_2 + uVar2;
    iVar6 = iVar6 + uVar2;
    uVar2 = uVar3 + uVar2;
    param_1[3] = uVar2;
    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];
    if (param_3 == 0) goto LAB_0001f2bc;
    uVar2 = *param_1;
    if (uVar2 != 0) break;
LAB_0001f230:
    local_30 = param_3;
    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {
      param_1[0x11] = 1;
      goto LAB_0001f2bc;
    }
    uVar5 = param_3;
    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {
      iVar4 = FUN_0001eeac(param_1);
      if (iVar4 == -1) goto LAB_0001f2b8;
      goto LAB_0001f1a8;
    }
    if (param_1[0xc] == 1) goto LAB_0001f328;
    param_1[0x1d] = param_3;
    param_1[0x1c] = param_2;
    iVar4 = FUN_0001ec10(param_1);
    if (iVar4 == -1) goto LAB_0001f2b8;
    local_30 = *param_1;
    *param_1 = 0;
    uVar2 = local_30;
  }
  goto LAB_0001f1b4;
LAB_0001f328:
  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);
  uVar2 = local_30;
  if (iVar4 == -1) {
LAB_0001f2b8:
    iVar6 = 0;
    goto LAB_0001f2bc;
  }
  goto LAB_0001f1f8;
}


lui gp,0x2
addiu gp,gp,-0x113c
addu gp,gp,t9
addiu sp,sp,-0x48
sw s3,0x2c(sp)
lw s3,-0x7efc(gp)
sw gp,0x10(sp)
sw ra,0x44(sp)
sw s8,0x40(sp)
sw s7,0x3c(sp)
sw s6,0x38(sp)
sw s5,0x34(sp)
sw s4,0x30(sp)
sw s2,0x28(sp)
sw s1,0x24(sp)
sw s0,0x20(sp)
lw v0,0x0(s3)
sw v0,0x1c(sp)
beq a2,zero,0x0001f2bc
_or s8,zero,zero
lw v0,0x58(a0)
or s2,a2,zero
or s0,a0,zero
bne v0,zero,0x0001f2fc
_or s7,a1,zero
lw s4,-0x7fd4(gp)
or s8,zero,zero
lw s5,-0x7fd4(gp)
lw s6,-0x7fd4(gp)
addiu s4,s4,-0x1154
addiu s5,s5,-0x13f0
lw v0,0x0(s0)
beq v0,zero,0x0001f230
_sw s2,0x18(sp)
sltu v1,v0,s2
beq v1,zero,0x0001f1c8
_or s1,s2,zero
sw v0,0x18(sp)
or s1,v0,zero
lw t9,-0x7ef4(gp)
or a2,s1,zero
lw a1,0x4(s0)
jalr t9
_or a0,s7,zero
lw v1,0x4(s0)
lw v0,0x0(s0)
lw gp,0x10(sp)
addu v1,v1,s1
subu v0,v0,s1
sw v1,0x4(s0)
sw v0,0x0(s0)
lw v0,0xc(s0)
subu s2,s2,s1
lw v1,0x8(s0)
addu s7,s7,s1
addu s8,s8,s1
addu s1,v0,s1
sltu v0,s1,v0
sw s1,0xc(s0)
addu v0,v0,v1
beq s2,zero,0x0001f2bc
_sw v0,0x8(s0)
lw v0,0x0(s0)
bne v0,zero,0x0001f1b4
_sw s2,0x18(sp)
lw v0,0x40(s0)
beq v0,zero,0x0001f248
_nop
lw v0,0x68(s0)
beq v0,zero,0x0001f350
_li v0,0x1
lw v1,0x30(s0)
beq v1,zero,0x0001f2a0
_lw a2,0x18(sp)
lw v0,0x1c(s0)
sll v0,v0,0x1
sltu v0,a2,v0
bne v0,zero,0x0001f2a4
_or t9,s4,zero
li v0,0x1
beq v1,v0,0x0001f328
_or a0,s0,zero
sw a2,0x74(s0)
or t9,s5,zero
bal 0x0001ec10
_sw s7,0x70(s0)
li v1,-0x1
beq v0,v1,0x0001f2b8
_lw gp,0x10(sp)
lw s1,0x0(s0)
sw zero,0x0(s0)
b 0x0001f1f8
_sw s1,0x18(sp)
or t9,s4,zero
bal 0x0001eeac
_or a0,s0,zero
li v1,-0x1
bne v0,v1,0x0001f1a8
_lw gp,0x10(sp)
or s8,zero,zero
lw a0,0x1c(sp)
or v0,s8,zero
lw v1,0x0(s3)
bne a0,v1,0x0001f358
_lw ra,0x44(sp)
lw s8,0x40(sp)
lw s7,0x3c(sp)
lw s6,0x38(sp)
lw s5,0x34(sp)
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x48
lw t9,-0x7fd4(gp)
lw a3,0x54(a0)
lw a2,0x50(a0)
addiu t9,t9,-0x100c
bal 0x0001eff4
_sw zero,0x58(a0)
li v1,-0x1
bne v0,v1,0x0001f190
_lw gp,0x10(sp)
b 0x0001f2bc
_or s8,zero,zero
addiu a3,sp,0x18
addiu t9,s6,-0x1880
or a1,s7,zero
bal 0x0001e780
_or a0,s0,zero
li v1,-0x1
beq v0,v1,0x0001f2b8
_lw gp,0x10(sp)
b 0x0001f1f8
_lw s1,0x18(sp)
b 0x0001f2bc
_sw v0,0x44(s0)
lw t9,-0x7f04(gp)
jalr t9
_nop
(translation_unit "int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}\n\n" (function_definition "int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" primitive_type (function_declarator "FUN_0001f12c(uint *param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint *param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000360f4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000360f4" identifier = identifier) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000360f4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000360f4" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000360f4" * (cast_expression "(int *)PTR___stack_chk_guard_000360f4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" identifier = identifier) ;) (if_statement "if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" { (labeled_statement "LAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" statement_identifier : (if_statement "if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" if (parenthesized_expression "(local_2c == *(int *)puVar1)" ( (binary_expression "local_2c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) }))) (expression_statement "iVar6 = local_2c;" (assignment_expression "iVar6 = local_2c" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000360ec)();" (call_expression "(*(code *)PTR___stack_chk_fail_000360ec)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000360ec)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000360ec" * (cast_expression "(code *)PTR___stack_chk_fail_000360ec" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }" if (parenthesized_expression "(((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))))" ( (binary_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" (parenthesized_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f))" ( (binary_expression "(iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)" (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) || (parenthesized_expression "(*(int *)(iVar6 + 0x10) != 0x1c4f)" ( (binary_expression "*(int *)(iVar6 + 0x10) != 0x1c4f" (pointer_expression "*(int *)(iVar6 + 0x10)" * (cast_expression "(int *)(iVar6 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x10)" ( (binary_expression "iVar6 + 0x10" identifier + number_literal) )))) != number_literal) ))) )) || (parenthesized_expression "((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" ( (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))" ( (binary_expression "*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)" (binary_expression "*(int *)(iVar6 + 0x5c) != 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != -5)" ( (binary_expression "*(int *)(iVar6 + 0x5c) != -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) != number_literal) ))) )) ))) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (if_statement "if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      FUN_0001e5ec();\n    }" { (expression_statement "FUN_0001e5ec();" (call_expression "FUN_0001e5ec()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" else (compound_statement "{\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" { (expression_statement "iVar4 = FUN_0001f12c();" (assignment_expression "iVar4 = FUN_0001f12c()" identifier = (call_expression "FUN_0001f12c()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 != 0) {\n        return iVar4;\n      }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar4;\n      }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == 0)" ( (binary_expression "*(int *)(iVar6 + 0x5c) == 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == -5)" ( (binary_expression "*(int *)(iVar6 + 0x5c) == -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return -1;" return number_literal ;) })) (if_statement "if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" if (parenthesized_expression "(param_1[0x16] != 0)" ( (binary_expression "param_1[0x16] != 0" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" { (expression_statement "uVar5 = param_1[0x14];" (assignment_expression "uVar5 = param_1[0x14]" identifier = (subscript_expression "param_1[0x14]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x16] = 0;" (assignment_expression "param_1[0x16] = 0" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = FUN_0001eff4();" (assignment_expression "iVar6 = FUN_0001eff4()" identifier = (call_expression "FUN_0001eff4()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001f1a8:\n  uVar2 = *param_1;" statement_identifier : (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (if_statement "if (uVar2 == 0) goto LAB_0001f230;" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f230;" goto statement_identifier ;)) (labeled_statement "LAB_0001f1b4:\n  local_30 = param_3;" statement_identifier : (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;)) (if_statement "if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }" if (parenthesized_expression "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )) (compound_statement "{\n    local_30 = uVar2;\n  }" { (expression_statement "local_30 = uVar2;" (assignment_expression "local_30 = uVar2" identifier = identifier) ;) })) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) (expression_statement "uVar5 = local_30;" (assignment_expression "uVar5 = local_30" identifier = identifier) ;) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1])" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" ( (pointer_expression "*(code *)PTR_memcpy_000360fc" * (cast_expression "(code *)PTR_memcpy_000360fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = param_1[1] + uVar2;" (assignment_expression "param_1[1] = param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier)) ;) (expression_statement "*param_1 = *param_1 - uVar2;" (assignment_expression "*param_1 = *param_1 - uVar2" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 - uVar2" (pointer_expression "*param_1" * identifier) - identifier)) ;) (labeled_statement "LAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" statement_identifier : (while_statement "while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" { (expression_statement "uVar3 = param_1[3];" (assignment_expression "uVar3 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_3 = param_3 - uVar2;" (assignment_expression "param_3 = param_3 - uVar2" identifier = (binary_expression "param_3 - uVar2" identifier - identifier)) ;) (expression_statement "param_2 = param_2 + uVar2;" (assignment_expression "param_2 = param_2 + uVar2" identifier = (binary_expression "param_2 + uVar2" identifier + identifier)) ;) (expression_statement "iVar6 = iVar6 + uVar2;" (assignment_expression "iVar6 = iVar6 + uVar2" identifier = (binary_expression "iVar6 + uVar2" identifier + identifier)) ;) (expression_statement "uVar2 = uVar3 + uVar2;" (assignment_expression "uVar2 = uVar3 + uVar2" identifier = (binary_expression "uVar3 + uVar2" identifier + identifier)) ;) (expression_statement "param_1[3] = uVar2;" (assignment_expression "param_1[3] = uVar2" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];" (assignment_expression "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "(uint)(uVar2 < uVar3) + param_1[2]" (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) + (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (param_3 == 0) goto LAB_0001f2bc;" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;)) (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (uVar2 != 0) break;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0001f230:\n    local_30 = param_3;" statement_identifier : (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;)) (if_statement "if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "((param_1[0x10] != 0) && (param_1[0x1a] == 0))" ( (binary_expression "(param_1[0x10] != 0) && (param_1[0x1a] == 0)" (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "(param_1[0x1a] == 0)" ( (binary_expression "param_1[0x1a] == 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "param_1[0x11] = 1;" (assignment_expression "param_1[0x11] = 1" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" identifier = identifier) ;) (if_statement "if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" if (parenthesized_expression "((param_1[0xc] == 0) || (param_3 < param_1[7] << 1))" ( (binary_expression "(param_1[0xc] == 0) || (param_3 < param_1[7] << 1)" (parenthesized_expression "(param_1[0xc] == 0)" ( (binary_expression "param_1[0xc] == 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(param_3 < param_1[7] << 1)" ( (binary_expression "param_3 < param_1[7] << 1" identifier < (binary_expression "param_1[7] << 1" (subscript_expression "param_1[7]" identifier [ number_literal ]) << number_literal)) ))) )) (compound_statement "{\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" { (expression_statement "iVar4 = FUN_0001eeac(param_1);" (assignment_expression "iVar4 = FUN_0001eeac(param_1)" identifier = (call_expression "FUN_0001eeac(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (goto_statement "goto LAB_0001f1a8;" goto statement_identifier ;) })) (if_statement "if (param_1[0xc] == 1) goto LAB_0001f328;" if (parenthesized_expression "(param_1[0xc] == 1)" ( (binary_expression "param_1[0xc] == 1" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) )) (goto_statement "goto LAB_0001f328;" goto statement_identifier ;)) (expression_statement "param_1[0x1d] = param_3;" (assignment_expression "param_1[0x1d] = param_3" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1c] = param_2;" (assignment_expression "param_1[0x1c] = param_2" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar4 = FUN_0001ec10(param_1);" (assignment_expression "iVar4 = FUN_0001ec10(param_1)" identifier = (call_expression "FUN_0001ec10(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (expression_statement "local_30 = *param_1;" (assignment_expression "local_30 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) }))) (goto_statement "goto LAB_0001f1b4;" goto statement_identifier ;) (labeled_statement "LAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" statement_identifier : (expression_statement "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" (assignment_expression "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30)" identifier = (call_expression "FUN_0001e780(param_1,param_2,param_3,&local_30)" identifier (argument_list "(param_1,param_2,param_3,&local_30)" ( identifier , identifier , identifier , (pointer_expression "&local_30" & identifier) )))) ;)) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) (if_statement "if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" { (labeled_statement "LAB_0001f2b8:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (goto_statement "goto LAB_0001f1f8;" goto statement_identifier ;) })))
(translation_unit "z_size_t gz_read(gz_statep state,voidp buf,z_size_t len)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  gz_statep state_00;\n  uchar *buf_00;\n  uint uVar5;\n  code *pcVar6;\n  undefined1 *puVar7;\n  z_size_t zVar8;\n  undefined4 in_stack_ffffffcc;\n  uint n;\n  gz_statep local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  puVar7 = &_gp;\n  local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4;\n  zVar8 = 0;\n  buf_00 = (uchar *)buf;\n  uVar5 = len;\n  if (len == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }\n    pcVar6 = *(code **)(puVar7 + -0x7f04);\n    state_00 = local_2c;\n    (*pcVar6)();\n    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }\n    if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }\n    return 0xffffffff;\n  }\n  puVar7 = &_gp;\n  if (state->seek != 0) {\n    uVar5 = *(uint *)&state->skip;\n    state->seek = 0;\n    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));\n    if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  zVar8 = 0;\nLAB_0001f1a8:\n  uVar2 = (state->x).have;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  n = len;\n  if (uVar2 < len) {\n    n = uVar2;\n  }\n  uVar2 = n;\n  buf_00 = (state->x).next;\n  uVar5 = n;\n  (**(code **)(puVar7 + -0x7ef4))(buf);\n  (state->x).next = (state->x).next + uVar2;\n  (state->x).have = (state->x).have - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  buf_00 = (uchar *)buf;\n  iVar4 = gz_load(state,(uchar *)buf,len,&n);\n  uVar2 = n;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    zVar8 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}\n\n" (function_definition "z_size_t gz_read(gz_statep state,voidp buf,z_size_t len)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  gz_statep state_00;\n  uchar *buf_00;\n  uint uVar5;\n  code *pcVar6;\n  undefined1 *puVar7;\n  z_size_t zVar8;\n  undefined4 in_stack_ffffffcc;\n  uint n;\n  gz_statep local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  puVar7 = &_gp;\n  local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4;\n  zVar8 = 0;\n  buf_00 = (uchar *)buf;\n  uVar5 = len;\n  if (len == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }\n    pcVar6 = *(code **)(puVar7 + -0x7f04);\n    state_00 = local_2c;\n    (*pcVar6)();\n    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }\n    if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }\n    return 0xffffffff;\n  }\n  puVar7 = &_gp;\n  if (state->seek != 0) {\n    uVar5 = *(uint *)&state->skip;\n    state->seek = 0;\n    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));\n    if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  zVar8 = 0;\nLAB_0001f1a8:\n  uVar2 = (state->x).have;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  n = len;\n  if (uVar2 < len) {\n    n = uVar2;\n  }\n  uVar2 = n;\n  buf_00 = (state->x).next;\n  uVar5 = n;\n  (**(code **)(puVar7 + -0x7ef4))(buf);\n  (state->x).next = (state->x).next + uVar2;\n  (state->x).have = (state->x).have - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  buf_00 = (uchar *)buf;\n  iVar4 = gz_load(state,(uchar *)buf,len,&n);\n  uVar2 = n;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    zVar8 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" type_identifier (function_declarator "gz_read(gz_statep state,voidp buf,z_size_t len)" identifier (parameter_list "(gz_statep state,voidp buf,z_size_t len)" ( (parameter_declaration "gz_statep state" type_identifier identifier) , (parameter_declaration "voidp buf" type_identifier identifier) , (parameter_declaration "z_size_t len" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  gz_statep state_00;\n  uchar *buf_00;\n  uint uVar5;\n  code *pcVar6;\n  undefined1 *puVar7;\n  z_size_t zVar8;\n  undefined4 in_stack_ffffffcc;\n  uint n;\n  gz_statep local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  puVar7 = &_gp;\n  local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4;\n  zVar8 = 0;\n  buf_00 = (uchar *)buf;\n  uVar5 = len;\n  if (len == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }\n    pcVar6 = *(code **)(puVar7 + -0x7f04);\n    state_00 = local_2c;\n    (*pcVar6)();\n    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }\n    if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }\n    return 0xffffffff;\n  }\n  puVar7 = &_gp;\n  if (state->seek != 0) {\n    uVar5 = *(uint *)&state->skip;\n    state->seek = 0;\n    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));\n    if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  zVar8 = 0;\nLAB_0001f1a8:\n  uVar2 = (state->x).have;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  n = len;\n  if (uVar2 < len) {\n    n = uVar2;\n  }\n  uVar2 = n;\n  buf_00 = (state->x).next;\n  uVar5 = n;\n  (**(code **)(puVar7 + -0x7ef4))(buf);\n  (state->x).next = (state->x).next + uVar2;\n  (state->x).have = (state->x).have - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  buf_00 = (uchar *)buf;\n  iVar4 = gz_load(state,(uchar *)buf,len,&n);\n  uVar2 = n;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    zVar8 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "gz_statep state_00;" type_identifier identifier ;) (declaration "uchar *buf_00;" type_identifier (pointer_declarator "*buf_00" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined1 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "z_size_t zVar8;" type_identifier identifier ;) (declaration "undefined4 in_stack_ffffffcc;" type_identifier identifier ;) (declaration "uint n;" type_identifier identifier ;) (declaration "gz_statep local_2c;" type_identifier identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000360f4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000360f4" identifier = identifier) ;) (expression_statement "puVar7 = &_gp;" (assignment_expression "puVar7 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (expression_statement "local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4;" (assignment_expression "local_2c = *(gz_statep *)PTR___stack_chk_guard_000360f4" identifier = (pointer_expression "*(gz_statep *)PTR___stack_chk_guard_000360f4" * (cast_expression "(gz_statep *)PTR___stack_chk_guard_000360f4" ( (type_descriptor "gz_statep *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "zVar8 = 0;" (assignment_expression "zVar8 = 0" identifier = number_literal) ;) (expression_statement "buf_00 = (uchar *)buf;" (assignment_expression "buf_00 = (uchar *)buf" identifier = (cast_expression "(uchar *)buf" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "uVar5 = len;" (assignment_expression "uVar5 = len" identifier = identifier) ;) (if_statement "if (len == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }\n    pcVar6 = *(code **)(puVar7 + -0x7f04);\n    state_00 = local_2c;\n    (*pcVar6)();\n    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }\n    if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }\n    return 0xffffffff;\n  }" if (parenthesized_expression "(len == 0)" ( (binary_expression "len == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }\n    pcVar6 = *(code **)(puVar7 + -0x7f04);\n    state_00 = local_2c;\n    (*pcVar6)();\n    if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }\n    if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }\n    return 0xffffffff;\n  }" { (labeled_statement "LAB_0001f2bc:\n    if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }" statement_identifier : (if_statement "if (local_2c == *(gz_statep *)puVar1) {\n      return zVar8;\n    }" if (parenthesized_expression "(local_2c == *(gz_statep *)puVar1)" ( (binary_expression "local_2c == *(gz_statep *)puVar1" identifier == (pointer_expression "*(gz_statep *)puVar1" * (cast_expression "(gz_statep *)puVar1" ( (type_descriptor "gz_statep *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n      return zVar8;\n    }" { (return_statement "return zVar8;" return identifier ;) }))) (expression_statement "pcVar6 = *(code **)(puVar7 + -0x7f04);" (assignment_expression "pcVar6 = *(code **)(puVar7 + -0x7f04)" identifier = (pointer_expression "*(code **)(puVar7 + -0x7f04)" * (cast_expression "(code **)(puVar7 + -0x7f04)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x7f04)" ( (binary_expression "puVar7 + -0x7f04" identifier + number_literal) ))))) ;) (expression_statement "state_00 = local_2c;" (assignment_expression "state_00 = local_2c" identifier = identifier) ;) (expression_statement "(*pcVar6)();" (call_expression "(*pcVar6)()" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "()" ( ))) ;) (if_statement "if (((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5))))" ( (binary_expression "((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)) ||\n       ((state_00->err != 0 && (state_00->err != -5)))" (parenthesized_expression "((state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f))" ( (binary_expression "(state_00 == (gz_statep)0x0) || (state_00->mode != 0x1c4f)" (parenthesized_expression "(state_00 == (gz_statep)0x0)" ( (binary_expression "state_00 == (gz_statep)0x0" identifier == (cast_expression "(gz_statep)0x0" ( (type_descriptor "gz_statep" type_identifier) ) number_literal)) )) || (parenthesized_expression "(state_00->mode != 0x1c4f)" ( (binary_expression "state_00->mode != 0x1c4f" (field_expression "state_00->mode" identifier -> field_identifier) != number_literal) ))) )) || (parenthesized_expression "((state_00->err != 0 && (state_00->err != -5)))" ( (parenthesized_expression "(state_00->err != 0 && (state_00->err != -5))" ( (binary_expression "state_00->err != 0 && (state_00->err != -5)" (binary_expression "state_00->err != 0" (field_expression "state_00->err" identifier -> field_identifier) != number_literal) && (parenthesized_expression "(state_00->err != -5)" ( (binary_expression "state_00->err != -5" (field_expression "state_00->err" identifier -> field_identifier) != number_literal) ))) )) ))) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if ((int)uVar5 < 0) {\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }\n    else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));\n    }" { (expression_statement "gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498));" (call_expression "gz_error(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498))" identifier (argument_list "(state_00,-2,(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498))" ( identifier , number_literal , (cast_expression "(char *)(*(int *)(pcVar6 + 0x16cb8) + 0x5498)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(pcVar6 + 0x16cb8) + 0x5498)" ( (binary_expression "*(int *)(pcVar6 + 0x16cb8) + 0x5498" (pointer_expression "*(int *)(pcVar6 + 0x16cb8)" * (cast_expression "(int *)(pcVar6 + 0x16cb8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar6 + 0x16cb8)" ( (binary_expression "pcVar6 + 0x16cb8" identifier + number_literal) )))) + number_literal) ))) ))) ;) }) (else_clause "else {\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }" else (compound_statement "{\n      zVar8 = gz_read(state_00,buf_00,uVar5);\n      if (zVar8 != 0) {\n        return zVar8;\n      }\n      if (state_00->err == 0) {\n        return 0;\n      }\n      if (state_00->err == -5) {\n        return 0;\n      }\n    }" { (expression_statement "zVar8 = gz_read(state_00,buf_00,uVar5);" (assignment_expression "zVar8 = gz_read(state_00,buf_00,uVar5)" identifier = (call_expression "gz_read(state_00,buf_00,uVar5)" identifier (argument_list "(state_00,buf_00,uVar5)" ( identifier , identifier , identifier )))) ;) (if_statement "if (zVar8 != 0) {\n        return zVar8;\n      }" if (parenthesized_expression "(zVar8 != 0)" ( (binary_expression "zVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        return zVar8;\n      }" { (return_statement "return zVar8;" return identifier ;) })) (if_statement "if (state_00->err == 0) {\n        return 0;\n      }" if (parenthesized_expression "(state_00->err == 0)" ( (binary_expression "state_00->err == 0" (field_expression "state_00->err" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (state_00->err == -5) {\n        return 0;\n      }" if (parenthesized_expression "(state_00->err == -5)" ( (binary_expression "state_00->err == -5" (field_expression "state_00->err" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "puVar7 = &_gp;" (assignment_expression "puVar7 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (if_statement "if (state->seek != 0) {\n    uVar5 = *(uint *)&state->skip;\n    state->seek = 0;\n    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));\n    if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" if (parenthesized_expression "(state->seek != 0)" ( (binary_expression "state->seek != 0" (field_expression "state->seek" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    uVar5 = *(uint *)&state->skip;\n    state->seek = 0;\n    iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));\n    if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" { (expression_statement "uVar5 = *(uint *)&state->skip;" (assignment_expression "uVar5 = *(uint *)&state->skip" identifier = (pointer_expression "*(uint *)&state->skip" * (cast_expression "(uint *)&state->skip" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&state->skip" & (field_expression "state->skip" identifier -> field_identifier))))) ;) (expression_statement "state->seek = 0;" (assignment_expression "state->seek = 0" (field_expression "state->seek" identifier -> field_identifier) = number_literal) ;) (expression_statement "iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc));" (assignment_expression "iVar4 = gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc))" identifier = (call_expression "gz_skip(state,CONCAT44(&_gp,in_stack_ffffffcc))" identifier (argument_list "(state,CONCAT44(&_gp,in_stack_ffffffcc))" ( identifier , (call_expression "CONCAT44(&_gp,in_stack_ffffffcc)" identifier (argument_list "(&_gp,in_stack_ffffffcc)" ( (pointer_expression "&_gp" & identifier) , identifier ))) )))) ;) (if_statement "if (iVar4 == -1) {\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n      zVar8 = 0;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "zVar8 = 0;" (assignment_expression "zVar8 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) })) (expression_statement "zVar8 = 0;" (assignment_expression "zVar8 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001f1a8:\n  uVar2 = (state->x).have;" statement_identifier : (expression_statement "uVar2 = (state->x).have;" (assignment_expression "uVar2 = (state->x).have" identifier = (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier)) ;)) (if_statement "if (uVar2 == 0) goto LAB_0001f230;" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f230;" goto statement_identifier ;)) (labeled_statement "LAB_0001f1b4:\n  n = len;" statement_identifier : (expression_statement "n = len;" (assignment_expression "n = len" identifier = identifier) ;)) (if_statement "if (uVar2 < len) {\n    n = uVar2;\n  }" if (parenthesized_expression "(uVar2 < len)" ( (binary_expression "uVar2 < len" identifier < identifier) )) (compound_statement "{\n    n = uVar2;\n  }" { (expression_statement "n = uVar2;" (assignment_expression "n = uVar2" identifier = identifier) ;) })) (expression_statement "uVar2 = n;" (assignment_expression "uVar2 = n" identifier = identifier) ;) (expression_statement "buf_00 = (state->x).next;" (assignment_expression "buf_00 = (state->x).next" identifier = (field_expression "(state->x).next" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar5 = n;" (assignment_expression "uVar5 = n" identifier = identifier) ;) (expression_statement "(**(code **)(puVar7 + -0x7ef4))(buf);" (call_expression "(**(code **)(puVar7 + -0x7ef4))(buf)" (parenthesized_expression "(**(code **)(puVar7 + -0x7ef4))" ( (pointer_expression "**(code **)(puVar7 + -0x7ef4)" * (pointer_expression "*(code **)(puVar7 + -0x7ef4)" * (cast_expression "(code **)(puVar7 + -0x7ef4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + -0x7ef4)" ( (binary_expression "puVar7 + -0x7ef4" identifier + number_literal) ))))) )) (argument_list "(buf)" ( identifier ))) ;) (expression_statement "(state->x).next = (state->x).next + uVar2;" (assignment_expression "(state->x).next = (state->x).next + uVar2" (field_expression "(state->x).next" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier) = (binary_expression "(state->x).next + uVar2" (field_expression "(state->x).next" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier) + identifier)) ;) (expression_statement "(state->x).have = (state->x).have - uVar2;" (assignment_expression "(state->x).have = (state->x).have - uVar2" (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier) = (binary_expression "(state->x).have - uVar2" (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier) - identifier)) ;) (labeled_statement "LAB_0001f1f8:\n  while( true ) {\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }" statement_identifier : (while_statement "while( true ) {\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar3 = (uint)(state->x).pos;\n    len = len - uVar2;\n    iVar4 = *(int *)&(state->x).pos;\n    buf = (voidp)((int)buf + uVar2);\n    zVar8 = zVar8 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    *(uint *)((int)&(state->x).pos + 4) = uVar2;\n    *(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;\n    if (len == 0) goto LAB_0001f2bc;\n    uVar2 = (state->x).have;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    n = len;\n    if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = len;\n    if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (state->how == 1) goto LAB_0001f328;\n    (state->strm).avail_out = len;\n    (state->strm).next_out = (Bytef *)buf;\n    iVar4 = gz_decomp(state);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    n = (state->x).have;\n    (state->x).have = 0;\n    uVar2 = n;\n  }" { (expression_statement "uVar3 = (uint)(state->x).pos;" (assignment_expression "uVar3 = (uint)(state->x).pos" identifier = (field_expression "(uint)(state->x).pos" (call_expression "(uint)(state->x)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "len = len - uVar2;" (assignment_expression "len = len - uVar2" identifier = (binary_expression "len - uVar2" identifier - identifier)) ;) (expression_statement "iVar4 = *(int *)&(state->x).pos;" (assignment_expression "iVar4 = *(int *)&(state->x).pos" identifier = (pointer_expression "*(int *)&(state->x).pos" * (cast_expression "(int *)&(state->x).pos" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(state->x).pos" & (field_expression "(state->x).pos" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier))))) ;) (expression_statement "buf = (voidp)((int)buf + uVar2);" (assignment_expression "buf = (voidp)((int)buf + uVar2)" identifier = (call_expression "(voidp)((int)buf + uVar2)" (parenthesized_expression "(voidp)" ( identifier )) (argument_list "((int)buf + uVar2)" ( (binary_expression "(int)buf + uVar2" (cast_expression "(int)buf" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "zVar8 = zVar8 + uVar2;" (assignment_expression "zVar8 = zVar8 + uVar2" identifier = (binary_expression "zVar8 + uVar2" identifier + identifier)) ;) (expression_statement "uVar2 = uVar3 + uVar2;" (assignment_expression "uVar2 = uVar3 + uVar2" identifier = (binary_expression "uVar3 + uVar2" identifier + identifier)) ;) (expression_statement "*(uint *)((int)&(state->x).pos + 4) = uVar2;" (assignment_expression "*(uint *)((int)&(state->x).pos + 4) = uVar2" (pointer_expression "*(uint *)((int)&(state->x).pos + 4)" * (cast_expression "(uint *)((int)&(state->x).pos + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(state->x).pos + 4)" ( (binary_expression "(int)&(state->x).pos + 4" (cast_expression "(int)&(state->x).pos" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(state->x).pos" & (field_expression "(state->x).pos" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4;" (assignment_expression "*(uint *)&(state->x).pos = (uint)(uVar2 < uVar3) + iVar4" (pointer_expression "*(uint *)&(state->x).pos" * (cast_expression "(uint *)&(state->x).pos" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(state->x).pos" & (field_expression "(state->x).pos" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier)))) = (binary_expression "(uint)(uVar2 < uVar3) + iVar4" (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) + identifier)) ;) (if_statement "if (len == 0) goto LAB_0001f2bc;" if (parenthesized_expression "(len == 0)" ( (binary_expression "len == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;)) (expression_statement "uVar2 = (state->x).have;" (assignment_expression "uVar2 = (state->x).have" identifier = (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (uVar2 != 0) break;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0001f230:\n    n = len;" statement_identifier : (expression_statement "n = len;" (assignment_expression "n = len" identifier = identifier) ;)) (if_statement "if ((state->eof != 0) && ((state->strm).avail_in == 0)) {\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "((state->eof != 0) && ((state->strm).avail_in == 0))" ( (binary_expression "(state->eof != 0) && ((state->strm).avail_in == 0)" (parenthesized_expression "(state->eof != 0)" ( (binary_expression "state->eof != 0" (field_expression "state->eof" identifier -> field_identifier) != number_literal) )) && (parenthesized_expression "((state->strm).avail_in == 0)" ( (binary_expression "(state->strm).avail_in == 0" (field_expression "(state->strm).avail_in" (parenthesized_expression "(state->strm)" ( (field_expression "state->strm" identifier -> field_identifier) )) . field_identifier) == number_literal) ))) )) (compound_statement "{\n      state->past = 1;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "state->past = 1;" (assignment_expression "state->past = 1" (field_expression "state->past" identifier -> field_identifier) = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (expression_statement "uVar5 = len;" (assignment_expression "uVar5 = len" identifier = identifier) ;) (if_statement "if ((state->how == 0) || (len < state->size << 1)) {\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" if (parenthesized_expression "((state->how == 0) || (len < state->size << 1))" ( (binary_expression "(state->how == 0) || (len < state->size << 1)" (parenthesized_expression "(state->how == 0)" ( (binary_expression "state->how == 0" (field_expression "state->how" identifier -> field_identifier) == number_literal) )) || (parenthesized_expression "(len < state->size << 1)" ( (binary_expression "len < state->size << 1" identifier < (binary_expression "state->size << 1" (field_expression "state->size" identifier -> field_identifier) << number_literal)) ))) )) (compound_statement "{\n      iVar4 = gz_fetch(state);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" { (expression_statement "iVar4 = gz_fetch(state);" (assignment_expression "iVar4 = gz_fetch(state)" identifier = (call_expression "gz_fetch(state)" identifier (argument_list "(state)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (goto_statement "goto LAB_0001f1a8;" goto statement_identifier ;) })) (if_statement "if (state->how == 1) goto LAB_0001f328;" if (parenthesized_expression "(state->how == 1)" ( (binary_expression "state->how == 1" (field_expression "state->how" identifier -> field_identifier) == number_literal) )) (goto_statement "goto LAB_0001f328;" goto statement_identifier ;)) (expression_statement "(state->strm).avail_out = len;" (assignment_expression "(state->strm).avail_out = len" (field_expression "(state->strm).avail_out" (parenthesized_expression "(state->strm)" ( (field_expression "state->strm" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "(state->strm).next_out = (Bytef *)buf;" (assignment_expression "(state->strm).next_out = (Bytef *)buf" (field_expression "(state->strm).next_out" (parenthesized_expression "(state->strm)" ( (field_expression "state->strm" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(Bytef *)buf" ( (type_descriptor "Bytef *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "iVar4 = gz_decomp(state);" (assignment_expression "iVar4 = gz_decomp(state)" identifier = (call_expression "gz_decomp(state)" identifier (argument_list "(state)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (expression_statement "n = (state->x).have;" (assignment_expression "n = (state->x).have" identifier = (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "(state->x).have = 0;" (assignment_expression "(state->x).have = 0" (field_expression "(state->x).have" (parenthesized_expression "(state->x)" ( (field_expression "state->x" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "uVar2 = n;" (assignment_expression "uVar2 = n" identifier = identifier) ;) }))) (goto_statement "goto LAB_0001f1b4;" goto statement_identifier ;) (labeled_statement "LAB_0001f328:\n  buf_00 = (uchar *)buf;" statement_identifier : (expression_statement "buf_00 = (uchar *)buf;" (assignment_expression "buf_00 = (uchar *)buf" identifier = (cast_expression "(uchar *)buf" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;)) (expression_statement "iVar4 = gz_load(state,(uchar *)buf,len,&n);" (assignment_expression "iVar4 = gz_load(state,(uchar *)buf,len,&n)" identifier = (call_expression "gz_load(state,(uchar *)buf,len,&n)" identifier (argument_list "(state,(uchar *)buf,len,&n)" ( identifier , (cast_expression "(uchar *)buf" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , (pointer_expression "&n" & identifier) )))) ;) (expression_statement "uVar2 = n;" (assignment_expression "uVar2 = n" identifier = identifier) ;) (if_statement "if (iVar4 == -1) {\nLAB_0001f2b8:\n    zVar8 = 0;\n    goto LAB_0001f2bc;\n  }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2b8:\n    zVar8 = 0;\n    goto LAB_0001f2bc;\n  }" { (labeled_statement "LAB_0001f2b8:\n    zVar8 = 0;" statement_identifier : (expression_statement "zVar8 = 0;" (assignment_expression "zVar8 = 0" identifier = number_literal) ;)) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (goto_statement "goto LAB_0001f1f8;" goto statement_identifier ;) })))
(translation_unit "int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}\n\n" (function_definition "int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" primitive_type (function_declarator "FUN_0001f12c(uint *param_1,uint param_2,uint param_3)" identifier (parameter_list "(uint *param_1,uint param_2,uint param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_000360f4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000360f4" identifier = identifier) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000360f4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000360f4" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000360f4" * (cast_expression "(int *)PTR___stack_chk_guard_000360f4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" identifier = identifier) ;) (if_statement "if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" { (labeled_statement "LAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" statement_identifier : (if_statement "if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" if (parenthesized_expression "(local_2c == *(int *)puVar1)" ( (binary_expression "local_2c == *(int *)puVar1" identifier == (pointer_expression "*(int *)puVar1" * (cast_expression "(int *)puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n      return iVar6;\n    }" { (return_statement "return iVar6;" return identifier ;) }))) (expression_statement "iVar6 = local_2c;" (assignment_expression "iVar6 = local_2c" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000360ec)();" (call_expression "(*(code *)PTR___stack_chk_fail_000360ec)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000360ec)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000360ec" * (cast_expression "(code *)PTR___stack_chk_fail_000360ec" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }" if (parenthesized_expression "(((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))))" ( (binary_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" (parenthesized_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f))" ( (binary_expression "(iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)" (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) || (parenthesized_expression "(*(int *)(iVar6 + 0x10) != 0x1c4f)" ( (binary_expression "*(int *)(iVar6 + 0x10) != 0x1c4f" (pointer_expression "*(int *)(iVar6 + 0x10)" * (cast_expression "(int *)(iVar6 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x10)" ( (binary_expression "iVar6 + 0x10" identifier + number_literal) )))) != number_literal) ))) )) || (parenthesized_expression "((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" ( (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))" ( (binary_expression "*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)" (binary_expression "*(int *)(iVar6 + 0x5c) != 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != -5)" ( (binary_expression "*(int *)(iVar6 + 0x5c) != -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) != number_literal) ))) )) ))) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (if_statement "if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" if (parenthesized_expression "((int)uVar5 < 0)" ( (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      FUN_0001e5ec();\n    }" { (expression_statement "FUN_0001e5ec();" (call_expression "FUN_0001e5ec()" identifier (argument_list "()" ( ))) ;) }) (else_clause "else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" else (compound_statement "{\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" { (expression_statement "iVar4 = FUN_0001f12c();" (assignment_expression "iVar4 = FUN_0001f12c()" identifier = (call_expression "FUN_0001f12c()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar4 != 0) {\n        return iVar4;\n      }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n        return iVar4;\n      }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == 0)" ( (binary_expression "*(int *)(iVar6 + 0x5c) == 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }" if (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == -5)" ( (binary_expression "*(int *)(iVar6 + 0x5c) == -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" * (cast_expression "(int *)(iVar6 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x5c)" ( (binary_expression "iVar6 + 0x5c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) }))) (return_statement "return -1;" return number_literal ;) })) (if_statement "if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" if (parenthesized_expression "(param_1[0x16] != 0)" ( (binary_expression "param_1[0x16] != 0" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" { (expression_statement "uVar5 = param_1[0x14];" (assignment_expression "uVar5 = param_1[0x14]" identifier = (subscript_expression "param_1[0x14]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x16] = 0;" (assignment_expression "param_1[0x16] = 0" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = FUN_0001eff4();" (assignment_expression "iVar6 = FUN_0001eff4()" identifier = (call_expression "FUN_0001eff4()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0001f1a8:\n  uVar2 = *param_1;" statement_identifier : (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (if_statement "if (uVar2 == 0) goto LAB_0001f230;" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f230;" goto statement_identifier ;)) (labeled_statement "LAB_0001f1b4:\n  local_30 = param_3;" statement_identifier : (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;)) (if_statement "if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }" if (parenthesized_expression "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )) (compound_statement "{\n    local_30 = uVar2;\n  }" { (expression_statement "local_30 = uVar2;" (assignment_expression "local_30 = uVar2" identifier = identifier) ;) })) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) (expression_statement "uVar5 = local_30;" (assignment_expression "uVar5 = local_30" identifier = identifier) ;) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1])" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" ( (pointer_expression "*(code *)PTR_memcpy_000360fc" * (cast_expression "(code *)PTR_memcpy_000360fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2,param_1[1])" ( identifier , (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = param_1[1] + uVar2;" (assignment_expression "param_1[1] = param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier)) ;) (expression_statement "*param_1 = *param_1 - uVar2;" (assignment_expression "*param_1 = *param_1 - uVar2" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 - uVar2" (pointer_expression "*param_1" * identifier) - identifier)) ;) (labeled_statement "LAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" statement_identifier : (while_statement "while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" { (expression_statement "uVar3 = param_1[3];" (assignment_expression "uVar3 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "param_3 = param_3 - uVar2;" (assignment_expression "param_3 = param_3 - uVar2" identifier = (binary_expression "param_3 - uVar2" identifier - identifier)) ;) (expression_statement "param_2 = param_2 + uVar2;" (assignment_expression "param_2 = param_2 + uVar2" identifier = (binary_expression "param_2 + uVar2" identifier + identifier)) ;) (expression_statement "iVar6 = iVar6 + uVar2;" (assignment_expression "iVar6 = iVar6 + uVar2" identifier = (binary_expression "iVar6 + uVar2" identifier + identifier)) ;) (expression_statement "uVar2 = uVar3 + uVar2;" (assignment_expression "uVar2 = uVar3 + uVar2" identifier = (binary_expression "uVar3 + uVar2" identifier + identifier)) ;) (expression_statement "param_1[3] = uVar2;" (assignment_expression "param_1[3] = uVar2" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];" (assignment_expression "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "(uint)(uVar2 < uVar3) + param_1[2]" (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) + (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (param_3 == 0) goto LAB_0001f2bc;" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;)) (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (uVar2 != 0) break;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (labeled_statement "LAB_0001f230:\n    local_30 = param_3;" statement_identifier : (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;)) (if_statement "if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" if (parenthesized_expression "((param_1[0x10] != 0) && (param_1[0x1a] == 0))" ( (binary_expression "(param_1[0x10] != 0) && (param_1[0x1a] == 0)" (parenthesized_expression "(param_1[0x10] != 0)" ( (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "(param_1[0x1a] == 0)" ( (binary_expression "param_1[0x1a] == 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" { (expression_statement "param_1[0x11] = 1;" (assignment_expression "param_1[0x11] = 1" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) = number_literal) ;) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" identifier = identifier) ;) (if_statement "if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" if (parenthesized_expression "((param_1[0xc] == 0) || (param_3 < param_1[7] << 1))" ( (binary_expression "(param_1[0xc] == 0) || (param_3 < param_1[7] << 1)" (parenthesized_expression "(param_1[0xc] == 0)" ( (binary_expression "param_1[0xc] == 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(param_3 < param_1[7] << 1)" ( (binary_expression "param_3 < param_1[7] << 1" identifier < (binary_expression "param_1[7] << 1" (subscript_expression "param_1[7]" identifier [ number_literal ]) << number_literal)) ))) )) (compound_statement "{\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" { (expression_statement "iVar4 = FUN_0001eeac(param_1);" (assignment_expression "iVar4 = FUN_0001eeac(param_1)" identifier = (call_expression "FUN_0001eeac(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (goto_statement "goto LAB_0001f1a8;" goto statement_identifier ;) })) (if_statement "if (param_1[0xc] == 1) goto LAB_0001f328;" if (parenthesized_expression "(param_1[0xc] == 1)" ( (binary_expression "param_1[0xc] == 1" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) == number_literal) )) (goto_statement "goto LAB_0001f328;" goto statement_identifier ;)) (expression_statement "param_1[0x1d] = param_3;" (assignment_expression "param_1[0x1d] = param_3" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1c] = param_2;" (assignment_expression "param_1[0x1c] = param_2" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar4 = FUN_0001ec10(param_1);" (assignment_expression "iVar4 = FUN_0001ec10(param_1)" identifier = (call_expression "FUN_0001ec10(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0001f2b8;" goto statement_identifier ;)) (expression_statement "local_30 = *param_1;" (assignment_expression "local_30 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) }))) (goto_statement "goto LAB_0001f1b4;" goto statement_identifier ;) (labeled_statement "LAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" statement_identifier : (expression_statement "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" (assignment_expression "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30)" identifier = (call_expression "FUN_0001e780(param_1,param_2,param_3,&local_30)" identifier (argument_list "(param_1,param_2,param_3,&local_30)" ( identifier , identifier , identifier , (pointer_expression "&local_30" & identifier) )))) ;)) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" identifier = identifier) ;) (if_statement "if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" { (labeled_statement "LAB_0001f2b8:\n    iVar6 = 0;" statement_identifier : (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;)) (goto_statement "goto LAB_0001f2bc;" goto statement_identifier ;) })) (goto_statement "goto LAB_0001f1f8;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 IDENT ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (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 (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) ))) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return LIT ;) })) }))) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) - IDENT)) ;) (labeled_statement statement_identifier : (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))) + (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT < (binary_expression (subscript_expression IDENT [ LIT ]) << LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (pointer_expression & IDENT) )))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })))
(function_definition "int FUN_0001f12c(uint *param_1,uint param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" (primitive_type "int") (function_declarator "FUN_0001f12c(uint *param_1,uint param_2,uint param_3)" (identifier "FUN_0001f12c") (parameter_list "(uint *param_1,uint param_2,uint param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  uint uVar3;\n  int iVar4;\n  uint uVar5;\n  int iVar6;\n  uint local_30;\n  int local_2c;\n  \n  puVar1 = PTR___stack_chk_guard_000360f4;\n  local_2c = *(int *)PTR___stack_chk_guard_000360f4;\n  iVar6 = 0;\n  uVar5 = param_3;\n  if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }\n  if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }\n  iVar6 = 0;\nLAB_0001f1a8:\n  uVar2 = *param_1;\n  if (uVar2 == 0) goto LAB_0001f230;\nLAB_0001f1b4:\n  local_30 = param_3;\n  if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }\n  uVar2 = local_30;\n  uVar5 = local_30;\n  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);\n  param_1[1] = param_1[1] + uVar2;\n  *param_1 = *param_1 - uVar2;\nLAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }\n  goto LAB_0001f1b4;\nLAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);\n  uVar2 = local_30;\n  if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }\n  goto LAB_0001f1f8;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint local_30;" (type_identifier "uint") (identifier "local_30") (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "puVar1 = PTR___stack_chk_guard_000360f4;" (assignment_expression "puVar1 = PTR___stack_chk_guard_000360f4" (identifier "puVar1") (= "=") (identifier "PTR___stack_chk_guard_000360f4")) (; ";")) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_000360f4;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_000360f4" (identifier "local_2c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_000360f4" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_000360f4" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_000360f4")))) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" (identifier "uVar5") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (param_3 == 0) {\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }\n    iVar6 = local_2c;\n    (*(code *)PTR___stack_chk_fail_000360ec)();\n    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }\n    if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }\n    return -1;\n  }" ({ "{") (labeled_statement "LAB_0001f2bc:\n    if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" (statement_identifier "LAB_0001f2bc") (: ":") (if_statement "if (local_2c == *(int *)puVar1) {\n      return iVar6;\n    }" (if "if") (parenthesized_expression "(local_2c == *(int *)puVar1)" (( "(") (binary_expression "local_2c == *(int *)puVar1" (identifier "local_2c") (== "==") (pointer_expression "*(int *)puVar1" (* "*") (cast_expression "(int *)puVar1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1")))) () ")")) (compound_statement "{\n      return iVar6;\n    }" ({ "{") (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}")))) (expression_statement "iVar6 = local_2c;" (assignment_expression "iVar6 = local_2c" (identifier "iVar6") (= "=") (identifier "local_2c")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000360ec)();" (call_expression "(*(code *)PTR___stack_chk_fail_000360ec)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000360ec)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000360ec" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000360ec" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000360ec"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {\n      return -1;\n    }" (if "if") (parenthesized_expression "(((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))))" (( "(") (binary_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||\n       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" (parenthesized_expression "((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f))" (( "(") (binary_expression "(iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)" (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*(int *)(iVar6 + 0x10) != 0x1c4f)" (( "(") (binary_expression "*(int *)(iVar6 + 0x10) != 0x1c4f" (pointer_expression "*(int *)(iVar6 + 0x10)" (* "*") (cast_expression "(int *)(iVar6 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x10)" (( "(") (binary_expression "iVar6 + 0x10" (identifier "iVar6") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0x1c4f")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))" (( "(") (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5))" (( "(") (binary_expression "*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)" (binary_expression "*(int *)(iVar6 + 0x5c) != 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" (* "*") (cast_expression "(int *)(iVar6 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x5c)" (( "(") (binary_expression "iVar6 + 0x5c" (identifier "iVar6") (+ "+") (number_literal "0x5c")) () ")")))) (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "(*(int *)(iVar6 + 0x5c) != -5)" (( "(") (binary_expression "*(int *)(iVar6 + 0x5c) != -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" (* "*") (cast_expression "(int *)(iVar6 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x5c)" (( "(") (binary_expression "iVar6 + 0x5c" (identifier "iVar6") (+ "+") (number_literal "0x5c")) () ")")))) (!= "!=") (number_literal "-5")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      return -1;\n    }" ({ "{") (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}"))) (if_statement "if ((int)uVar5 < 0) {\n      FUN_0001e5ec();\n    }\n    else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" (if "if") (parenthesized_expression "((int)uVar5 < 0)" (( "(") (binary_expression "(int)uVar5 < 0" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0001e5ec();\n    }" ({ "{") (expression_statement "FUN_0001e5ec();" (call_expression "FUN_0001e5ec()" (identifier "FUN_0001e5ec") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")) (else_clause "else {\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" (else "else") (compound_statement "{\n      iVar4 = FUN_0001f12c();\n      if (iVar4 != 0) {\n        return iVar4;\n      }\n      if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }\n      if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }\n    }" ({ "{") (expression_statement "iVar4 = FUN_0001f12c();" (assignment_expression "iVar4 = FUN_0001f12c()" (identifier "iVar4") (= "=") (call_expression "FUN_0001f12c()" (identifier "FUN_0001f12c") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar4 != 0) {\n        return iVar4;\n      }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return iVar4;\n      }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar6 + 0x5c) == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == 0)" (( "(") (binary_expression "*(int *)(iVar6 + 0x5c) == 0" (pointer_expression "*(int *)(iVar6 + 0x5c)" (* "*") (cast_expression "(int *)(iVar6 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x5c)" (( "(") (binary_expression "iVar6 + 0x5c" (identifier "iVar6") (+ "+") (number_literal "0x5c")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar6 + 0x5c) == -5) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(iVar6 + 0x5c) == -5)" (( "(") (binary_expression "*(int *)(iVar6 + 0x5c) == -5" (pointer_expression "*(int *)(iVar6 + 0x5c)" (* "*") (cast_expression "(int *)(iVar6 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x5c)" (( "(") (binary_expression "iVar6 + 0x5c" (identifier "iVar6") (+ "+") (number_literal "0x5c")) () ")")))) (== "==") (number_literal "-5")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")))) (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}"))) (if_statement "if (param_1[0x16] != 0) {\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" (if "if") (parenthesized_expression "(param_1[0x16] != 0)" (( "(") (binary_expression "param_1[0x16] != 0" (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar5 = param_1[0x14];\n    param_1[0x16] = 0;\n    iVar6 = FUN_0001eff4();\n    if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }\n  }" ({ "{") (expression_statement "uVar5 = param_1[0x14];" (assignment_expression "uVar5 = param_1[0x14]" (identifier "uVar5") (= "=") (subscript_expression "param_1[0x14]" (identifier "param_1") ([ "[") (number_literal "0x14") (] "]"))) (; ";")) (expression_statement "param_1[0x16] = 0;" (assignment_expression "param_1[0x16] = 0" (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = FUN_0001eff4();" (assignment_expression "iVar6 = FUN_0001eff4()" (identifier "iVar6") (= "=") (call_expression "FUN_0001eff4()" (identifier "FUN_0001eff4") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar6 == -1) {\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" (if "if") (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      iVar6 = 0;\n      goto LAB_0001f2bc;\n    }" ({ "{") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0001f2bc;" (goto "goto") (statement_identifier "LAB_0001f2bc") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0001f1a8:\n  uVar2 = *param_1;" (statement_identifier "LAB_0001f1a8") (: ":") (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" (identifier "uVar2") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (if_statement "if (uVar2 == 0) goto LAB_0001f230;" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001f230;" (goto "goto") (statement_identifier "LAB_0001f230") (; ";"))) (labeled_statement "LAB_0001f1b4:\n  local_30 = param_3;" (statement_identifier "LAB_0001f1b4") (: ":") (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" (identifier "local_30") (= "=") (identifier "param_3")) (; ";"))) (if_statement "if (uVar2 < param_3) {\n    local_30 = uVar2;\n  }" (if "if") (parenthesized_expression "(uVar2 < param_3)" (( "(") (binary_expression "uVar2 < param_3" (identifier "uVar2") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n    local_30 = uVar2;\n  }" ({ "{") (expression_statement "local_30 = uVar2;" (assignment_expression "local_30 = uVar2" (identifier "local_30") (= "=") (identifier "uVar2")) (; ";")) (} "}"))) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" (identifier "uVar2") (= "=") (identifier "local_30")) (; ";")) (expression_statement "uVar5 = local_30;" (assignment_expression "uVar5 = local_30" (identifier "uVar5") (= "=") (identifier "local_30")) (; ";")) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_2,param_1[1])" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" (( "(") (pointer_expression "*(code *)PTR_memcpy_000360fc" (* "*") (cast_expression "(code *)PTR_memcpy_000360fc" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_000360fc"))) () ")")) (argument_list "(param_2,param_1[1])" (( "(") (identifier "param_2") (, ",") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[1] = param_1[1] + uVar2;" (assignment_expression "param_1[1] = param_1[1] + uVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_1[1] + uVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (identifier "uVar2"))) (; ";")) (expression_statement "*param_1 = *param_1 - uVar2;" (assignment_expression "*param_1 = *param_1 - uVar2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "*param_1 - uVar2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (- "-") (identifier "uVar2"))) (; ";")) (labeled_statement "LAB_0001f1f8:\n  while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" (statement_identifier "LAB_0001f1f8") (: ":") (while_statement "while( true ) {\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    uVar3 = param_1[3];\n    param_3 = param_3 - uVar2;\n    param_2 = param_2 + uVar2;\n    iVar6 = iVar6 + uVar2;\n    uVar2 = uVar3 + uVar2;\n    param_1[3] = uVar2;\n    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];\n    if (param_3 == 0) goto LAB_0001f2bc;\n    uVar2 = *param_1;\n    if (uVar2 != 0) break;\nLAB_0001f230:\n    local_30 = param_3;\n    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }\n    uVar5 = param_3;\n    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }\n    if (param_1[0xc] == 1) goto LAB_0001f328;\n    param_1[0x1d] = param_3;\n    param_1[0x1c] = param_2;\n    iVar4 = FUN_0001ec10(param_1);\n    if (iVar4 == -1) goto LAB_0001f2b8;\n    local_30 = *param_1;\n    *param_1 = 0;\n    uVar2 = local_30;\n  }" ({ "{") (expression_statement "uVar3 = param_1[3];" (assignment_expression "uVar3 = param_1[3]" (identifier "uVar3") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "param_3 = param_3 - uVar2;" (assignment_expression "param_3 = param_3 - uVar2" (identifier "param_3") (= "=") (binary_expression "param_3 - uVar2" (identifier "param_3") (- "-") (identifier "uVar2"))) (; ";")) (expression_statement "param_2 = param_2 + uVar2;" (assignment_expression "param_2 = param_2 + uVar2" (identifier "param_2") (= "=") (binary_expression "param_2 + uVar2" (identifier "param_2") (+ "+") (identifier "uVar2"))) (; ";")) (expression_statement "iVar6 = iVar6 + uVar2;" (assignment_expression "iVar6 = iVar6 + uVar2" (identifier "iVar6") (= "=") (binary_expression "iVar6 + uVar2" (identifier "iVar6") (+ "+") (identifier "uVar2"))) (; ";")) (expression_statement "uVar2 = uVar3 + uVar2;" (assignment_expression "uVar2 = uVar3 + uVar2" (identifier "uVar2") (= "=") (binary_expression "uVar3 + uVar2" (identifier "uVar3") (+ "+") (identifier "uVar2"))) (; ";")) (expression_statement "param_1[3] = uVar2;" (assignment_expression "param_1[3] = uVar2" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];" (assignment_expression "param_1[2] = (uint)(uVar2 < uVar3) + param_1[2]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "(uint)(uVar2 < uVar3) + param_1[2]" (call_expression "(uint)(uVar2 < uVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")"))) (+ "+") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (param_3 == 0) goto LAB_0001f2bc;" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001f2bc;" (goto "goto") (statement_identifier "LAB_0001f2bc") (; ";"))) (expression_statement "uVar2 = *param_1;" (assignment_expression "uVar2 = *param_1" (identifier "uVar2") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (uVar2 != 0) break;" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_0001f230:\n    local_30 = param_3;" (statement_identifier "LAB_0001f230") (: ":") (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" (identifier "local_30") (= "=") (identifier "param_3")) (; ";"))) (if_statement "if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" (if "if") (parenthesized_expression "((param_1[0x10] != 0) && (param_1[0x1a] == 0))" (( "(") (binary_expression "(param_1[0x10] != 0) && (param_1[0x1a] == 0)" (parenthesized_expression "(param_1[0x10] != 0)" (( "(") (binary_expression "param_1[0x10] != 0" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_1[0x1a] == 0)" (( "(") (binary_expression "param_1[0x1a] == 0" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      param_1[0x11] = 1;\n      goto LAB_0001f2bc;\n    }" ({ "{") (expression_statement "param_1[0x11] = 1;" (assignment_expression "param_1[0x11] = 1" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_0001f2bc;" (goto "goto") (statement_identifier "LAB_0001f2bc") (; ";")) (} "}"))) (expression_statement "uVar5 = param_3;" (assignment_expression "uVar5 = param_3" (identifier "uVar5") (= "=") (identifier "param_3")) (; ";")) (if_statement "if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" (if "if") (parenthesized_expression "((param_1[0xc] == 0) || (param_3 < param_1[7] << 1))" (( "(") (binary_expression "(param_1[0xc] == 0) || (param_3 < param_1[7] << 1)" (parenthesized_expression "(param_1[0xc] == 0)" (( "(") (binary_expression "param_1[0xc] == 0" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_3 < param_1[7] << 1)" (( "(") (binary_expression "param_3 < param_1[7] << 1" (identifier "param_3") (< "<") (binary_expression "param_1[7] << 1" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (<< "<<") (number_literal "1"))) () ")"))) () ")")) (compound_statement "{\n      iVar4 = FUN_0001eeac(param_1);\n      if (iVar4 == -1) goto LAB_0001f2b8;\n      goto LAB_0001f1a8;\n    }" ({ "{") (expression_statement "iVar4 = FUN_0001eeac(param_1);" (assignment_expression "iVar4 = FUN_0001eeac(param_1)" (identifier "iVar4") (= "=") (call_expression "FUN_0001eeac(param_1)" (identifier "FUN_0001eeac") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_0001f2b8;" (goto "goto") (statement_identifier "LAB_0001f2b8") (; ";"))) (goto_statement "goto LAB_0001f1a8;" (goto "goto") (statement_identifier "LAB_0001f1a8") (; ";")) (} "}"))) (if_statement "if (param_1[0xc] == 1) goto LAB_0001f328;" (if "if") (parenthesized_expression "(param_1[0xc] == 1)" (( "(") (binary_expression "param_1[0xc] == 1" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (== "==") (number_literal "1")) () ")")) (goto_statement "goto LAB_0001f328;" (goto "goto") (statement_identifier "LAB_0001f328") (; ";"))) (expression_statement "param_1[0x1d] = param_3;" (assignment_expression "param_1[0x1d] = param_3" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "param_1[0x1c] = param_2;" (assignment_expression "param_1[0x1c] = param_2" (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "iVar4 = FUN_0001ec10(param_1);" (assignment_expression "iVar4 = FUN_0001ec10(param_1)" (identifier "iVar4") (= "=") (call_expression "FUN_0001ec10(param_1)" (identifier "FUN_0001ec10") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar4 == -1) goto LAB_0001f2b8;" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_0001f2b8;" (goto "goto") (statement_identifier "LAB_0001f2b8") (; ";"))) (expression_statement "local_30 = *param_1;" (assignment_expression "local_30 = *param_1" (identifier "local_30") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" (identifier "uVar2") (= "=") (identifier "local_30")) (; ";")) (} "}")))) (goto_statement "goto LAB_0001f1b4;" (goto "goto") (statement_identifier "LAB_0001f1b4") (; ";")) (labeled_statement "LAB_0001f328:\n  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" (statement_identifier "LAB_0001f328") (: ":") (expression_statement "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);" (assignment_expression "iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30)" (identifier "iVar4") (= "=") (call_expression "FUN_0001e780(param_1,param_2,param_3,&local_30)" (identifier "FUN_0001e780") (argument_list "(param_1,param_2,param_3,&local_30)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (pointer_expression "&local_30" (& "&") (identifier "local_30")) () ")")))) (; ";"))) (expression_statement "uVar2 = local_30;" (assignment_expression "uVar2 = local_30" (identifier "uVar2") (= "=") (identifier "local_30")) (; ";")) (if_statement "if (iVar4 == -1) {\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\nLAB_0001f2b8:\n    iVar6 = 0;\n    goto LAB_0001f2bc;\n  }" ({ "{") (labeled_statement "LAB_0001f2b8:\n    iVar6 = 0;" (statement_identifier "LAB_0001f2b8") (: ":") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";"))) (goto_statement "goto LAB_0001f2bc;" (goto "goto") (statement_identifier "LAB_0001f2bc") (; ";")) (} "}"))) (goto_statement "goto LAB_0001f1f8;" (goto "goto") (statement_identifier "LAB_0001f1f8") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (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: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (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: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (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 (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal))))))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (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: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (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 (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 (identifier) (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (labeled_statement label: (statement_identifier) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)))) right: (subscript_expression argument: (identifier) index: (number_literal))))) (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: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (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: (number_literal)))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)))))

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

{
  undefined *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  uint local_30;
  int local_2c;
  
  puVar1 = PTR___stack_chk_guard_000360f4;
  local_2c = *(int *)PTR___stack_chk_guard_000360f4;
  iVar6 = 0;
  uVar5 = param_3;
  if (param_3 == 0) {
LAB_0001f2bc:
    if (local_2c == *(int *)puVar1) {
      return iVar6;
    }
    iVar6 = local_2c;
    (*(code *)PTR___stack_chk_fail_000360ec)();
    if (((iVar6 == 0) || (*(int *)(iVar6 + 0x10) != 0x1c4f)) ||
       ((*(int *)(iVar6 + 0x5c) != 0 && (*(int *)(iVar6 + 0x5c) != -5)))) {
      return -1;
    }
    if ((int)uVar5 < 0) {
      FUN_0001e5ec();
    }
    else {
      iVar4 = MASKED();
      if (iVar4 != 0) {
        return iVar4;
      }
      if (*(int *)(iVar6 + 0x5c) == 0) {
        return 0;
      }
      if (*(int *)(iVar6 + 0x5c) == -5) {
        return 0;
      }
    }
    return -1;
  }
  if (param_1[0x16] != 0) {
    uVar5 = param_1[0x14];
    param_1[0x16] = 0;
    iVar6 = FUN_0001eff4();
    if (iVar6 == -1) {
      iVar6 = 0;
      goto LAB_0001f2bc;
    }
  }
  iVar6 = 0;
LAB_0001f1a8:
  uVar2 = *param_1;
  if (uVar2 == 0) goto LAB_0001f230;
LAB_0001f1b4:
  local_30 = param_3;
  if (uVar2 < param_3) {
    local_30 = uVar2;
  }
  uVar2 = local_30;
  uVar5 = local_30;
  (*(code *)PTR_memcpy_000360fc)(param_2,param_1[1]);
  param_1[1] = param_1[1] + uVar2;
  *param_1 = *param_1 - uVar2;
LAB_0001f1f8:
  while( true ) {
    uVar3 = param_1[3];
    param_3 = param_3 - uVar2;
    param_2 = param_2 + uVar2;
    iVar6 = iVar6 + uVar2;
    uVar2 = uVar3 + uVar2;
    param_1[3] = uVar2;
    param_1[2] = (uint)(uVar2 < uVar3) + param_1[2];
    if (param_3 == 0) goto LAB_0001f2bc;
    uVar2 = *param_1;
    if (uVar2 != 0) break;
LAB_0001f230:
    local_30 = param_3;
    if ((param_1[0x10] != 0) && (param_1[0x1a] == 0)) {
      param_1[0x11] = 1;
      goto LAB_0001f2bc;
    }
    uVar5 = param_3;
    if ((param_1[0xc] == 0) || (param_3 < param_1[7] << 1)) {
      iVar4 = FUN_0001eeac(param_1);
      if (iVar4 == -1) goto LAB_0001f2b8;
      goto LAB_0001f1a8;
    }
    if (param_1[0xc] == 1) goto LAB_0001f328;
    param_1[0x1d] = param_3;
    param_1[0x1c] = param_2;
    iVar4 = FUN_0001ec10(param_1);
    if (iVar4 == -1) goto LAB_0001f2b8;
    local_30 = *param_1;
    *param_1 = 0;
    uVar2 = local_30;
  }
  goto LAB_0001f1b4;
LAB_0001f328:
  iVar4 = FUN_0001e780(param_1,param_2,param_3,&local_30);
  uVar2 = local_30;
  if (iVar4 == -1) {
LAB_0001f2b8:
    iVar6 = 0;
    goto LAB_0001f2bc;
  }
  goto LAB_0001f1f8;
}

