
void build_wcs_buffer(re_string_t *pstr)

{
  uchar uVar1;
  int iVar2;
  int iVar3;
  uchar *puVar4;
  wint_t wVar5;
  wint_t *pwVar6;
  size_t sVar7;
  int iVar8;
  wint_t wVar9;
  wint_t *pwVar10;
  wint_t *pwVar11;
  re_string_t *prVar12;
  uchar *puVar13;
  uchar *in_a1;
  size_t sVar14;
  uchar *puVar15;
  int iVar16;
  uchar *puVar17;
  uchar *puVar18;
  int iVar19;
  undefined *puVar20;
  code *pcVar21;
  wchar_t wc;
  mbstate_t prev_st;
  uchar buf [64];
  
  iVar2 = *(int *)PTR___stack_chk_guard_000554f0;
  iVar16 = pstr->len;
  if (pstr->bufs_len <= pstr->len) {
    iVar16 = pstr->bufs_len;
  }
  iVar19 = pstr->valid_len;
  prVar12 = pstr;
  if (iVar19 < iVar16) {
    do {
      prev_st.__count = (pstr->cur_state).__count;
      prev_st.__value = (pstr->cur_state).__value;
      sVar14 = iVar16 - iVar19;
      if (pstr->trans == (uchar *)0x0) {
        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;
      }
      else {
        in_a1 = buf;
        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {
          sVar7 = 0;
          do {
            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];
            pstr->mbs[iVar19 + sVar7] = uVar1;
            *puVar17 = uVar1;
            sVar7 = sVar7 + 1;
            if (pstr->mb_cur_max <= (int)sVar7) break;
            puVar17 = puVar17 + 1;
          } while (sVar14 != sVar7);
        }
      }
      prVar12 = (re_string_t *)&wc;
      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);
      if (sVar14 - 1 < 0xfffffffe) {
        if (sVar14 == 0xfffffffe) {
          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;
          (pstr->cur_state).__count = prev_st.__count;
          (pstr->cur_state).__value = prev_st.__value;
          break;
        }
      }
      else {
LAB_0002c26c:
        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];
        if (pstr->trans != (uchar *)0x0) {
          wc = (wchar_t)pstr->trans[wc];
        }
        (pstr->cur_state).__count = prev_st.__count;
        (pstr->cur_state).__value = prev_st.__value;
        sVar14 = 1;
      }
      iVar8 = iVar19 + 1;
      pstr->wcs[iVar19] = wc;
      iVar3 = iVar19 + sVar14;
      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);
      in_a1 = (uchar *)wc;
      iVar19 = iVar8;
      if (prVar12 != (re_string_t *)0x0) {
        do {
          in_a1 = (uchar *)(iVar8 * 4);
          prVar12 = (re_string_t *)(pstr->wcs + iVar8);
          iVar8 = iVar8 + 1;
          prVar12->raw_mbs = (uchar *)0xffffffff;
          iVar19 = iVar3;
        } while (iVar3 != iVar8);
      }
    } while (iVar19 < iVar16);
  }
  pstr->valid_len = iVar19;
  pstr->valid_raw_len = iVar19;
  if (iVar2 == *(int *)PTR___stack_chk_guard_000554f0) {
    return;
  }
  puVar20 = PTR___stack_chk_fail_000554d4;
  (*(code *)PTR___stack_chk_fail_000554d4)();
  if ((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)) {
    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {
      puVar17 = prVar12->raw_mbs + iVar16;
      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);
      if (pwVar6 == (wint_t *)0x0) {
        return;
      }
      prVar12->wcs = pwVar6;
      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);
    }
    puVar17 = prVar12->mbs;
    pcVar21 = *(code **)(puVar20 + 0x29124);
    if (puVar17 == (uchar *)0x0) {
      prVar12->mbs = *(uchar **)(in_a1 + 4);
      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);
    }
    else {
      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;
      iVar16 = *(int *)(in_a1 + 4) + -1;
      puVar17 = puVar17 + -1;
      while (-1 < iVar16) {
        if ((int)puVar17 < 0) {
          puVar18 = puVar18 + -(iVar16 + 1);
          (**(code **)(puVar20 + 0x29124))
                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);
          break;
        }
        wVar9 = prVar12->wcs[(int)puVar17];
        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);
        if (wVar9 == wVar5) {
          iVar16 = iVar16 + -1;
          puVar17 = puVar17 + -1;
        }
        else if ((int)wVar9 < (int)wVar5) {
          iVar16 = iVar16 + -1;
          puVar18 = puVar18 + -1;
          prVar12->wcs[(int)puVar18] = wVar5;
        }
        else {
          puVar17 = puVar17 + -1;
        }
      }
      puVar4 = prVar12->mbs;
      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;
      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);
      puVar13 = puVar4 + -1;
      if (puVar17 != (uchar *)0x0) {
        prVar12->mbs = puVar4 + (int)puVar17;
        do {
          while( true ) {
            pwVar6 = prVar12->wcs;
            pwVar10 = pwVar6 + (int)puVar15;
            pwVar11 = pwVar6 + (int)puVar13;
            puVar4 = puVar13 + (int)puVar17;
            if ((int)*pwVar10 <= (int)*pwVar11) break;
            puVar15 = puVar15 + -1;
            puVar4 = puVar17 + -1;
            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;
            puVar17 = puVar4;
            if (puVar4 == (uchar *)0x0) {
              return;
            }
          }
          puVar13 = puVar13 + -1;
          pwVar6[(int)puVar4] = *pwVar11;
        } while (-1 < (int)puVar13);
        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)
        ;
      }
    }
  }
  return;
}



undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)

{
  undefined1 uVar1;
  int iVar2;
  undefined1 *puVar3;
  undefined1 *puVar4;
  int iVar5;
  int iVar6;
  undefined1 **ppuVar7;
  undefined1 *puVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  undefined1 *puVar11;
  undefined *puVar12;
  code *pcVar13;
  undefined1 *local_78;
  undefined1 *local_74;
  undefined1 *local_70;
  undefined1 local_6c [64];
  undefined1 *local_2c;
  
  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;
  puVar10 = param_1[0xc];
  if ((int)param_1[9] <= (int)param_1[0xc]) {
    puVar10 = param_1[9];
  }
  puVar11 = param_1[7];
  ppuVar7 = param_1;
  if ((int)puVar11 < (int)puVar10) {
    do {
      local_74 = param_1[4];
      local_70 = param_1[5];
      if (param_1[0x10] == (undefined1 *)0x0) {
        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);
      }
      else {
        param_2 = local_6c;
        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {
          iVar2 = 0;
          do {
            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];
            (param_1[1] + iVar2)[(int)puVar11] = uVar1;
            *puVar3 = uVar1;
            iVar2 = iVar2 + 1;
            if ((int)param_1[0x14] <= iVar2) break;
            puVar3 = puVar3 + 1;
          } while ((int)puVar10 - (int)puVar11 != iVar2);
        }
      }
      ppuVar7 = &local_78;
      iVar2 = rpl_mbrtowc();
      if (iVar2 - 1U < 0xfffffffe) {
        if (iVar2 == -2) {
          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;
          param_1[4] = local_74;
          param_1[5] = local_70;
          break;
        }
      }
      else {
LAB_0002c26c:
        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];
        if (param_1[0x10] != (undefined1 *)0x0) {
          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];
        }
        param_1[4] = local_74;
        param_1[5] = local_70;
        iVar2 = 1;
      }
      puVar4 = puVar11 + 1;
      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;
      puVar3 = puVar11 + iVar2;
      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);
      param_2 = local_78;
      puVar11 = puVar4;
      if (ppuVar7 != (undefined1 **)0x0) {
        do {
          param_2 = (undefined1 *)((int)puVar4 * 4);
          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);
          puVar4 = puVar4 + 1;
          *ppuVar7 = (undefined1 *)0xffffffff;
          puVar11 = puVar3;
        } while (puVar3 != puVar4);
      }
    } while ((int)puVar11 < (int)puVar10);
  }
  param_1[7] = puVar11;
  param_1[8] = puVar11;
  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {
    return *(undefined1 **)PTR___stack_chk_guard_000554f0;
  }
  puVar12 = PTR___stack_chk_fail_000554d4;
  (*(code *)PTR___stack_chk_fail_000554d4)();
  puVar10 = (undefined1 *)0x0;
  if ((param_2 != (undefined1 *)0x0) &&
     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {
    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {
      puVar10 = *ppuVar7 + (int)puVar10;
      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);
      if (puVar11 == (undefined1 *)0x0) {
        return (undefined1 *)0xc;
      }
      ppuVar7[2] = puVar11;
      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);
    }
    puVar10 = ppuVar7[1];
    pcVar13 = *(code **)(puVar12 + 0x29124);
    if (puVar10 == (undefined1 *)0x0) {
      ppuVar7[1] = *(undefined1 **)(param_2 + 4);
      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);
      puVar10 = (undefined1 *)0x0;
    }
    else {
      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;
      iVar2 = *(int *)(param_2 + 4) + -1;
      puVar10 = puVar10 + -1;
      while (-1 < iVar2) {
        if ((int)puVar10 < 0) {
          puVar11 = puVar11 + -(iVar2 + 1);
          (**(code **)(puVar12 + 0x29124))
                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);
          break;
        }
        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);
        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);
        if (iVar5 == iVar6) {
          iVar2 = iVar2 + -1;
          puVar10 = puVar10 + -1;
        }
        else if (iVar5 < iVar6) {
          iVar2 = iVar2 + -1;
          puVar11 = puVar11 + -1;
          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;
        }
        else {
          puVar10 = puVar10 + -1;
        }
      }
      puVar3 = ppuVar7[1];
      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;
      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);
      puVar4 = puVar3 + -1;
      if (puVar10 != (undefined1 *)0x0) {
        ppuVar7[1] = puVar3 + (int)puVar10;
        do {
          while( true ) {
            puVar3 = ppuVar7[2];
            iVar2 = (int)puVar9 * 4;
            iVar6 = (int)puVar4 * 4;
            puVar8 = puVar4 + (int)puVar10;
            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;
            puVar9 = puVar9 + -1;
            puVar8 = puVar10 + -1;
            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);
            puVar10 = puVar8;
            if (puVar8 == (undefined1 *)0x0) {
              return (undefined1 *)0x0;
            }
          }
          puVar4 = puVar4 + -1;
          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);
        } while (-1 < (int)puVar4);
        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)
        ;
        puVar10 = (undefined1 *)0x0;
      }
    }
  }
  return puVar10;
}


lui gp,0x3
addiu gp,gp,0xf7c
addu gp,gp,t9
addiu sp,sp,-0x90
sw ra,0x8c(sp)
sw s7,0x88(sp)
sw s6,0x84(sp)
sw s5,0x80(sp)
sw s4,0x7c(sp)
sw s3,0x78(sp)
sw s2,0x74(sp)
sw s1,0x70(sp)
sw s0,0x6c(sp)
sw gp,0x10(sp)
or s0,a0,zero
lw v0,-0x7bf0(gp)
lw v0,0x0(v0)
sw v0,0x64(sp)
lw v0,0x30(a0)
lw v1,0x24(a0)
slt s1,v0,v1
movz v0,v1,s1
or s1,v0,zero
lw s7,0x1c(a0)
slt v0,s7,v0
beq v0,zero,0x0002c374
_nop
addiu s6,sp,0x24
addiu s3,a0,0x10
addiu s2,sp,0x18
li s5,0x1
b 0x0002c2f8
_li s4,-0x2
lw v0,0x50(s0)
blez v0,0x0002c324
_or a1,s6,zero
blez a2,0x0002c25c
_addiu a0,sp,0x24
or v1,zero,zero
lw v0,0x0(s0)
lw a1,0x18(s0)
addu v0,v0,v1
addu v0,v0,s7
addu v0,v0,a1
lbu a1,0x0(v0)
lw v0,0x40(s0)
addu v0,v0,a1
lbu a1,0x0(v0)
lw v0,0x4(s0)
addu v0,v0,v1
addu v0,v0,s7
sb a1,0x0(v0)
sb a1,0x0(a0)
addiu v1,v1,0x1
lw v0,0x50(s0)
slt v0,v1,v0
beq v0,zero,0x0002c264
_nop
bne a2,v1,0x0002c200
_addiu a0,a0,0x1
b 0x0002c324
_or a1,s6,zero
b 0x0002c324
_or a1,s6,zero
b 0x0002c324
_or a1,s6,zero
lw v0,0x0(s0)
lw v1,0x18(s0)
addu v0,v0,s7
addu v0,v0,v1
lbu v1,0x0(v0)
sw v1,0x18(sp)
lw v0,0x40(s0)
bne v0,zero,0x0002c3b8
_addu v0,v0,v1
lw v0,0x1c(sp)
sw v0,0x10(s0)
lw v0,0x20(sp)
sw v0,0x14(s0)
or v0,s5,zero
addiu v1,s7,0x1
lw a0,0x8(s0)
sll a1,s7,0x2
addu a0,a0,a1
lw a1,0x18(sp)
sw a1,0x0(a0)
addu v0,s7,v0
slt a0,v1,v0
beq a0,zero,0x0002c2ec
_or s7,v1,zero
li a2,-0x1
lw a0,0x8(s0)
sll a1,v1,0x2
addu a0,a0,a1
addiu v1,v1,0x1
bne v0,v1,0x0002c2d0
_sw a2,0x0(a0)
or s7,v0,zero
slt v0,s7,s1
beq v0,zero,0x0002c374
_nop
lw v1,0x10(s0)
lw v0,0x14(s0)
sw v1,0x1c(sp)
sw v0,0x20(sp)
lw v0,0x40(s0)
bne v0,zero,0x0002c1e8
_subu a2,s1,s7
lw a1,0x18(s0)
addu v0,s7,a1
lw a1,0x0(s0)
addu a1,a1,v0
or a3,s3,zero
or a0,s2,zero
lw t9,-0x7eb0(gp)
bal 0x00029190
_nop
lw gp,0x10(sp)
addiu v1,v0,-0x1
sltiu v1,v1,-0x2
beq v1,zero,0x0002c26c
_nop
bne v0,s4,0x0002c2a8
_addiu v1,s7,0x1
lw v0,0x24(s0)
lw v1,0x30(s0)
slt v0,v0,v1
beq v0,zero,0x0002c26c
_lw v0,0x1c(sp)
sw v0,0x10(s0)
lw v0,0x20(sp)
sw v0,0x14(s0)
sw s7,0x1c(s0)
sw s7,0x20(s0)
lw v1,0x64(sp)
lw v0,-0x7bf0(gp)
lw v0,0x0(v0)
bne v1,v0,0x0002c3c4
_lw ra,0x8c(sp)
lw s7,0x88(sp)
lw s6,0x84(sp)
lw s5,0x80(sp)
lw s4,0x7c(sp)
lw s3,0x78(sp)
lw s2,0x74(sp)
lw s1,0x70(sp)
lw s0,0x6c(sp)
jr ra
_addiu sp,sp,0x90
lbu v0,0x0(v0)
b 0x0002c290
_sw v0,0x18(sp)
lw t9,-0x7c0c(gp)
jalr t9
_nop
(translation_unit "undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)\n\n{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}\n\n" (function_definition "undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)\n\n{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" type_identifier (pointer_declarator "* FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" * (function_declarator "FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" identifier (parameter_list "(undefined1 **param_1,undefined1 *param_2)" ( (parameter_declaration "undefined1 **param_1" type_identifier (pointer_declarator "**param_1" * (pointer_declarator "*param_1" * identifier))) , (parameter_declaration "undefined1 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined1 **ppuVar7;" type_identifier (pointer_declarator "**ppuVar7" * (pointer_declarator "*ppuVar7" * identifier)) ;) (declaration "undefined1 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined1 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined1 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined1 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "code *pcVar13;" type_identifier (pointer_declarator "*pcVar13" * identifier) ;) (declaration "undefined1 *local_78;" type_identifier (pointer_declarator "*local_78" * identifier) ;) (declaration "undefined1 *local_74;" type_identifier (pointer_declarator "*local_74" * identifier) ;) (declaration "undefined1 *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 local_6c [64];" type_identifier (array_declarator "local_6c [64]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_2c;" type_identifier (pointer_declarator "*local_2c" * identifier) ;) (expression_statement "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;" (assignment_expression "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0" identifier = (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "puVar10 = param_1[0xc];" (assignment_expression "puVar10 = param_1[0xc]" identifier = (subscript_expression "param_1[0xc]" identifier [ number_literal ])) ;) (if_statement "if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }" if (parenthesized_expression "((int)param_1[9] <= (int)param_1[0xc])" ( (binary_expression "(int)param_1[9] <= (int)param_1[0xc]" (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) <= (cast_expression "(int)param_1[0xc]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xc]" identifier [ number_literal ]))) )) (compound_statement "{\n    puVar10 = param_1[9];\n  }" { (expression_statement "puVar10 = param_1[9];" (assignment_expression "puVar10 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) ;) })) (expression_statement "puVar11 = param_1[7];" (assignment_expression "puVar11 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (expression_statement "ppuVar7 = param_1;" (assignment_expression "ppuVar7 = param_1" identifier = identifier) ;) (if_statement "if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" if (parenthesized_expression "((int)puVar11 < (int)puVar10)" ( (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" { (do_statement "do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);" do (compound_statement "{\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    }" { (expression_statement "local_74 = param_1[4];" (assignment_expression "local_74 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "local_70 = param_1[5];" (assignment_expression "local_70 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" if (parenthesized_expression "(param_1[0x10] == (undefined1 *)0x0)" ( (binary_expression "param_1[0x10] == (undefined1 *)0x0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }" { (expression_statement "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);" (assignment_expression "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6])" identifier = (binary_expression "*param_1 + (int)(puVar11 + (int)param_1[6])" (pointer_expression "*param_1" * identifier) + (cast_expression "(int)(puVar11 + (int)param_1[6])" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar11 + (int)param_1[6])" ( (binary_expression "puVar11 + (int)param_1[6]" identifier + (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ]))) ))))) ;) }) (else_clause "else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" else (compound_statement "{\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" { (expression_statement "param_2 = local_6c;" (assignment_expression "param_2 = local_6c" identifier = identifier) ;) (if_statement "if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" if (parenthesized_expression "((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11))" ( (binary_expression "(0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" (parenthesized_expression "(0 < (int)param_1[0x14])" ( (binary_expression "0 < (int)param_1[0x14]" number_literal < (cast_expression "(int)param_1[0x14]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x14]" identifier [ number_literal ]))) )) && (parenthesized_expression "(puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" ( (comma_expression "puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11" (assignment_expression "puVar3 = local_6c" identifier = identifier) , (binary_expression "0 < (int)puVar10 - (int)puVar11" number_literal < (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)))) ))) )) (compound_statement "{\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);" do (compound_statement "{\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          }" { (expression_statement "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];" (assignment_expression "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" identifier = (subscript_expression "param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) [ (subscript_expression "(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]" (call_expression "(byte)(*param_1 + iVar2 + (int)puVar11)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*param_1 + iVar2 + (int)puVar11)" ( (binary_expression "*param_1 + iVar2 + (int)puVar11" (binary_expression "*param_1 + iVar2" (pointer_expression "*param_1" * identifier) + identifier) + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))) [ (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ]) ])) ;) (expression_statement "(param_1[1] + iVar2)[(int)puVar11] = uVar1;" (assignment_expression "(param_1[1] + iVar2)[(int)puVar11] = uVar1" (subscript_expression "(param_1[1] + iVar2)[(int)puVar11]" (parenthesized_expression "(param_1[1] + iVar2)" ( (binary_expression "param_1[1] + iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier) )) [ (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) ]) = identifier) ;) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if ((int)param_1[0x14] <= iVar2) break;" if (parenthesized_expression "((int)param_1[0x14] <= iVar2)" ( (binary_expression "(int)param_1[0x14] <= iVar2" (cast_expression "(int)param_1[0x14]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x14]" identifier [ number_literal ])) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)puVar10 - (int)puVar11 != iVar2)" ( (binary_expression "(int)puVar10 - (int)puVar11 != iVar2" (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) })) }))) (expression_statement "ppuVar7 = &local_78;" (assignment_expression "ppuVar7 = &local_78" identifier = (pointer_expression "&local_78" & identifier)) ;) (expression_statement "iVar2 = rpl_mbrtowc();" (assignment_expression "iVar2 = rpl_mbrtowc()" identifier = (call_expression "rpl_mbrtowc()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" if (parenthesized_expression "(iVar2 - 1U < 0xfffffffe)" ( (binary_expression "iVar2 - 1U < 0xfffffffe" (binary_expression "iVar2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }" { (if_statement "if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" if (parenthesized_expression "(iVar2 == -2)" ( (binary_expression "iVar2 == -2" identifier == number_literal) )) (compound_statement "{\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" { (if_statement "if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;" if (parenthesized_expression "((int)param_1[0xc] <= (int)param_1[9])" ( (binary_expression "(int)param_1[0xc] <= (int)param_1[9]" (cast_expression "(int)param_1[0xc]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xc]" identifier [ number_literal ])) <= (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_0002c26c;" goto statement_identifier ;)) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;) })) }) (else_clause "else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" else (compound_statement "{\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" { (labeled_statement "LAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" statement_identifier : (expression_statement "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" identifier = (cast_expression "(undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" (call_expression "(uint)(byte)(*param_1 + (int)puVar11)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(*param_1 + (int)puVar11)" ( (binary_expression "*param_1 + (int)puVar11" (pointer_expression "*param_1" * identifier) + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))) [ (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ]))) ;)) (if_statement "if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" if (parenthesized_expression "(param_1[0x10] != (undefined1 *)0x0)" ( (binary_expression "param_1[0x10] != (undefined1 *)0x0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" { (expression_statement "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" identifier = (cast_expression "(undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (cast_expression "(uint)(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "local_78[(int)param_1[0x10]]" identifier [ (cast_expression "(int)param_1[0x10]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ]))))) ;) })) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }))) (expression_statement "puVar4 = puVar11 + 1;" (assignment_expression "puVar4 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;" (assignment_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78" (pointer_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4)" * (cast_expression "(undefined1 **)(param_1[2] + (int)puVar11 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[2] + (int)puVar11 * 4)" ( (binary_expression "param_1[2] + (int)puVar11 * 4" (subscript_expression "param_1[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = identifier) ;) (expression_statement "puVar3 = puVar11 + iVar2;" (assignment_expression "puVar3 = puVar11 + iVar2" identifier = (binary_expression "puVar11 + iVar2" identifier + identifier)) ;) (expression_statement "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);" (assignment_expression "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3)" identifier = (cast_expression "(undefined1 **)(uint)((int)puVar4 < (int)puVar3)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "(uint)((int)puVar4 < (int)puVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar4 < (int)puVar3)" ( (binary_expression "(int)puVar4 < (int)puVar3" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (expression_statement "param_2 = local_78;" (assignment_expression "param_2 = local_78" identifier = identifier) ;) (expression_statement "puVar11 = puVar4;" (assignment_expression "puVar11 = puVar4" identifier = identifier) ;) (if_statement "if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" if (parenthesized_expression "(ppuVar7 != (undefined1 **)0x0)" ( (binary_expression "ppuVar7 != (undefined1 **)0x0" identifier != (cast_expression "(undefined1 **)0x0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" { (do_statement "do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);" do (compound_statement "{\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        }" { (expression_statement "param_2 = (undefined1 *)((int)puVar4 * 4);" (assignment_expression "param_2 = (undefined1 *)((int)puVar4 * 4)" identifier = (cast_expression "(undefined1 *)((int)puVar4 * 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar4 * 4)" ( (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) (expression_statement "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);" (assignment_expression "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2])" identifier = (cast_expression "(undefined1 **)(param_2 + (int)param_1[2])" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + (int)param_1[2])" ( (binary_expression "param_2 + (int)param_1[2]" identifier + (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "*ppuVar7 = (undefined1 *)0xffffffff;" (assignment_expression "*ppuVar7 = (undefined1 *)0xffffffff" (pointer_expression "*ppuVar7" * identifier) = (cast_expression "(undefined1 *)0xffffffff" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar11 = puVar3;" (assignment_expression "puVar11 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(puVar3 != puVar4)" ( (binary_expression "puVar3 != puVar4" identifier != identifier) )) ;) })) }) while (parenthesized_expression "((int)puVar11 < (int)puVar10)" ( (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "param_1[7] = puVar11;" (assignment_expression "param_1[7] = puVar11" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[8] = puVar11;" (assignment_expression "param_1[8] = puVar11" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" if (parenthesized_expression "(local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0)" ( (binary_expression "local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0" identifier == (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" { (return_statement "return *(undefined1 **)PTR___stack_chk_guard_000554f0;" return (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) })) (expression_statement "puVar12 = PTR___stack_chk_fail_000554d4;" (assignment_expression "puVar12 = PTR___stack_chk_fail_000554d4" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000554d4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000554d4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000554d4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000554d4" * (cast_expression "(code *)PTR___stack_chk_fail_000554d4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0))" ( (binary_expression "(param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" (parenthesized_expression "(param_2 != (undefined1 *)0x0)" ( (binary_expression "param_2 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" ( (comma_expression "puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0" (assignment_expression "puVar10 = *(undefined1 **)(param_2 + 4)" identifier = (pointer_expression "*(undefined1 **)(param_2 + 4)" * (cast_expression "(undefined1 **)(param_2 + 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) , (binary_expression "puVar10 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" { (if_statement "if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" if (parenthesized_expression "((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2))" ( (binary_expression "(int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)" (cast_expression "(int)*ppuVar7" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*ppuVar7" * identifier)) < (cast_expression "(int)(ppuVar7[1] + (int)puVar10 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(ppuVar7[1] + (int)puVar10 * 2)" ( (binary_expression "ppuVar7[1] + (int)puVar10 * 2" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) + (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) )) (compound_statement "{\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" { (expression_statement "puVar10 = *ppuVar7 + (int)puVar10;" (assignment_expression "puVar10 = *ppuVar7 + (int)puVar10" identifier = (binary_expression "*ppuVar7 + (int)puVar10" (pointer_expression "*ppuVar7" * identifier) + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);" (assignment_expression "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" identifier = (cast_expression "(undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" (parenthesized_expression "(**(code **)(puVar12 + 0x290a8))" ( (pointer_expression "**(code **)(puVar12 + 0x290a8)" * (pointer_expression "*(code **)(puVar12 + 0x290a8)" * (cast_expression "(code **)(puVar12 + 0x290a8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x290a8)" ( (binary_expression "puVar12 + 0x290a8" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2],(int)puVar10 * 8)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (binary_expression "(int)puVar10 * 8" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ))))) ;) (if_statement "if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }" if (parenthesized_expression "(puVar11 == (undefined1 *)0x0)" ( (binary_expression "puVar11 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (undefined1 *)0xc;\n      }" { (return_statement "return (undefined1 *)0xc;" return (cast_expression "(undefined1 *)0xc" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "ppuVar7[2] = puVar11;" (assignment_expression "ppuVar7[2] = puVar11" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*ppuVar7 = (undefined1 *)((int)puVar10 * 2);" (assignment_expression "*ppuVar7 = (undefined1 *)((int)puVar10 * 2)" (pointer_expression "*ppuVar7" * identifier) = (cast_expression "(undefined1 *)((int)puVar10 * 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 * 2)" ( (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) })) (expression_statement "puVar10 = ppuVar7[1];" (assignment_expression "puVar10 = ppuVar7[1]" identifier = (subscript_expression "ppuVar7[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar13 = *(code **)(puVar12 + 0x29124);" (assignment_expression "pcVar13 = *(code **)(puVar12 + 0x29124)" identifier = (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) ;) (if_statement "if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" if (parenthesized_expression "(puVar10 == (undefined1 *)0x0)" ( (binary_expression "puVar10 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }" { (expression_statement "ppuVar7[1] = *(undefined1 **)(param_2 + 4);" (assignment_expression "ppuVar7[1] = *(undefined1 **)(param_2 + 4)" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) = (pointer_expression "*(undefined1 **)(param_2 + 4)" * (cast_expression "(undefined1 **)(param_2 + 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);" (call_expression "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) , (binary_expression "*(int *)(param_2 + 4) << 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal) ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" else (compound_statement "{\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" { (expression_statement "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;" (assignment_expression "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2" identifier = (binary_expression "puVar10 + *(int *)(param_2 + 4) * 2" identifier + (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal))) ;) (expression_statement "iVar2 = *(int *)(param_2 + 4) + -1;" (assignment_expression "iVar2 = *(int *)(param_2 + 4) + -1" identifier = (binary_expression "*(int *)(param_2 + 4) + -1" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (while_statement "while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" while (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) (compound_statement "{\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" { (if_statement "if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" if (parenthesized_expression "((int)puVar10 < 0)" ( (binary_expression "(int)puVar10 < 0" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" { (expression_statement "puVar11 = puVar11 + -(iVar2 + 1);" (assignment_expression "puVar11 = puVar11 + -(iVar2 + 1)" identifier = (binary_expression "puVar11 + -(iVar2 + 1)" identifier + (unary_expression "-(iVar2 + 1)" - (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) ))))) ;) (expression_statement "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);" (call_expression "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" ( (pointer_expression "**(code **)(puVar12 + 0x29124)" * (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) , (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) , (binary_expression "(iVar2 + 1) * 4" (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) )) * number_literal) ))) ;) (break_statement "break;" break ;) })) (expression_statement "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);" (assignment_expression "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4)" identifier = (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar10 * 4)" * (cast_expression "(int *)(ppuVar7[2] + (int)puVar10 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[2] + (int)puVar10 * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar10 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar10 * 4" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ))))) ;) (expression_statement "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);" (assignment_expression "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" * (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar2 * 4)" ( (binary_expression "*(int *)(param_2 + 8) + iVar2 * 4" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + (binary_expression "iVar2 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" if (parenthesized_expression "(iVar5 == iVar6)" ( (binary_expression "iVar5 == iVar6" identifier == identifier) )) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }) (else_clause "else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" else (if_statement "if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" if (parenthesized_expression "(iVar5 < iVar6)" ( (binary_expression "iVar5 < iVar6" identifier < identifier) )) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar11 + -1;" (assignment_expression "puVar11 = puVar11 + -1" identifier = (binary_expression "puVar11 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;" (assignment_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6" (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4)" * (cast_expression "(int *)(ppuVar7[2] + (int)puVar11 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[2] + (int)puVar11 * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = identifier) ;) }) (else_clause "else {\n          puVar10 = puVar10 + -1;\n        }" else (compound_statement "{\n          puVar10 = puVar10 + -1;\n        }" { (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }))))) })) (expression_statement "puVar3 = ppuVar7[1];" (assignment_expression "puVar3 = ppuVar7[1]" identifier = (subscript_expression "ppuVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;" (assignment_expression "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1" identifier = (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2 + -1" (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2" identifier + (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal)) + number_literal)) ;) (expression_statement "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);" (assignment_expression "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" identifier = (binary_expression "puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" identifier + (parenthesized_expression "(*(int *)(param_2 + 4) * 2 - (int)puVar11)" ( (binary_expression "*(int *)(param_2 + 4) * 2 - (int)puVar11" (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar4 = puVar3 + -1;" (assignment_expression "puVar4 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) (if_statement "if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" if (parenthesized_expression "(puVar10 != (undefined1 *)0x0)" ( (binary_expression "puVar10 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" { (expression_statement "ppuVar7[1] = puVar3 + (int)puVar10;" (assignment_expression "ppuVar7[1] = puVar3 + (int)puVar10" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) = (binary_expression "puVar3 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);" do (compound_statement "{\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        }" { (while_statement "while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" { (expression_statement "puVar3 = ppuVar7[2];" (assignment_expression "puVar3 = ppuVar7[2]" identifier = (subscript_expression "ppuVar7[2]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = (int)puVar9 * 4;" (assignment_expression "iVar2 = (int)puVar9 * 4" identifier = (binary_expression "(int)puVar9 * 4" (cast_expression "(int)puVar9" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "iVar6 = (int)puVar4 * 4;" (assignment_expression "iVar6 = (int)puVar4 * 4" identifier = (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "puVar8 = puVar4 + (int)puVar10;" (assignment_expression "puVar8 = puVar4 + (int)puVar10" identifier = (binary_expression "puVar4 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;" if (parenthesized_expression "(*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6))" ( (binary_expression "*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + iVar2)" * (cast_expression "(int *)(puVar3 + iVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar2)" ( (binary_expression "puVar3 + iVar2" identifier + identifier) )))) <= (pointer_expression "*(int *)(puVar3 + iVar6)" * (cast_expression "(int *)(puVar3 + iVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar6)" ( (binary_expression "puVar3 + iVar6" identifier + identifier) ))))) )) (break_statement "break;" break ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar10 + -1;" (assignment_expression "puVar8 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);" (assignment_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2)" (pointer_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" * (cast_expression "(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" ( (binary_expression "puVar3 + (int)(puVar4 + (int)puVar10) * 4" identifier + (binary_expression "(int)(puVar4 + (int)puVar10) * 4" (cast_expression "(int)(puVar4 + (int)puVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar4 + (int)puVar10)" ( (binary_expression "puVar4 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ))) * number_literal)) )))) = (pointer_expression "*(int *)(puVar3 + iVar2)" * (cast_expression "(int *)(puVar3 + iVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar2)" ( (binary_expression "puVar3 + iVar2" identifier + identifier) ))))) ;) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (if_statement "if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }" if (parenthesized_expression "(puVar8 == (undefined1 *)0x0)" ( (binary_expression "puVar8 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              return (undefined1 *)0x0;\n            }" { (return_statement "return (undefined1 *)0x0;" return (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) })) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" identifier = (binary_expression "puVar4 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);" (assignment_expression "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + (int)puVar8 * 4)" * (cast_expression "(int *)(puVar3 + (int)puVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + (int)puVar8 * 4)" ( (binary_expression "puVar3 + (int)puVar8 * 4" identifier + (binary_expression "(int)puVar8 * 4" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = (pointer_expression "*(int *)(puVar3 + iVar6)" * (cast_expression "(int *)(puVar3 + iVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar6)" ( (binary_expression "puVar3 + iVar6" identifier + identifier) ))))) ;) }) while (parenthesized_expression "(-1 < (int)puVar4)" ( (binary_expression "-1 < (int)puVar4" number_literal < (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;" (call_expression "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" ( (pointer_expression "**(code **)(puVar12 + 0x29124)" * (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) , (binary_expression "(int)puVar10 << 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal) ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) }))) })) (return_statement "return puVar10;" return identifier ;) })))
(translation_unit "void build_wcs_buffer(re_string_t *pstr)\n\n{\n  uchar uVar1;\n  int iVar2;\n  int iVar3;\n  uchar *puVar4;\n  wint_t wVar5;\n  wint_t *pwVar6;\n  size_t sVar7;\n  int iVar8;\n  wint_t wVar9;\n  wint_t *pwVar10;\n  wint_t *pwVar11;\n  re_string_t *prVar12;\n  uchar *puVar13;\n  uchar *in_a1;\n  size_t sVar14;\n  uchar *puVar15;\n  int iVar16;\n  uchar *puVar17;\n  uchar *puVar18;\n  int iVar19;\n  undefined *puVar20;\n  code *pcVar21;\n  wchar_t wc;\n  mbstate_t prev_st;\n  uchar buf [64];\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000554f0;\n  iVar16 = pstr->len;\n  if (pstr->bufs_len <= pstr->len) {\n    iVar16 = pstr->bufs_len;\n  }\n  iVar19 = pstr->valid_len;\n  prVar12 = pstr;\n  if (iVar19 < iVar16) {\n    do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);\n  }\n  pstr->valid_len = iVar19;\n  pstr->valid_raw_len = iVar19;\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000554f0) {\n    return;\n  }\n  puVar20 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  if ((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)) {\n    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }\n    puVar17 = prVar12->mbs;\n    pcVar21 = *(code **)(puVar20 + 0x29124);\n    if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void build_wcs_buffer(re_string_t *pstr)\n\n{\n  uchar uVar1;\n  int iVar2;\n  int iVar3;\n  uchar *puVar4;\n  wint_t wVar5;\n  wint_t *pwVar6;\n  size_t sVar7;\n  int iVar8;\n  wint_t wVar9;\n  wint_t *pwVar10;\n  wint_t *pwVar11;\n  re_string_t *prVar12;\n  uchar *puVar13;\n  uchar *in_a1;\n  size_t sVar14;\n  uchar *puVar15;\n  int iVar16;\n  uchar *puVar17;\n  uchar *puVar18;\n  int iVar19;\n  undefined *puVar20;\n  code *pcVar21;\n  wchar_t wc;\n  mbstate_t prev_st;\n  uchar buf [64];\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000554f0;\n  iVar16 = pstr->len;\n  if (pstr->bufs_len <= pstr->len) {\n    iVar16 = pstr->bufs_len;\n  }\n  iVar19 = pstr->valid_len;\n  prVar12 = pstr;\n  if (iVar19 < iVar16) {\n    do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);\n  }\n  pstr->valid_len = iVar19;\n  pstr->valid_raw_len = iVar19;\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000554f0) {\n    return;\n  }\n  puVar20 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  if ((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)) {\n    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }\n    puVar17 = prVar12->mbs;\n    pcVar21 = *(code **)(puVar20 + 0x29124);\n    if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "build_wcs_buffer(re_string_t *pstr)" identifier (parameter_list "(re_string_t *pstr)" ( (parameter_declaration "re_string_t *pstr" type_identifier (pointer_declarator "*pstr" * identifier)) ))) (compound_statement "{\n  uchar uVar1;\n  int iVar2;\n  int iVar3;\n  uchar *puVar4;\n  wint_t wVar5;\n  wint_t *pwVar6;\n  size_t sVar7;\n  int iVar8;\n  wint_t wVar9;\n  wint_t *pwVar10;\n  wint_t *pwVar11;\n  re_string_t *prVar12;\n  uchar *puVar13;\n  uchar *in_a1;\n  size_t sVar14;\n  uchar *puVar15;\n  int iVar16;\n  uchar *puVar17;\n  uchar *puVar18;\n  int iVar19;\n  undefined *puVar20;\n  code *pcVar21;\n  wchar_t wc;\n  mbstate_t prev_st;\n  uchar buf [64];\n  \n  iVar2 = *(int *)PTR___stack_chk_guard_000554f0;\n  iVar16 = pstr->len;\n  if (pstr->bufs_len <= pstr->len) {\n    iVar16 = pstr->bufs_len;\n  }\n  iVar19 = pstr->valid_len;\n  prVar12 = pstr;\n  if (iVar19 < iVar16) {\n    do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);\n  }\n  pstr->valid_len = iVar19;\n  pstr->valid_raw_len = iVar19;\n  if (iVar2 == *(int *)PTR___stack_chk_guard_000554f0) {\n    return;\n  }\n  puVar20 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  if ((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)) {\n    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }\n    puVar17 = prVar12->mbs;\n    pcVar21 = *(code **)(puVar20 + 0x29124);\n    if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }\n  }\n  return;\n}" { (declaration "uchar uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uchar *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "wint_t wVar5;" type_identifier identifier ;) (declaration "wint_t *pwVar6;" type_identifier (pointer_declarator "*pwVar6" * identifier) ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "wint_t wVar9;" type_identifier identifier ;) (declaration "wint_t *pwVar10;" type_identifier (pointer_declarator "*pwVar10" * identifier) ;) (declaration "wint_t *pwVar11;" type_identifier (pointer_declarator "*pwVar11" * identifier) ;) (declaration "re_string_t *prVar12;" type_identifier (pointer_declarator "*prVar12" * identifier) ;) (declaration "uchar *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uchar *in_a1;" type_identifier (pointer_declarator "*in_a1" * identifier) ;) (declaration "size_t sVar14;" primitive_type identifier ;) (declaration "uchar *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "uchar *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "uchar *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "undefined *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "code *pcVar21;" type_identifier (pointer_declarator "*pcVar21" * identifier) ;) (declaration "wchar_t wc;" type_identifier identifier ;) (declaration "mbstate_t prev_st;" type_identifier identifier ;) (declaration "uchar buf [64];" type_identifier (array_declarator "buf [64]" identifier [ number_literal ]) ;) (expression_statement "iVar2 = *(int *)PTR___stack_chk_guard_000554f0;" (assignment_expression "iVar2 = *(int *)PTR___stack_chk_guard_000554f0" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_000554f0" * (cast_expression "(int *)PTR___stack_chk_guard_000554f0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar16 = pstr->len;" (assignment_expression "iVar16 = pstr->len" identifier = (field_expression "pstr->len" identifier -> field_identifier)) ;) (if_statement "if (pstr->bufs_len <= pstr->len) {\n    iVar16 = pstr->bufs_len;\n  }" if (parenthesized_expression "(pstr->bufs_len <= pstr->len)" ( (binary_expression "pstr->bufs_len <= pstr->len" (field_expression "pstr->bufs_len" identifier -> field_identifier) <= (field_expression "pstr->len" identifier -> field_identifier)) )) (compound_statement "{\n    iVar16 = pstr->bufs_len;\n  }" { (expression_statement "iVar16 = pstr->bufs_len;" (assignment_expression "iVar16 = pstr->bufs_len" identifier = (field_expression "pstr->bufs_len" identifier -> field_identifier)) ;) })) (expression_statement "iVar19 = pstr->valid_len;" (assignment_expression "iVar19 = pstr->valid_len" identifier = (field_expression "pstr->valid_len" identifier -> field_identifier)) ;) (expression_statement "prVar12 = pstr;" (assignment_expression "prVar12 = pstr" identifier = identifier) ;) (if_statement "if (iVar19 < iVar16) {\n    do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);\n  }" if (parenthesized_expression "(iVar19 < iVar16)" ( (binary_expression "iVar19 < iVar16" identifier < identifier) )) (compound_statement "{\n    do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);\n  }" { (do_statement "do {\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    } while (iVar19 < iVar16);" do (compound_statement "{\n      prev_st.__count = (pstr->cur_state).__count;\n      prev_st.__value = (pstr->cur_state).__value;\n      sVar14 = iVar16 - iVar19;\n      if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }\n      prVar12 = (re_string_t *)&wc;\n      sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);\n      if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }\n      iVar8 = iVar19 + 1;\n      pstr->wcs[iVar19] = wc;\n      iVar3 = iVar19 + sVar14;\n      prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);\n      in_a1 = (uchar *)wc;\n      iVar19 = iVar8;\n      if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }\n    }" { (expression_statement "prev_st.__count = (pstr->cur_state).__count;" (assignment_expression "prev_st.__count = (pstr->cur_state).__count" (field_expression "prev_st.__count" identifier . field_identifier) = (field_expression "(pstr->cur_state).__count" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "prev_st.__value = (pstr->cur_state).__value;" (assignment_expression "prev_st.__value = (pstr->cur_state).__value" (field_expression "prev_st.__value" identifier . field_identifier) = (field_expression "(pstr->cur_state).__value" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "sVar14 = iVar16 - iVar19;" (assignment_expression "sVar14 = iVar16 - iVar19" identifier = (binary_expression "iVar16 - iVar19" identifier - identifier)) ;) (if_statement "if (pstr->trans == (uchar *)0x0) {\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }\n      else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }" if (parenthesized_expression "(pstr->trans == (uchar *)0x0)" ( (binary_expression "pstr->trans == (uchar *)0x0" (field_expression "pstr->trans" identifier -> field_identifier) == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;\n      }" { (expression_statement "in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx;" (assignment_expression "in_a1 = pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx" identifier = (binary_expression "pstr->raw_mbs + iVar19 + pstr->raw_mbs_idx" (binary_expression "pstr->raw_mbs + iVar19" (field_expression "pstr->raw_mbs" identifier -> field_identifier) + identifier) + (field_expression "pstr->raw_mbs_idx" identifier -> field_identifier))) ;) }) (else_clause "else {\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }" else (compound_statement "{\n        in_a1 = buf;\n        if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }\n      }" { (expression_statement "in_a1 = buf;" (assignment_expression "in_a1 = buf" identifier = identifier) ;) (if_statement "if ((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)) {\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }" if (parenthesized_expression "((0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14))" ( (binary_expression "(0 < pstr->mb_cur_max) && (puVar17 = buf, 0 < (int)sVar14)" (parenthesized_expression "(0 < pstr->mb_cur_max)" ( (binary_expression "0 < pstr->mb_cur_max" number_literal < (field_expression "pstr->mb_cur_max" identifier -> field_identifier)) )) && (parenthesized_expression "(puVar17 = buf, 0 < (int)sVar14)" ( (comma_expression "puVar17 = buf, 0 < (int)sVar14" (assignment_expression "puVar17 = buf" identifier = identifier) , (binary_expression "0 < (int)sVar14" number_literal < (cast_expression "(int)sVar14" ( (type_descriptor "int" primitive_type) ) identifier))) ))) )) (compound_statement "{\n          sVar7 = 0;\n          do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);\n        }" { (expression_statement "sVar7 = 0;" (assignment_expression "sVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          } while (sVar14 != sVar7);" do (compound_statement "{\n            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];\n            pstr->mbs[iVar19 + sVar7] = uVar1;\n            *puVar17 = uVar1;\n            sVar7 = sVar7 + 1;\n            if (pstr->mb_cur_max <= (int)sVar7) break;\n            puVar17 = puVar17 + 1;\n          }" { (expression_statement "uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]];" (assignment_expression "uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]]" identifier = (subscript_expression "pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]]" (field_expression "pstr->trans" identifier -> field_identifier) [ (subscript_expression "pstr->raw_mbs[pstr->raw_mbs_idx + iVar19 + sVar7]" (field_expression "pstr->raw_mbs" identifier -> field_identifier) [ (binary_expression "pstr->raw_mbs_idx + iVar19 + sVar7" (binary_expression "pstr->raw_mbs_idx + iVar19" (field_expression "pstr->raw_mbs_idx" identifier -> field_identifier) + identifier) + identifier) ]) ])) ;) (expression_statement "pstr->mbs[iVar19 + sVar7] = uVar1;" (assignment_expression "pstr->mbs[iVar19 + sVar7] = uVar1" (subscript_expression "pstr->mbs[iVar19 + sVar7]" (field_expression "pstr->mbs" identifier -> field_identifier) [ (binary_expression "iVar19 + sVar7" identifier + identifier) ]) = identifier) ;) (expression_statement "*puVar17 = uVar1;" (assignment_expression "*puVar17 = uVar1" (pointer_expression "*puVar17" * identifier) = identifier) ;) (expression_statement "sVar7 = sVar7 + 1;" (assignment_expression "sVar7 = sVar7 + 1" identifier = (binary_expression "sVar7 + 1" identifier + number_literal)) ;) (if_statement "if (pstr->mb_cur_max <= (int)sVar7) break;" if (parenthesized_expression "(pstr->mb_cur_max <= (int)sVar7)" ( (binary_expression "pstr->mb_cur_max <= (int)sVar7" (field_expression "pstr->mb_cur_max" identifier -> field_identifier) <= (cast_expression "(int)sVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (expression_statement "puVar17 = puVar17 + 1;" (assignment_expression "puVar17 = puVar17 + 1" identifier = (binary_expression "puVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(sVar14 != sVar7)" ( (binary_expression "sVar14 != sVar7" identifier != identifier) )) ;) })) }))) (expression_statement "prVar12 = (re_string_t *)&wc;" (assignment_expression "prVar12 = (re_string_t *)&wc" identifier = (cast_expression "(re_string_t *)&wc" ( (type_descriptor "re_string_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&wc" & identifier))) ;) (expression_statement "sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state);" (assignment_expression "sVar14 = rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state)" identifier = (call_expression "rpl_mbrtowc(&wc,(char *)in_a1,sVar14,&pstr->cur_state)" identifier (argument_list "(&wc,(char *)in_a1,sVar14,&pstr->cur_state)" ( (pointer_expression "&wc" & identifier) , (cast_expression "(char *)in_a1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier , (pointer_expression "&pstr->cur_state" & (field_expression "pstr->cur_state" identifier -> field_identifier)) )))) ;) (if_statement "if (sVar14 - 1 < 0xfffffffe) {\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }" if (parenthesized_expression "(sVar14 - 1 < 0xfffffffe)" ( (binary_expression "sVar14 - 1 < 0xfffffffe" (binary_expression "sVar14 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n        if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }\n      }" { (if_statement "if (sVar14 == 0xfffffffe) {\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }" if (parenthesized_expression "(sVar14 == 0xfffffffe)" ( (binary_expression "sVar14 == 0xfffffffe" identifier == number_literal) )) (compound_statement "{\n          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;\n          (pstr->cur_state).__count = prev_st.__count;\n          (pstr->cur_state).__value = prev_st.__value;\n          break;\n        }" { (if_statement "if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;" if (parenthesized_expression "(pstr->len <= pstr->bufs_len)" ( (binary_expression "pstr->len <= pstr->bufs_len" (field_expression "pstr->len" identifier -> field_identifier) <= (field_expression "pstr->bufs_len" identifier -> field_identifier)) )) (goto_statement "goto LAB_0002c26c;" goto statement_identifier ;)) (expression_statement "(pstr->cur_state).__count = prev_st.__count;" (assignment_expression "(pstr->cur_state).__count = prev_st.__count" (field_expression "(pstr->cur_state).__count" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier) = (field_expression "prev_st.__count" identifier . field_identifier)) ;) (expression_statement "(pstr->cur_state).__value = prev_st.__value;" (assignment_expression "(pstr->cur_state).__value = prev_st.__value" (field_expression "(pstr->cur_state).__value" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier) = (field_expression "prev_st.__value" identifier . field_identifier)) ;) (break_statement "break;" break ;) })) }) (else_clause "else {\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }" else (compound_statement "{\nLAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];\n        if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }\n        (pstr->cur_state).__count = prev_st.__count;\n        (pstr->cur_state).__value = prev_st.__value;\n        sVar14 = 1;\n      }" { (labeled_statement "LAB_0002c26c:\n        wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];" statement_identifier : (expression_statement "wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19];" (assignment_expression "wc = (wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19]" identifier = (cast_expression "(wchar_t)pstr->raw_mbs[pstr->raw_mbs_idx + iVar19]" ( (type_descriptor "wchar_t" type_identifier) ) (subscript_expression "pstr->raw_mbs[pstr->raw_mbs_idx + iVar19]" (field_expression "pstr->raw_mbs" identifier -> field_identifier) [ (binary_expression "pstr->raw_mbs_idx + iVar19" (field_expression "pstr->raw_mbs_idx" identifier -> field_identifier) + identifier) ]))) ;)) (if_statement "if (pstr->trans != (uchar *)0x0) {\n          wc = (wchar_t)pstr->trans[wc];\n        }" if (parenthesized_expression "(pstr->trans != (uchar *)0x0)" ( (binary_expression "pstr->trans != (uchar *)0x0" (field_expression "pstr->trans" identifier -> field_identifier) != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          wc = (wchar_t)pstr->trans[wc];\n        }" { (expression_statement "wc = (wchar_t)pstr->trans[wc];" (assignment_expression "wc = (wchar_t)pstr->trans[wc]" identifier = (cast_expression "(wchar_t)pstr->trans[wc]" ( (type_descriptor "wchar_t" type_identifier) ) (subscript_expression "pstr->trans[wc]" (field_expression "pstr->trans" identifier -> field_identifier) [ identifier ]))) ;) })) (expression_statement "(pstr->cur_state).__count = prev_st.__count;" (assignment_expression "(pstr->cur_state).__count = prev_st.__count" (field_expression "(pstr->cur_state).__count" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier) = (field_expression "prev_st.__count" identifier . field_identifier)) ;) (expression_statement "(pstr->cur_state).__value = prev_st.__value;" (assignment_expression "(pstr->cur_state).__value = prev_st.__value" (field_expression "(pstr->cur_state).__value" (parenthesized_expression "(pstr->cur_state)" ( (field_expression "pstr->cur_state" identifier -> field_identifier) )) . field_identifier) = (field_expression "prev_st.__value" identifier . field_identifier)) ;) (expression_statement "sVar14 = 1;" (assignment_expression "sVar14 = 1" identifier = number_literal) ;) }))) (expression_statement "iVar8 = iVar19 + 1;" (assignment_expression "iVar8 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "pstr->wcs[iVar19] = wc;" (assignment_expression "pstr->wcs[iVar19] = wc" (subscript_expression "pstr->wcs[iVar19]" (field_expression "pstr->wcs" identifier -> field_identifier) [ identifier ]) = identifier) ;) (expression_statement "iVar3 = iVar19 + sVar14;" (assignment_expression "iVar3 = iVar19 + sVar14" identifier = (binary_expression "iVar19 + sVar14" identifier + identifier)) ;) (expression_statement "prVar12 = (re_string_t *)(uint)(iVar8 < iVar3);" (assignment_expression "prVar12 = (re_string_t *)(uint)(iVar8 < iVar3)" identifier = (cast_expression "(re_string_t *)(uint)(iVar8 < iVar3)" ( (type_descriptor "re_string_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)(iVar8 < iVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar8 < iVar3)" ( (binary_expression "iVar8 < iVar3" identifier < identifier) ))))) ;) (expression_statement "in_a1 = (uchar *)wc;" (assignment_expression "in_a1 = (uchar *)wc" identifier = (cast_expression "(uchar *)wc" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "iVar19 = iVar8;" (assignment_expression "iVar19 = iVar8" identifier = identifier) ;) (if_statement "if (prVar12 != (re_string_t *)0x0) {\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }" if (parenthesized_expression "(prVar12 != (re_string_t *)0x0)" ( (binary_expression "prVar12 != (re_string_t *)0x0" identifier != (cast_expression "(re_string_t *)0x0" ( (type_descriptor "re_string_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);\n      }" { (do_statement "do {\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        } while (iVar3 != iVar8);" do (compound_statement "{\n          in_a1 = (uchar *)(iVar8 * 4);\n          prVar12 = (re_string_t *)(pstr->wcs + iVar8);\n          iVar8 = iVar8 + 1;\n          prVar12->raw_mbs = (uchar *)0xffffffff;\n          iVar19 = iVar3;\n        }" { (expression_statement "in_a1 = (uchar *)(iVar8 * 4);" (assignment_expression "in_a1 = (uchar *)(iVar8 * 4)" identifier = (cast_expression "(uchar *)(iVar8 * 4)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 * 4)" ( (binary_expression "iVar8 * 4" identifier * number_literal) )))) ;) (expression_statement "prVar12 = (re_string_t *)(pstr->wcs + iVar8);" (assignment_expression "prVar12 = (re_string_t *)(pstr->wcs + iVar8)" identifier = (cast_expression "(re_string_t *)(pstr->wcs + iVar8)" ( (type_descriptor "re_string_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pstr->wcs + iVar8)" ( (binary_expression "pstr->wcs + iVar8" (field_expression "pstr->wcs" identifier -> field_identifier) + identifier) )))) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "prVar12->raw_mbs = (uchar *)0xffffffff;" (assignment_expression "prVar12->raw_mbs = (uchar *)0xffffffff" (field_expression "prVar12->raw_mbs" identifier -> field_identifier) = (cast_expression "(uchar *)0xffffffff" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "iVar19 = iVar3;" (assignment_expression "iVar19 = iVar3" identifier = identifier) ;) }) while (parenthesized_expression "(iVar3 != iVar8)" ( (binary_expression "iVar3 != iVar8" identifier != identifier) )) ;) })) }) while (parenthesized_expression "(iVar19 < iVar16)" ( (binary_expression "iVar19 < iVar16" identifier < identifier) )) ;) })) (expression_statement "pstr->valid_len = iVar19;" (assignment_expression "pstr->valid_len = iVar19" (field_expression "pstr->valid_len" identifier -> field_identifier) = identifier) ;) (expression_statement "pstr->valid_raw_len = iVar19;" (assignment_expression "pstr->valid_raw_len = iVar19" (field_expression "pstr->valid_raw_len" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar2 == *(int *)PTR___stack_chk_guard_000554f0) {\n    return;\n  }" if (parenthesized_expression "(iVar2 == *(int *)PTR___stack_chk_guard_000554f0)" ( (binary_expression "iVar2 == *(int *)PTR___stack_chk_guard_000554f0" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_000554f0" * (cast_expression "(int *)PTR___stack_chk_guard_000554f0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar20 = PTR___stack_chk_fail_000554d4;" (assignment_expression "puVar20 = PTR___stack_chk_fail_000554d4" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000554d4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000554d4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000554d4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000554d4" * (cast_expression "(code *)PTR___stack_chk_fail_000554d4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if ((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)) {\n    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }\n    puVar17 = prVar12->mbs;\n    pcVar21 = *(code **)(puVar20 + 0x29124);\n    if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }\n  }" if (parenthesized_expression "((in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0))" ( (binary_expression "(in_a1 != (uchar *)0x0) && (iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)" (parenthesized_expression "(in_a1 != (uchar *)0x0)" ( (binary_expression "in_a1 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(iVar16 = *(int *)(in_a1 + 4), iVar16 != 0)" ( (comma_expression "iVar16 = *(int *)(in_a1 + 4), iVar16 != 0" (assignment_expression "iVar16 = *(int *)(in_a1 + 4)" identifier = (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) ))))) , (binary_expression "iVar16 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n    if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }\n    puVar17 = prVar12->mbs;\n    pcVar21 = *(code **)(puVar20 + 0x29124);\n    if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }\n  }" { (if_statement "if ((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)) {\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }" if (parenthesized_expression "((int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2))" ( (binary_expression "(int)prVar12->raw_mbs < (int)(prVar12->mbs + iVar16 * 2)" (cast_expression "(int)prVar12->raw_mbs" ( (type_descriptor "int" primitive_type) ) (field_expression "prVar12->raw_mbs" identifier -> field_identifier)) < (cast_expression "(int)(prVar12->mbs + iVar16 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(prVar12->mbs + iVar16 * 2)" ( (binary_expression "prVar12->mbs + iVar16 * 2" (field_expression "prVar12->mbs" identifier -> field_identifier) + (binary_expression "iVar16 * 2" identifier * number_literal)) )))) )) (compound_statement "{\n      puVar17 = prVar12->raw_mbs + iVar16;\n      pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);\n      if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }\n      prVar12->wcs = pwVar6;\n      prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);\n    }" { (expression_statement "puVar17 = prVar12->raw_mbs + iVar16;" (assignment_expression "puVar17 = prVar12->raw_mbs + iVar16" identifier = (binary_expression "prVar12->raw_mbs + iVar16" (field_expression "prVar12->raw_mbs" identifier -> field_identifier) + identifier)) ;) (expression_statement "pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8);" (assignment_expression "pwVar6 = (wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8)" identifier = (cast_expression "(wint_t *)(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8)" ( (type_descriptor "wint_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(puVar20 + 0x290a8))(prVar12->wcs,(int)puVar17 * 8)" (parenthesized_expression "(**(code **)(puVar20 + 0x290a8))" ( (pointer_expression "**(code **)(puVar20 + 0x290a8)" * (pointer_expression "*(code **)(puVar20 + 0x290a8)" * (cast_expression "(code **)(puVar20 + 0x290a8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar20 + 0x290a8)" ( (binary_expression "puVar20 + 0x290a8" identifier + number_literal) ))))) )) (argument_list "(prVar12->wcs,(int)puVar17 * 8)" ( (field_expression "prVar12->wcs" identifier -> field_identifier) , (binary_expression "(int)puVar17 * 8" (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ))))) ;) (if_statement "if (pwVar6 == (wint_t *)0x0) {\n        return;\n      }" if (parenthesized_expression "(pwVar6 == (wint_t *)0x0)" ( (binary_expression "pwVar6 == (wint_t *)0x0" identifier == (cast_expression "(wint_t *)0x0" ( (type_descriptor "wint_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "prVar12->wcs = pwVar6;" (assignment_expression "prVar12->wcs = pwVar6" (field_expression "prVar12->wcs" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar12->raw_mbs = (uchar *)((int)puVar17 * 2);" (assignment_expression "prVar12->raw_mbs = (uchar *)((int)puVar17 * 2)" (field_expression "prVar12->raw_mbs" identifier -> field_identifier) = (cast_expression "(uchar *)((int)puVar17 * 2)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar17 * 2)" ( (binary_expression "(int)puVar17 * 2" (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) })) (expression_statement "puVar17 = prVar12->mbs;" (assignment_expression "puVar17 = prVar12->mbs" identifier = (field_expression "prVar12->mbs" identifier -> field_identifier)) ;) (expression_statement "pcVar21 = *(code **)(puVar20 + 0x29124);" (assignment_expression "pcVar21 = *(code **)(puVar20 + 0x29124)" identifier = (pointer_expression "*(code **)(puVar20 + 0x29124)" * (cast_expression "(code **)(puVar20 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar20 + 0x29124)" ( (binary_expression "puVar20 + 0x29124" identifier + number_literal) ))))) ;) (if_statement "if (puVar17 == (uchar *)0x0) {\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }\n    else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }" if (parenthesized_expression "(puVar17 == (uchar *)0x0)" ( (binary_expression "puVar17 == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      prVar12->mbs = *(uchar **)(in_a1 + 4);\n      (*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);\n    }" { (expression_statement "prVar12->mbs = *(uchar **)(in_a1 + 4);" (assignment_expression "prVar12->mbs = *(uchar **)(in_a1 + 4)" (field_expression "prVar12->mbs" identifier -> field_identifier) = (pointer_expression "*(uchar **)(in_a1 + 4)" * (cast_expression "(uchar **)(in_a1 + 4)" ( (type_descriptor "uchar **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) ))))) ;) (expression_statement "(*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2);" (call_expression "(*pcVar21)(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2)" (parenthesized_expression "(*pcVar21)" ( (pointer_expression "*pcVar21" * identifier) )) (argument_list "(prVar12->wcs,*(undefined4 *)(in_a1 + 8),*(int *)(in_a1 + 4) << 2)" ( (field_expression "prVar12->wcs" identifier -> field_identifier) , (pointer_expression "*(undefined4 *)(in_a1 + 8)" * (cast_expression "(undefined4 *)(in_a1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 8)" ( (binary_expression "in_a1 + 8" identifier + number_literal) )))) , (binary_expression "*(int *)(in_a1 + 4) << 2" (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) )))) << number_literal) ))) ;) }) (else_clause "else {\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }" else (compound_statement "{\n      puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;\n      iVar16 = *(int *)(in_a1 + 4) + -1;\n      puVar17 = puVar17 + -1;\n      while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }\n      puVar4 = prVar12->mbs;\n      puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;\n      puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);\n      puVar13 = puVar4 + -1;\n      if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }\n    }" { (expression_statement "puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2;" (assignment_expression "puVar18 = puVar17 + *(int *)(in_a1 + 4) * 2" identifier = (binary_expression "puVar17 + *(int *)(in_a1 + 4) * 2" identifier + (binary_expression "*(int *)(in_a1 + 4) * 2" (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) )))) * number_literal))) ;) (expression_statement "iVar16 = *(int *)(in_a1 + 4) + -1;" (assignment_expression "iVar16 = *(int *)(in_a1 + 4) + -1" identifier = (binary_expression "*(int *)(in_a1 + 4) + -1" (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (while_statement "while (-1 < iVar16) {\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }" while (parenthesized_expression "(-1 < iVar16)" ( (binary_expression "-1 < iVar16" number_literal < identifier) )) (compound_statement "{\n        if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }\n        wVar9 = prVar12->wcs[(int)puVar17];\n        wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);\n        if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }\n      }" { (if_statement "if ((int)puVar17 < 0) {\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }" if (parenthesized_expression "((int)puVar17 < 0)" ( (binary_expression "(int)puVar17 < 0" (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          puVar18 = puVar18 + -(iVar16 + 1);\n          (**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);\n          break;\n        }" { (expression_statement "puVar18 = puVar18 + -(iVar16 + 1);" (assignment_expression "puVar18 = puVar18 + -(iVar16 + 1)" identifier = (binary_expression "puVar18 + -(iVar16 + 1)" identifier + (unary_expression "-(iVar16 + 1)" - (parenthesized_expression "(iVar16 + 1)" ( (binary_expression "iVar16 + 1" identifier + number_literal) ))))) ;) (expression_statement "(**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4);" (call_expression "(**(code **)(puVar20 + 0x29124))\n                    (prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4)" (parenthesized_expression "(**(code **)(puVar20 + 0x29124))" ( (pointer_expression "**(code **)(puVar20 + 0x29124)" * (pointer_expression "*(code **)(puVar20 + 0x29124)" * (cast_expression "(code **)(puVar20 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar20 + 0x29124)" ( (binary_expression "puVar20 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(prVar12->wcs + (int)puVar18,*(undefined4 *)(in_a1 + 8),(iVar16 + 1) * 4)" ( (binary_expression "prVar12->wcs + (int)puVar18" (field_expression "prVar12->wcs" identifier -> field_identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) , (pointer_expression "*(undefined4 *)(in_a1 + 8)" * (cast_expression "(undefined4 *)(in_a1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 8)" ( (binary_expression "in_a1 + 8" identifier + number_literal) )))) , (binary_expression "(iVar16 + 1) * 4" (parenthesized_expression "(iVar16 + 1)" ( (binary_expression "iVar16 + 1" identifier + number_literal) )) * number_literal) ))) ;) (break_statement "break;" break ;) })) (expression_statement "wVar9 = prVar12->wcs[(int)puVar17];" (assignment_expression "wVar9 = prVar12->wcs[(int)puVar17]" identifier = (subscript_expression "prVar12->wcs[(int)puVar17]" (field_expression "prVar12->wcs" identifier -> field_identifier) [ (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4);" (assignment_expression "wVar5 = *(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4)" identifier = (pointer_expression "*(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4)" * (cast_expression "(wint_t *)(*(int *)(in_a1 + 8) + iVar16 * 4)" ( (type_descriptor "wint_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(in_a1 + 8) + iVar16 * 4)" ( (binary_expression "*(int *)(in_a1 + 8) + iVar16 * 4" (pointer_expression "*(int *)(in_a1 + 8)" * (cast_expression "(int *)(in_a1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 8)" ( (binary_expression "in_a1 + 8" identifier + number_literal) )))) + (binary_expression "iVar16 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (wVar9 == wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }\n        else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }" if (parenthesized_expression "(wVar9 == wVar5)" ( (binary_expression "wVar9 == wVar5" identifier == identifier) )) (compound_statement "{\n          iVar16 = iVar16 + -1;\n          puVar17 = puVar17 + -1;\n        }" { (expression_statement "iVar16 = iVar16 + -1;" (assignment_expression "iVar16 = iVar16 + -1" identifier = (binary_expression "iVar16 + -1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) }) (else_clause "else if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }" else (if_statement "if ((int)wVar9 < (int)wVar5) {\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }\n        else {\n          puVar17 = puVar17 + -1;\n        }" if (parenthesized_expression "((int)wVar9 < (int)wVar5)" ( (binary_expression "(int)wVar9 < (int)wVar5" (cast_expression "(int)wVar9" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)wVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          iVar16 = iVar16 + -1;\n          puVar18 = puVar18 + -1;\n          prVar12->wcs[(int)puVar18] = wVar5;\n        }" { (expression_statement "iVar16 = iVar16 + -1;" (assignment_expression "iVar16 = iVar16 + -1" identifier = (binary_expression "iVar16 + -1" identifier + number_literal)) ;) (expression_statement "puVar18 = puVar18 + -1;" (assignment_expression "puVar18 = puVar18 + -1" identifier = (binary_expression "puVar18 + -1" identifier + number_literal)) ;) (expression_statement "prVar12->wcs[(int)puVar18] = wVar5;" (assignment_expression "prVar12->wcs[(int)puVar18] = wVar5" (subscript_expression "prVar12->wcs[(int)puVar18]" (field_expression "prVar12->wcs" identifier -> field_identifier) [ (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier) ]) = identifier) ;) }) (else_clause "else {\n          puVar17 = puVar17 + -1;\n        }" else (compound_statement "{\n          puVar17 = puVar17 + -1;\n        }" { (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) }))))) })) (expression_statement "puVar4 = prVar12->mbs;" (assignment_expression "puVar4 = prVar12->mbs" identifier = (field_expression "prVar12->mbs" identifier -> field_identifier)) ;) (expression_statement "puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1;" (assignment_expression "puVar15 = puVar4 + *(int *)(in_a1 + 4) * 2 + -1" identifier = (binary_expression "puVar4 + *(int *)(in_a1 + 4) * 2 + -1" (binary_expression "puVar4 + *(int *)(in_a1 + 4) * 2" identifier + (binary_expression "*(int *)(in_a1 + 4) * 2" (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) )))) * number_literal)) + number_literal)) ;) (expression_statement "puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18);" (assignment_expression "puVar17 = puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18)" identifier = (binary_expression "puVar4 + (*(int *)(in_a1 + 4) * 2 - (int)puVar18)" identifier + (parenthesized_expression "(*(int *)(in_a1 + 4) * 2 - (int)puVar18)" ( (binary_expression "*(int *)(in_a1 + 4) * 2 - (int)puVar18" (binary_expression "*(int *)(in_a1 + 4) * 2" (pointer_expression "*(int *)(in_a1 + 4)" * (cast_expression "(int *)(in_a1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_a1 + 4)" ( (binary_expression "in_a1 + 4" identifier + number_literal) )))) * number_literal) - (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar13 = puVar4 + -1;" (assignment_expression "puVar13 = puVar4 + -1" identifier = (binary_expression "puVar4 + -1" identifier + number_literal)) ;) (if_statement "if (puVar17 != (uchar *)0x0) {\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }" if (parenthesized_expression "(puVar17 != (uchar *)0x0)" ( (binary_expression "puVar17 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        prVar12->mbs = puVar4 + (int)puVar17;\n        do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);\n        (**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;\n      }" { (expression_statement "prVar12->mbs = puVar4 + (int)puVar17;" (assignment_expression "prVar12->mbs = puVar4 + (int)puVar17" (field_expression "prVar12->mbs" identifier -> field_identifier) = (binary_expression "puVar4 + (int)puVar17" identifier + (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        } while (-1 < (int)puVar13);" do (compound_statement "{\n          while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }\n          puVar13 = puVar13 + -1;\n          pwVar6[(int)puVar4] = *pwVar11;\n        }" { (while_statement "while( true ) {\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            pwVar6 = prVar12->wcs;\n            pwVar10 = pwVar6 + (int)puVar15;\n            pwVar11 = pwVar6 + (int)puVar13;\n            puVar4 = puVar13 + (int)puVar17;\n            if ((int)*pwVar10 <= (int)*pwVar11) break;\n            puVar15 = puVar15 + -1;\n            puVar4 = puVar17 + -1;\n            pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;\n            puVar17 = puVar4;\n            if (puVar4 == (uchar *)0x0) {\n              return;\n            }\n          }" { (expression_statement "pwVar6 = prVar12->wcs;" (assignment_expression "pwVar6 = prVar12->wcs" identifier = (field_expression "prVar12->wcs" identifier -> field_identifier)) ;) (expression_statement "pwVar10 = pwVar6 + (int)puVar15;" (assignment_expression "pwVar10 = pwVar6 + (int)puVar15" identifier = (binary_expression "pwVar6 + (int)puVar15" identifier + (cast_expression "(int)puVar15" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pwVar11 = pwVar6 + (int)puVar13;" (assignment_expression "pwVar11 = pwVar6 + (int)puVar13" identifier = (binary_expression "pwVar6 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "puVar4 = puVar13 + (int)puVar17;" (assignment_expression "puVar4 = puVar13 + (int)puVar17" identifier = (binary_expression "puVar13 + (int)puVar17" identifier + (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if ((int)*pwVar10 <= (int)*pwVar11) break;" if (parenthesized_expression "((int)*pwVar10 <= (int)*pwVar11)" ( (binary_expression "(int)*pwVar10 <= (int)*pwVar11" (cast_expression "(int)*pwVar10" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pwVar10" * identifier)) <= (cast_expression "(int)*pwVar11" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pwVar11" * identifier))) )) (break_statement "break;" break ;)) (expression_statement "puVar15 = puVar15 + -1;" (assignment_expression "puVar15 = puVar15 + -1" identifier = (binary_expression "puVar15 + -1" identifier + number_literal)) ;) (expression_statement "puVar4 = puVar17 + -1;" (assignment_expression "puVar4 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10;" (assignment_expression "pwVar6[(int)(puVar13 + (int)puVar17)] = *pwVar10" (subscript_expression "pwVar6[(int)(puVar13 + (int)puVar17)]" identifier [ (cast_expression "(int)(puVar13 + (int)puVar17)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar13 + (int)puVar17)" ( (binary_expression "puVar13 + (int)puVar17" identifier + (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ]) = (pointer_expression "*pwVar10" * identifier)) ;) (expression_statement "puVar17 = puVar4;" (assignment_expression "puVar17 = puVar4" identifier = identifier) ;) (if_statement "if (puVar4 == (uchar *)0x0) {\n              return;\n            }" if (parenthesized_expression "(puVar4 == (uchar *)0x0)" ( (binary_expression "puVar4 == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) })) (expression_statement "puVar13 = puVar13 + -1;" (assignment_expression "puVar13 = puVar13 + -1" identifier = (binary_expression "puVar13 + -1" identifier + number_literal)) ;) (expression_statement "pwVar6[(int)puVar4] = *pwVar11;" (assignment_expression "pwVar6[(int)puVar4] = *pwVar11" (subscript_expression "pwVar6[(int)puVar4]" identifier [ (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) ]) = (pointer_expression "*pwVar11" * identifier)) ;) }) while (parenthesized_expression "(-1 < (int)puVar13)" ( (binary_expression "-1 < (int)puVar13" number_literal < (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "(**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)\n        ;" (call_expression "(**(code **)(puVar20 + 0x29124))(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)" (parenthesized_expression "(**(code **)(puVar20 + 0x29124))" ( (pointer_expression "**(code **)(puVar20 + 0x29124)" * (pointer_expression "*(code **)(puVar20 + 0x29124)" * (cast_expression "(code **)(puVar20 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar20 + 0x29124)" ( (binary_expression "puVar20 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(prVar12->wcs,prVar12->wcs + (int)puVar18,(int)puVar17 << 2)" ( (field_expression "prVar12->wcs" identifier -> field_identifier) , (binary_expression "prVar12->wcs + (int)puVar18" (field_expression "prVar12->wcs" identifier -> field_identifier) + (cast_expression "(int)puVar18" ( (type_descriptor "int" primitive_type) ) identifier)) , (binary_expression "(int)puVar17 << 2" (cast_expression "(int)puVar17" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal) ))) ;) })) }))) })) (return_statement "return;" return ;) })))
(translation_unit "undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)\n\n{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}\n\n" (function_definition "undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)\n\n{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" type_identifier (pointer_declarator "* FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" * (function_declarator "FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" identifier (parameter_list "(undefined1 **param_1,undefined1 *param_2)" ( (parameter_declaration "undefined1 **param_1" type_identifier (pointer_declarator "**param_1" * (pointer_declarator "*param_1" * identifier))) , (parameter_declaration "undefined1 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined1 **ppuVar7;" type_identifier (pointer_declarator "**ppuVar7" * (pointer_declarator "*ppuVar7" * identifier)) ;) (declaration "undefined1 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined1 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined1 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined1 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "code *pcVar13;" type_identifier (pointer_declarator "*pcVar13" * identifier) ;) (declaration "undefined1 *local_78;" type_identifier (pointer_declarator "*local_78" * identifier) ;) (declaration "undefined1 *local_74;" type_identifier (pointer_declarator "*local_74" * identifier) ;) (declaration "undefined1 *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 local_6c [64];" type_identifier (array_declarator "local_6c [64]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_2c;" type_identifier (pointer_declarator "*local_2c" * identifier) ;) (expression_statement "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;" (assignment_expression "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0" identifier = (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "puVar10 = param_1[0xc];" (assignment_expression "puVar10 = param_1[0xc]" identifier = (subscript_expression "param_1[0xc]" identifier [ number_literal ])) ;) (if_statement "if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }" if (parenthesized_expression "((int)param_1[9] <= (int)param_1[0xc])" ( (binary_expression "(int)param_1[9] <= (int)param_1[0xc]" (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) <= (cast_expression "(int)param_1[0xc]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xc]" identifier [ number_literal ]))) )) (compound_statement "{\n    puVar10 = param_1[9];\n  }" { (expression_statement "puVar10 = param_1[9];" (assignment_expression "puVar10 = param_1[9]" identifier = (subscript_expression "param_1[9]" identifier [ number_literal ])) ;) })) (expression_statement "puVar11 = param_1[7];" (assignment_expression "puVar11 = param_1[7]" identifier = (subscript_expression "param_1[7]" identifier [ number_literal ])) ;) (expression_statement "ppuVar7 = param_1;" (assignment_expression "ppuVar7 = param_1" identifier = identifier) ;) (if_statement "if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" if (parenthesized_expression "((int)puVar11 < (int)puVar10)" ( (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" { (do_statement "do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);" do (compound_statement "{\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    }" { (expression_statement "local_74 = param_1[4];" (assignment_expression "local_74 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "local_70 = param_1[5];" (assignment_expression "local_70 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (if_statement "if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" if (parenthesized_expression "(param_1[0x10] == (undefined1 *)0x0)" ( (binary_expression "param_1[0x10] == (undefined1 *)0x0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }" { (expression_statement "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);" (assignment_expression "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6])" identifier = (binary_expression "*param_1 + (int)(puVar11 + (int)param_1[6])" (pointer_expression "*param_1" * identifier) + (cast_expression "(int)(puVar11 + (int)param_1[6])" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar11 + (int)param_1[6])" ( (binary_expression "puVar11 + (int)param_1[6]" identifier + (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ]))) ))))) ;) }) (else_clause "else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" else (compound_statement "{\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" { (expression_statement "param_2 = local_6c;" (assignment_expression "param_2 = local_6c" identifier = identifier) ;) (if_statement "if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" if (parenthesized_expression "((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11))" ( (binary_expression "(0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" (parenthesized_expression "(0 < (int)param_1[0x14])" ( (binary_expression "0 < (int)param_1[0x14]" number_literal < (cast_expression "(int)param_1[0x14]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x14]" identifier [ number_literal ]))) )) && (parenthesized_expression "(puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" ( (comma_expression "puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11" (assignment_expression "puVar3 = local_6c" identifier = identifier) , (binary_expression "0 < (int)puVar10 - (int)puVar11" number_literal < (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)))) ))) )) (compound_statement "{\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);" do (compound_statement "{\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          }" { (expression_statement "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];" (assignment_expression "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" identifier = (subscript_expression "param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) [ (subscript_expression "(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]" (call_expression "(byte)(*param_1 + iVar2 + (int)puVar11)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*param_1 + iVar2 + (int)puVar11)" ( (binary_expression "*param_1 + iVar2 + (int)puVar11" (binary_expression "*param_1 + iVar2" (pointer_expression "*param_1" * identifier) + identifier) + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))) [ (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ]) ])) ;) (expression_statement "(param_1[1] + iVar2)[(int)puVar11] = uVar1;" (assignment_expression "(param_1[1] + iVar2)[(int)puVar11] = uVar1" (subscript_expression "(param_1[1] + iVar2)[(int)puVar11]" (parenthesized_expression "(param_1[1] + iVar2)" ( (binary_expression "param_1[1] + iVar2" (subscript_expression "param_1[1]" identifier [ number_literal ]) + identifier) )) [ (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) ]) = identifier) ;) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if ((int)param_1[0x14] <= iVar2) break;" if (parenthesized_expression "((int)param_1[0x14] <= iVar2)" ( (binary_expression "(int)param_1[0x14] <= iVar2" (cast_expression "(int)param_1[0x14]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x14]" identifier [ number_literal ])) <= identifier) )) (break_statement "break;" break ;)) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" identifier = (binary_expression "puVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)puVar10 - (int)puVar11 != iVar2)" ( (binary_expression "(int)puVar10 - (int)puVar11 != iVar2" (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) })) }))) (expression_statement "ppuVar7 = &local_78;" (assignment_expression "ppuVar7 = &local_78" identifier = (pointer_expression "&local_78" & identifier)) ;) (expression_statement "iVar2 = rpl_mbrtowc();" (assignment_expression "iVar2 = rpl_mbrtowc()" identifier = (call_expression "rpl_mbrtowc()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" if (parenthesized_expression "(iVar2 - 1U < 0xfffffffe)" ( (binary_expression "iVar2 - 1U < 0xfffffffe" (binary_expression "iVar2 - 1U" identifier - number_literal) < number_literal) )) (compound_statement "{\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }" { (if_statement "if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" if (parenthesized_expression "(iVar2 == -2)" ( (binary_expression "iVar2 == -2" identifier == number_literal) )) (compound_statement "{\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" { (if_statement "if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;" if (parenthesized_expression "((int)param_1[0xc] <= (int)param_1[9])" ( (binary_expression "(int)param_1[0xc] <= (int)param_1[9]" (cast_expression "(int)param_1[0xc]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xc]" identifier [ number_literal ])) <= (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_0002c26c;" goto statement_identifier ;)) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;) })) }) (else_clause "else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" else (compound_statement "{\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" { (labeled_statement "LAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" statement_identifier : (expression_statement "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" identifier = (cast_expression "(undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" (call_expression "(uint)(byte)(*param_1 + (int)puVar11)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(*param_1 + (int)puVar11)" ( (binary_expression "*param_1 + (int)puVar11" (pointer_expression "*param_1" * identifier) + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))) [ (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ]))) ;)) (if_statement "if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" if (parenthesized_expression "(param_1[0x10] != (undefined1 *)0x0)" ( (binary_expression "param_1[0x10] != (undefined1 *)0x0" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" { (expression_statement "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" identifier = (cast_expression "(undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (cast_expression "(uint)(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)local_78[(int)param_1[0x10]]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "local_78[(int)param_1[0x10]]" identifier [ (cast_expression "(int)param_1[0x10]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ]))))) ;) })) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" identifier = number_literal) ;) }))) (expression_statement "puVar4 = puVar11 + 1;" (assignment_expression "puVar4 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;" (assignment_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78" (pointer_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4)" * (cast_expression "(undefined1 **)(param_1[2] + (int)puVar11 * 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1[2] + (int)puVar11 * 4)" ( (binary_expression "param_1[2] + (int)puVar11 * 4" (subscript_expression "param_1[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = identifier) ;) (expression_statement "puVar3 = puVar11 + iVar2;" (assignment_expression "puVar3 = puVar11 + iVar2" identifier = (binary_expression "puVar11 + iVar2" identifier + identifier)) ;) (expression_statement "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);" (assignment_expression "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3)" identifier = (cast_expression "(undefined1 **)(uint)((int)puVar4 < (int)puVar3)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "(uint)((int)puVar4 < (int)puVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)puVar4 < (int)puVar3)" ( (binary_expression "(int)puVar4 < (int)puVar3" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (expression_statement "param_2 = local_78;" (assignment_expression "param_2 = local_78" identifier = identifier) ;) (expression_statement "puVar11 = puVar4;" (assignment_expression "puVar11 = puVar4" identifier = identifier) ;) (if_statement "if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" if (parenthesized_expression "(ppuVar7 != (undefined1 **)0x0)" ( (binary_expression "ppuVar7 != (undefined1 **)0x0" identifier != (cast_expression "(undefined1 **)0x0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" { (do_statement "do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);" do (compound_statement "{\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        }" { (expression_statement "param_2 = (undefined1 *)((int)puVar4 * 4);" (assignment_expression "param_2 = (undefined1 *)((int)puVar4 * 4)" identifier = (cast_expression "(undefined1 *)((int)puVar4 * 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar4 * 4)" ( (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) (expression_statement "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);" (assignment_expression "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2])" identifier = (cast_expression "(undefined1 **)(param_2 + (int)param_1[2])" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + (int)param_1[2])" ( (binary_expression "param_2 + (int)param_1[2]" identifier + (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "*ppuVar7 = (undefined1 *)0xffffffff;" (assignment_expression "*ppuVar7 = (undefined1 *)0xffffffff" (pointer_expression "*ppuVar7" * identifier) = (cast_expression "(undefined1 *)0xffffffff" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar11 = puVar3;" (assignment_expression "puVar11 = puVar3" identifier = identifier) ;) }) while (parenthesized_expression "(puVar3 != puVar4)" ( (binary_expression "puVar3 != puVar4" identifier != identifier) )) ;) })) }) while (parenthesized_expression "((int)puVar11 < (int)puVar10)" ( (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "param_1[7] = puVar11;" (assignment_expression "param_1[7] = puVar11" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[8] = puVar11;" (assignment_expression "param_1[8] = puVar11" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" if (parenthesized_expression "(local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0)" ( (binary_expression "local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0" identifier == (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" { (return_statement "return *(undefined1 **)PTR___stack_chk_guard_000554f0;" return (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" * (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) })) (expression_statement "puVar12 = PTR___stack_chk_fail_000554d4;" (assignment_expression "puVar12 = PTR___stack_chk_fail_000554d4" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000554d4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000554d4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000554d4)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000554d4" * (cast_expression "(code *)PTR___stack_chk_fail_000554d4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0))" ( (binary_expression "(param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" (parenthesized_expression "(param_2 != (undefined1 *)0x0)" ( (binary_expression "param_2 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" ( (comma_expression "puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0" (assignment_expression "puVar10 = *(undefined1 **)(param_2 + 4)" identifier = (pointer_expression "*(undefined1 **)(param_2 + 4)" * (cast_expression "(undefined1 **)(param_2 + 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) , (binary_expression "puVar10 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" { (if_statement "if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" if (parenthesized_expression "((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2))" ( (binary_expression "(int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)" (cast_expression "(int)*ppuVar7" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*ppuVar7" * identifier)) < (cast_expression "(int)(ppuVar7[1] + (int)puVar10 * 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(ppuVar7[1] + (int)puVar10 * 2)" ( (binary_expression "ppuVar7[1] + (int)puVar10 * 2" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) + (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) )) (compound_statement "{\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" { (expression_statement "puVar10 = *ppuVar7 + (int)puVar10;" (assignment_expression "puVar10 = *ppuVar7 + (int)puVar10" identifier = (binary_expression "*ppuVar7 + (int)puVar10" (pointer_expression "*ppuVar7" * identifier) + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);" (assignment_expression "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" identifier = (cast_expression "(undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" (parenthesized_expression "(**(code **)(puVar12 + 0x290a8))" ( (pointer_expression "**(code **)(puVar12 + 0x290a8)" * (pointer_expression "*(code **)(puVar12 + 0x290a8)" * (cast_expression "(code **)(puVar12 + 0x290a8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x290a8)" ( (binary_expression "puVar12 + 0x290a8" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2],(int)puVar10 * 8)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (binary_expression "(int)puVar10 * 8" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ))))) ;) (if_statement "if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }" if (parenthesized_expression "(puVar11 == (undefined1 *)0x0)" ( (binary_expression "puVar11 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (undefined1 *)0xc;\n      }" { (return_statement "return (undefined1 *)0xc;" return (cast_expression "(undefined1 *)0xc" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "ppuVar7[2] = puVar11;" (assignment_expression "ppuVar7[2] = puVar11" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*ppuVar7 = (undefined1 *)((int)puVar10 * 2);" (assignment_expression "*ppuVar7 = (undefined1 *)((int)puVar10 * 2)" (pointer_expression "*ppuVar7" * identifier) = (cast_expression "(undefined1 *)((int)puVar10 * 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 * 2)" ( (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) })) (expression_statement "puVar10 = ppuVar7[1];" (assignment_expression "puVar10 = ppuVar7[1]" identifier = (subscript_expression "ppuVar7[1]" identifier [ number_literal ])) ;) (expression_statement "pcVar13 = *(code **)(puVar12 + 0x29124);" (assignment_expression "pcVar13 = *(code **)(puVar12 + 0x29124)" identifier = (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) ;) (if_statement "if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" if (parenthesized_expression "(puVar10 == (undefined1 *)0x0)" ( (binary_expression "puVar10 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }" { (expression_statement "ppuVar7[1] = *(undefined1 **)(param_2 + 4);" (assignment_expression "ppuVar7[1] = *(undefined1 **)(param_2 + 4)" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) = (pointer_expression "*(undefined1 **)(param_2 + 4)" * (cast_expression "(undefined1 **)(param_2 + 4)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);" (call_expression "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) , (binary_expression "*(int *)(param_2 + 4) << 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal) ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" else (compound_statement "{\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" { (expression_statement "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;" (assignment_expression "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2" identifier = (binary_expression "puVar10 + *(int *)(param_2 + 4) * 2" identifier + (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal))) ;) (expression_statement "iVar2 = *(int *)(param_2 + 4) + -1;" (assignment_expression "iVar2 = *(int *)(param_2 + 4) + -1" identifier = (binary_expression "*(int *)(param_2 + 4) + -1" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (while_statement "while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" while (parenthesized_expression "(-1 < iVar2)" ( (binary_expression "-1 < iVar2" number_literal < identifier) )) (compound_statement "{\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" { (if_statement "if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" if (parenthesized_expression "((int)puVar10 < 0)" ( (binary_expression "(int)puVar10 < 0" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" { (expression_statement "puVar11 = puVar11 + -(iVar2 + 1);" (assignment_expression "puVar11 = puVar11 + -(iVar2 + 1)" identifier = (binary_expression "puVar11 + -(iVar2 + 1)" identifier + (unary_expression "-(iVar2 + 1)" - (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) ))))) ;) (expression_statement "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);" (call_expression "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" ( (pointer_expression "**(code **)(puVar12 + 0x29124)" * (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) , (pointer_expression "*(undefined4 *)(param_2 + 8)" * (cast_expression "(undefined4 *)(param_2 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) , (binary_expression "(iVar2 + 1) * 4" (parenthesized_expression "(iVar2 + 1)" ( (binary_expression "iVar2 + 1" identifier + number_literal) )) * number_literal) ))) ;) (break_statement "break;" break ;) })) (expression_statement "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);" (assignment_expression "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4)" identifier = (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar10 * 4)" * (cast_expression "(int *)(ppuVar7[2] + (int)puVar10 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[2] + (int)puVar10 * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar10 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar10 * 4" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ))))) ;) (expression_statement "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);" (assignment_expression "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" * (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar2 * 4)" ( (binary_expression "*(int *)(param_2 + 8) + iVar2 * 4" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + (binary_expression "iVar2 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" if (parenthesized_expression "(iVar5 == iVar6)" ( (binary_expression "iVar5 == iVar6" identifier == identifier) )) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }) (else_clause "else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" else (if_statement "if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" if (parenthesized_expression "(iVar5 < iVar6)" ( (binary_expression "iVar5 < iVar6" identifier < identifier) )) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }" { (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" identifier = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar11 + -1;" (assignment_expression "puVar11 = puVar11 + -1" identifier = (binary_expression "puVar11 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;" (assignment_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6" (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4)" * (cast_expression "(int *)(ppuVar7[2] + (int)puVar11 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[2] + (int)puVar11 * 4)" ( (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = identifier) ;) }) (else_clause "else {\n          puVar10 = puVar10 + -1;\n        }" else (compound_statement "{\n          puVar10 = puVar10 + -1;\n        }" { (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }))))) })) (expression_statement "puVar3 = ppuVar7[1];" (assignment_expression "puVar3 = ppuVar7[1]" identifier = (subscript_expression "ppuVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;" (assignment_expression "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1" identifier = (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2 + -1" (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2" identifier + (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal)) + number_literal)) ;) (expression_statement "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);" (assignment_expression "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" identifier = (binary_expression "puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" identifier + (parenthesized_expression "(*(int *)(param_2 + 4) * 2 - (int)puVar11)" ( (binary_expression "*(int *)(param_2 + 4) * 2 - (int)puVar11" (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) * number_literal) - (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "puVar4 = puVar3 + -1;" (assignment_expression "puVar4 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) (if_statement "if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" if (parenthesized_expression "(puVar10 != (undefined1 *)0x0)" ( (binary_expression "puVar10 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" { (expression_statement "ppuVar7[1] = puVar3 + (int)puVar10;" (assignment_expression "ppuVar7[1] = puVar3 + (int)puVar10" (subscript_expression "ppuVar7[1]" identifier [ number_literal ]) = (binary_expression "puVar3 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);" do (compound_statement "{\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        }" { (while_statement "while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" { (expression_statement "puVar3 = ppuVar7[2];" (assignment_expression "puVar3 = ppuVar7[2]" identifier = (subscript_expression "ppuVar7[2]" identifier [ number_literal ])) ;) (expression_statement "iVar2 = (int)puVar9 * 4;" (assignment_expression "iVar2 = (int)puVar9 * 4" identifier = (binary_expression "(int)puVar9 * 4" (cast_expression "(int)puVar9" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "iVar6 = (int)puVar4 * 4;" (assignment_expression "iVar6 = (int)puVar4 * 4" identifier = (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "puVar8 = puVar4 + (int)puVar10;" (assignment_expression "puVar8 = puVar4 + (int)puVar10" identifier = (binary_expression "puVar4 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;" if (parenthesized_expression "(*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6))" ( (binary_expression "*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + iVar2)" * (cast_expression "(int *)(puVar3 + iVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar2)" ( (binary_expression "puVar3 + iVar2" identifier + identifier) )))) <= (pointer_expression "*(int *)(puVar3 + iVar6)" * (cast_expression "(int *)(puVar3 + iVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar6)" ( (binary_expression "puVar3 + iVar6" identifier + identifier) ))))) )) (break_statement "break;" break ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar10 + -1;" (assignment_expression "puVar8 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);" (assignment_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2)" (pointer_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" * (cast_expression "(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" ( (binary_expression "puVar3 + (int)(puVar4 + (int)puVar10) * 4" identifier + (binary_expression "(int)(puVar4 + (int)puVar10) * 4" (cast_expression "(int)(puVar4 + (int)puVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(puVar4 + (int)puVar10)" ( (binary_expression "puVar4 + (int)puVar10" identifier + (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ))) * number_literal)) )))) = (pointer_expression "*(int *)(puVar3 + iVar2)" * (cast_expression "(int *)(puVar3 + iVar2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar2)" ( (binary_expression "puVar3 + iVar2" identifier + identifier) ))))) ;) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (if_statement "if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }" if (parenthesized_expression "(puVar8 == (undefined1 *)0x0)" ( (binary_expression "puVar8 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              return (undefined1 *)0x0;\n            }" { (return_statement "return (undefined1 *)0x0;" return (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) })) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" identifier = (binary_expression "puVar4 + -1" identifier + number_literal)) ;) (expression_statement "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);" (assignment_expression "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + (int)puVar8 * 4)" * (cast_expression "(int *)(puVar3 + (int)puVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + (int)puVar8 * 4)" ( (binary_expression "puVar3 + (int)puVar8 * 4" identifier + (binary_expression "(int)puVar8 * 4" (cast_expression "(int)puVar8" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )))) = (pointer_expression "*(int *)(puVar3 + iVar6)" * (cast_expression "(int *)(puVar3 + iVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + iVar6)" ( (binary_expression "puVar3 + iVar6" identifier + identifier) ))))) ;) }) while (parenthesized_expression "(-1 < (int)puVar4)" ( (binary_expression "-1 < (int)puVar4" number_literal < (cast_expression "(int)puVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;" (call_expression "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" ( (pointer_expression "**(code **)(puVar12 + 0x29124)" * (pointer_expression "*(code **)(puVar12 + 0x29124)" * (cast_expression "(code **)(puVar12 + 0x29124)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12 + 0x29124)" ( (binary_expression "puVar12 + 0x29124" identifier + number_literal) ))))) )) (argument_list "(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" ( (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) , (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" identifier [ number_literal ]) + (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) , (binary_expression "(int)puVar10 << 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) << number_literal) ))) ;) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" identifier = (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) }))) })) (return_statement "return puVar10;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * (pointer_declarator * IDENT))) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression LIT < (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (subscript_expression IDENT [ LIT ]) [ (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (pointer_expression * IDENT) + IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) [ (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ]) ])) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )) [ (cast_expression ( (type_descriptor TYPE) ) IDENT) ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) != IDENT) )) ;) })) }))) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (break_statement break ;) })) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (pointer_expression * IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) [ (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ]))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ]))))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) )) (compound_statement { (return_statement return (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) 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 ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (subscript_expression IDENT [ LIT ]) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (unary_expression - (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))))) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) * LIT)) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) }) while (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (subscript_expression IDENT [ LIT ]) , (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) << LIT) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) })) }))) })) (return_statement return IDENT ;) })))
(function_definition "undefined1 * FUN_0002c164(undefined1 **param_1,undefined1 *param_2)\n\n{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" (type_identifier "undefined1") (pointer_declarator "* FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" (* "*") (function_declarator "FUN_0002c164(undefined1 **param_1,undefined1 *param_2)" (identifier "FUN_0002c164") (parameter_list "(undefined1 **param_1,undefined1 *param_2)" (( "(") (parameter_declaration "undefined1 **param_1" (type_identifier "undefined1") (pointer_declarator "**param_1" (* "*") (pointer_declarator "*param_1" (* "*") (identifier "param_1")))) (, ",") (parameter_declaration "undefined1 *param_2" (type_identifier "undefined1") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  undefined1 uVar1;\n  int iVar2;\n  undefined1 *puVar3;\n  undefined1 *puVar4;\n  int iVar5;\n  int iVar6;\n  undefined1 **ppuVar7;\n  undefined1 *puVar8;\n  undefined1 *puVar9;\n  undefined1 *puVar10;\n  undefined1 *puVar11;\n  undefined *puVar12;\n  code *pcVar13;\n  undefined1 *local_78;\n  undefined1 *local_74;\n  undefined1 *local_70;\n  undefined1 local_6c [64];\n  undefined1 *local_2c;\n  \n  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  puVar10 = param_1[0xc];\n  if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }\n  puVar11 = param_1[7];\n  ppuVar7 = param_1;\n  if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }\n  param_1[7] = puVar11;\n  param_1[8] = puVar11;\n  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }\n  puVar12 = PTR___stack_chk_fail_000554d4;\n  (*(code *)PTR___stack_chk_fail_000554d4)();\n  puVar10 = (undefined1 *)0x0;\n  if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }\n  return puVar10;\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined1 *puVar3;" (type_identifier "undefined1") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined1 *puVar4;" (type_identifier "undefined1") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined1 **ppuVar7;" (type_identifier "undefined1") (pointer_declarator "**ppuVar7" (* "*") (pointer_declarator "*ppuVar7" (* "*") (identifier "ppuVar7"))) (; ";")) (declaration "undefined1 *puVar8;" (type_identifier "undefined1") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined1 *puVar9;" (type_identifier "undefined1") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "undefined1 *puVar10;" (type_identifier "undefined1") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "undefined1 *puVar11;" (type_identifier "undefined1") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "undefined *puVar12;" (type_identifier "undefined") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "code *pcVar13;" (type_identifier "code") (pointer_declarator "*pcVar13" (* "*") (identifier "pcVar13")) (; ";")) (declaration "undefined1 *local_78;" (type_identifier "undefined1") (pointer_declarator "*local_78" (* "*") (identifier "local_78")) (; ";")) (declaration "undefined1 *local_74;" (type_identifier "undefined1") (pointer_declarator "*local_74" (* "*") (identifier "local_74")) (; ";")) (declaration "undefined1 *local_70;" (type_identifier "undefined1") (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "undefined1 local_6c [64];" (type_identifier "undefined1") (array_declarator "local_6c [64]" (identifier "local_6c") ([ "[") (number_literal "64") (] "]")) (; ";")) (declaration "undefined1 *local_2c;" (type_identifier "undefined1") (pointer_declarator "*local_2c" (* "*") (identifier "local_2c")) (; ";")) (expression_statement "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;" (assignment_expression "local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0" (identifier "local_2c") (= "=") (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" (* "*") (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_000554f0")))) (; ";")) (expression_statement "puVar10 = param_1[0xc];" (assignment_expression "puVar10 = param_1[0xc]" (identifier "puVar10") (= "=") (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]"))) (; ";")) (if_statement "if ((int)param_1[9] <= (int)param_1[0xc]) {\n    puVar10 = param_1[9];\n  }" (if "if") (parenthesized_expression "((int)param_1[9] <= (int)param_1[0xc])" (( "(") (binary_expression "(int)param_1[9] <= (int)param_1[0xc]" (cast_expression "(int)param_1[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) (<= "<=") (cast_expression "(int)param_1[0xc]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")))) () ")")) (compound_statement "{\n    puVar10 = param_1[9];\n  }" ({ "{") (expression_statement "puVar10 = param_1[9];" (assignment_expression "puVar10 = param_1[9]" (identifier "puVar10") (= "=") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) (; ";")) (} "}"))) (expression_statement "puVar11 = param_1[7];" (assignment_expression "puVar11 = param_1[7]" (identifier "puVar11") (= "=") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "ppuVar7 = param_1;" (assignment_expression "ppuVar7 = param_1" (identifier "ppuVar7") (= "=") (identifier "param_1")) (; ";")) (if_statement "if ((int)puVar11 < (int)puVar10) {\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" (if "if") (parenthesized_expression "((int)puVar11 < (int)puVar10)" (( "(") (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (< "<") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10"))) () ")")) (compound_statement "{\n    do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);\n  }" ({ "{") (do_statement "do {\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    } while ((int)puVar11 < (int)puVar10);" (do "do") (compound_statement "{\n      local_74 = param_1[4];\n      local_70 = param_1[5];\n      if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }\n      ppuVar7 = &local_78;\n      iVar2 = rpl_mbrtowc();\n      if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }\n      puVar4 = puVar11 + 1;\n      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;\n      puVar3 = puVar11 + iVar2;\n      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);\n      param_2 = local_78;\n      puVar11 = puVar4;\n      if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }\n    }" ({ "{") (expression_statement "local_74 = param_1[4];" (assignment_expression "local_74 = param_1[4]" (identifier "local_74") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "local_70 = param_1[5];" (assignment_expression "local_70 = param_1[5]" (identifier "local_70") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (if_statement "if (param_1[0x10] == (undefined1 *)0x0) {\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }\n      else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" (if "if") (parenthesized_expression "(param_1[0x10] == (undefined1 *)0x0)" (( "(") (binary_expression "param_1[0x10] == (undefined1 *)0x0" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);\n      }" ({ "{") (expression_statement "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);" (assignment_expression "param_2 = *param_1 + (int)(puVar11 + (int)param_1[6])" (identifier "param_2") (= "=") (binary_expression "*param_1 + (int)(puVar11 + (int)param_1[6])" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (cast_expression "(int)(puVar11 + (int)param_1[6])" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(puVar11 + (int)param_1[6])" (( "(") (binary_expression "puVar11 + (int)param_1[6]" (identifier "puVar11") (+ "+") (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")))) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" (else "else") (compound_statement "{\n        param_2 = local_6c;\n        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }\n      }" ({ "{") (expression_statement "param_2 = local_6c;" (assignment_expression "param_2 = local_6c" (identifier "param_2") (= "=") (identifier "local_6c")) (; ";")) (if_statement "if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" (if "if") (parenthesized_expression "((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11))" (( "(") (binary_expression "(0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" (parenthesized_expression "(0 < (int)param_1[0x14])" (( "(") (binary_expression "0 < (int)param_1[0x14]" (number_literal "0") (< "<") (cast_expression "(int)param_1[0x14]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0x14]" (identifier "param_1") ([ "[") (number_literal "0x14") (] "]")))) () ")")) (&& "&&") (parenthesized_expression "(puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)" (( "(") (comma_expression "puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11" (assignment_expression "puVar3 = local_6c" (identifier "puVar3") (= "=") (identifier "local_6c")) (, ",") (binary_expression "0 < (int)puVar10 - (int)puVar11" (number_literal "0") (< "<") (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (- "-") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))))) () ")"))) () ")")) (compound_statement "{\n          iVar2 = 0;\n          do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);\n        }" ({ "{") (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          } while ((int)puVar10 - (int)puVar11 != iVar2);" (do "do") (compound_statement "{\n            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];\n            (param_1[1] + iVar2)[(int)puVar11] = uVar1;\n            *puVar3 = uVar1;\n            iVar2 = iVar2 + 1;\n            if ((int)param_1[0x14] <= iVar2) break;\n            puVar3 = puVar3 + 1;\n          }" ({ "{") (expression_statement "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];" (assignment_expression "uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" (identifier "uVar1") (= "=") (subscript_expression "param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]]" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) ([ "[") (subscript_expression "(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]" (call_expression "(byte)(*param_1 + iVar2 + (int)puVar11)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*param_1 + iVar2 + (int)puVar11)" (( "(") (binary_expression "*param_1 + iVar2 + (int)puVar11" (binary_expression "*param_1 + iVar2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (identifier "iVar2")) (+ "+") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))) () ")"))) ([ "[") (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (] "]")) (] "]"))) (; ";")) (expression_statement "(param_1[1] + iVar2)[(int)puVar11] = uVar1;" (assignment_expression "(param_1[1] + iVar2)[(int)puVar11] = uVar1" (subscript_expression "(param_1[1] + iVar2)[(int)puVar11]" (parenthesized_expression "(param_1[1] + iVar2)" (( "(") (binary_expression "param_1[1] + iVar2" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (identifier "iVar2")) () ")")) ([ "[") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (] "]")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((int)param_1[0x14] <= iVar2) break;" (if "if") (parenthesized_expression "((int)param_1[0x14] <= iVar2)" (( "(") (binary_expression "(int)param_1[0x14] <= iVar2" (cast_expression "(int)param_1[0x14]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0x14]" (identifier "param_1") ([ "[") (number_literal "0x14") (] "]"))) (<= "<=") (identifier "iVar2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar3 = puVar3 + 1;" (assignment_expression "puVar3 = puVar3 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)puVar10 - (int)puVar11 != iVar2)" (( "(") (binary_expression "(int)puVar10 - (int)puVar11 != iVar2" (binary_expression "(int)puVar10 - (int)puVar11" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (- "-") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))) (!= "!=") (identifier "iVar2")) () ")")) (; ";")) (} "}"))) (} "}")))) (expression_statement "ppuVar7 = &local_78;" (assignment_expression "ppuVar7 = &local_78" (identifier "ppuVar7") (= "=") (pointer_expression "&local_78" (& "&") (identifier "local_78"))) (; ";")) (expression_statement "iVar2 = rpl_mbrtowc();" (assignment_expression "iVar2 = rpl_mbrtowc()" (identifier "iVar2") (= "=") (call_expression "rpl_mbrtowc()" (identifier "rpl_mbrtowc") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar2 - 1U < 0xfffffffe) {\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }\n      else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" (if "if") (parenthesized_expression "(iVar2 - 1U < 0xfffffffe)" (( "(") (binary_expression "iVar2 - 1U < 0xfffffffe" (binary_expression "iVar2 - 1U" (identifier "iVar2") (- "-") (number_literal "1U")) (< "<") (number_literal "0xfffffffe")) () ")")) (compound_statement "{\n        if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }\n      }" ({ "{") (if_statement "if (iVar2 == -2) {\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" (if "if") (parenthesized_expression "(iVar2 == -2)" (( "(") (binary_expression "iVar2 == -2" (identifier "iVar2") (== "==") (number_literal "-2")) () ")")) (compound_statement "{\n          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;\n          param_1[4] = local_74;\n          param_1[5] = local_70;\n          break;\n        }" ({ "{") (if_statement "if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;" (if "if") (parenthesized_expression "((int)param_1[0xc] <= (int)param_1[9])" (( "(") (binary_expression "(int)param_1[0xc] <= (int)param_1[9]" (cast_expression "(int)param_1[0xc]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]"))) (<= "<=") (cast_expression "(int)param_1[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")))) () ")")) (goto_statement "goto LAB_0002c26c;" (goto "goto") (statement_identifier "LAB_0002c26c") (; ";"))) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "local_74")) (; ";")) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "local_70")) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}")) (else_clause "else {\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" (else "else") (compound_statement "{\nLAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];\n        if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }\n        param_1[4] = local_74;\n        param_1[5] = local_70;\n        iVar2 = 1;\n      }" ({ "{") (labeled_statement "LAB_0002c26c:\n        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" (statement_identifier "LAB_0002c26c") (: ":") (expression_statement "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" (identifier "local_78") (= "=") (cast_expression "(undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]]" (call_expression "(uint)(byte)(*param_1 + (int)puVar11)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "(*param_1 + (int)puVar11)" (( "(") (binary_expression "*param_1 + (int)puVar11" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))) () ")"))) ([ "[") (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (] "]")))) (; ";"))) (if_statement "if (param_1[0x10] != (undefined1 *)0x0) {\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" (if "if") (parenthesized_expression "(param_1[0x10] != (undefined1 *)0x0)" (( "(") (binary_expression "param_1[0x10] != (undefined1 *)0x0" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];\n        }" ({ "{") (expression_statement "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];" (assignment_expression "local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" (identifier "local_78") (= "=") (cast_expression "(undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (cast_expression "(uint)(byte)local_78[(int)param_1[0x10]]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)local_78[(int)param_1[0x10]]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "local_78[(int)param_1[0x10]]" (identifier "local_78") ([ "[") (cast_expression "(int)param_1[0x10]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (] "]")))))) (; ";")) (} "}"))) (expression_statement "param_1[4] = local_74;" (assignment_expression "param_1[4] = local_74" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "local_74")) (; ";")) (expression_statement "param_1[5] = local_70;" (assignment_expression "param_1[5] = local_70" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "local_70")) (; ";")) (expression_statement "iVar2 = 1;" (assignment_expression "iVar2 = 1" (identifier "iVar2") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "puVar4 = puVar11 + 1;" (assignment_expression "puVar4 = puVar11 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;" (assignment_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78" (pointer_expression "*(undefined1 **)(param_1[2] + (int)puVar11 * 4)" (* "*") (cast_expression "(undefined1 **)(param_1[2] + (int)puVar11 * 4)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1[2] + (int)puVar11 * 4)" (( "(") (binary_expression "param_1[2] + (int)puVar11 * 4" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "local_78")) (; ";")) (expression_statement "puVar3 = puVar11 + iVar2;" (assignment_expression "puVar3 = puVar11 + iVar2" (identifier "puVar3") (= "=") (binary_expression "puVar11 + iVar2" (identifier "puVar11") (+ "+") (identifier "iVar2"))) (; ";")) (expression_statement "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);" (assignment_expression "ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3)" (identifier "ppuVar7") (= "=") (cast_expression "(undefined1 **)(uint)((int)puVar4 < (int)puVar3)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (call_expression "(uint)((int)puVar4 < (int)puVar3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)puVar4 < (int)puVar3)" (( "(") (binary_expression "(int)puVar4 < (int)puVar3" (cast_expression "(int)puVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar4")) (< "<") (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3"))) () ")"))))) (; ";")) (expression_statement "param_2 = local_78;" (assignment_expression "param_2 = local_78" (identifier "param_2") (= "=") (identifier "local_78")) (; ";")) (expression_statement "puVar11 = puVar4;" (assignment_expression "puVar11 = puVar4" (identifier "puVar11") (= "=") (identifier "puVar4")) (; ";")) (if_statement "if (ppuVar7 != (undefined1 **)0x0) {\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" (if "if") (parenthesized_expression "(ppuVar7 != (undefined1 **)0x0)" (( "(") (binary_expression "ppuVar7 != (undefined1 **)0x0" (identifier "ppuVar7") (!= "!=") (cast_expression "(undefined1 **)0x0" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);\n      }" ({ "{") (do_statement "do {\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        } while (puVar3 != puVar4);" (do "do") (compound_statement "{\n          param_2 = (undefined1 *)((int)puVar4 * 4);\n          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);\n          puVar4 = puVar4 + 1;\n          *ppuVar7 = (undefined1 *)0xffffffff;\n          puVar11 = puVar3;\n        }" ({ "{") (expression_statement "param_2 = (undefined1 *)((int)puVar4 * 4);" (assignment_expression "param_2 = (undefined1 *)((int)puVar4 * 4)" (identifier "param_2") (= "=") (cast_expression "(undefined1 *)((int)puVar4 * 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar4 * 4)" (( "(") (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar4")) (* "*") (number_literal "4")) () ")")))) (; ";")) (expression_statement "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);" (assignment_expression "ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2])" (identifier "ppuVar7") (= "=") (cast_expression "(undefined1 **)(param_2 + (int)param_1[2])" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + (int)param_1[2])" (( "(") (binary_expression "param_2 + (int)param_1[2]" (identifier "param_2") (+ "+") (cast_expression "(int)param_1[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) () ")")))) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*ppuVar7 = (undefined1 *)0xffffffff;" (assignment_expression "*ppuVar7 = (undefined1 *)0xffffffff" (pointer_expression "*ppuVar7" (* "*") (identifier "ppuVar7")) (= "=") (cast_expression "(undefined1 *)0xffffffff" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xffffffff"))) (; ";")) (expression_statement "puVar11 = puVar3;" (assignment_expression "puVar11 = puVar3" (identifier "puVar11") (= "=") (identifier "puVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar3 != puVar4)" (( "(") (binary_expression "puVar3 != puVar4" (identifier "puVar3") (!= "!=") (identifier "puVar4")) () ")")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "((int)puVar11 < (int)puVar10)" (( "(") (binary_expression "(int)puVar11 < (int)puVar10" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (< "<") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10"))) () ")")) (; ";")) (} "}"))) (expression_statement "param_1[7] = puVar11;" (assignment_expression "param_1[7] = puVar11" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "puVar11")) (; ";")) (expression_statement "param_1[8] = puVar11;" (assignment_expression "param_1[8] = puVar11" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "puVar11")) (; ";")) (if_statement "if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" (if "if") (parenthesized_expression "(local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0)" (( "(") (binary_expression "local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0" (identifier "local_2c") (== "==") (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" (* "*") (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_000554f0")))) () ")")) (compound_statement "{\n    return *(undefined1 **)PTR___stack_chk_guard_000554f0;\n  }" ({ "{") (return_statement "return *(undefined1 **)PTR___stack_chk_guard_000554f0;" (return "return") (pointer_expression "*(undefined1 **)PTR___stack_chk_guard_000554f0" (* "*") (cast_expression "(undefined1 **)PTR___stack_chk_guard_000554f0" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_000554f0"))) (; ";")) (} "}"))) (expression_statement "puVar12 = PTR___stack_chk_fail_000554d4;" (assignment_expression "puVar12 = PTR___stack_chk_fail_000554d4" (identifier "puVar12") (= "=") (identifier "PTR___stack_chk_fail_000554d4")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000554d4)();" (call_expression "(*(code *)PTR___stack_chk_fail_000554d4)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000554d4)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000554d4" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000554d4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000554d4"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" (identifier "puVar10") (= "=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if ((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" (if "if") (parenthesized_expression "((param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0))" (( "(") (binary_expression "(param_2 != (undefined1 *)0x0) &&\n     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" (parenthesized_expression "(param_2 != (undefined1 *)0x0)" (( "(") (binary_expression "param_2 != (undefined1 *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)" (( "(") (comma_expression "puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0" (assignment_expression "puVar10 = *(undefined1 **)(param_2 + 4)" (identifier "puVar10") (= "=") (pointer_expression "*(undefined1 **)(param_2 + 4)" (* "*") (cast_expression "(undefined1 **)(param_2 + 4)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (, ",") (binary_expression "puVar10 != (undefined1 *)0x0" (identifier "puVar10") (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\n    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }\n    puVar10 = ppuVar7[1];\n    pcVar13 = *(code **)(puVar12 + 0x29124);\n    if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }\n  }" ({ "{") (if_statement "if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" (if "if") (parenthesized_expression "((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2))" (( "(") (binary_expression "(int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)" (cast_expression "(int)*ppuVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*ppuVar7" (* "*") (identifier "ppuVar7"))) (< "<") (cast_expression "(int)(ppuVar7[1] + (int)puVar10 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(ppuVar7[1] + (int)puVar10 * 2)" (( "(") (binary_expression "ppuVar7[1] + (int)puVar10 * 2" (subscript_expression "ppuVar7[1]" (identifier "ppuVar7") ([ "[") (number_literal "1") (] "]")) (+ "+") (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (* "*") (number_literal "2"))) () ")")))) () ")")) (compound_statement "{\n      puVar10 = *ppuVar7 + (int)puVar10;\n      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);\n      if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }\n      ppuVar7[2] = puVar11;\n      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);\n    }" ({ "{") (expression_statement "puVar10 = *ppuVar7 + (int)puVar10;" (assignment_expression "puVar10 = *ppuVar7 + (int)puVar10" (identifier "puVar10") (= "=") (binary_expression "*ppuVar7 + (int)puVar10" (pointer_expression "*ppuVar7" (* "*") (identifier "ppuVar7")) (+ "+") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")))) (; ";")) (expression_statement "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);" (assignment_expression "puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" (identifier "puVar11") (= "=") (cast_expression "(undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8)" (parenthesized_expression "(**(code **)(puVar12 + 0x290a8))" (( "(") (pointer_expression "**(code **)(puVar12 + 0x290a8)" (* "*") (pointer_expression "*(code **)(puVar12 + 0x290a8)" (* "*") (cast_expression "(code **)(puVar12 + 0x290a8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar12 + 0x290a8)" (( "(") (binary_expression "puVar12 + 0x290a8" (identifier "puVar12") (+ "+") (number_literal "0x290a8")) () ")"))))) () ")")) (argument_list "(ppuVar7[2],(int)puVar10 * 8)" (( "(") (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (, ",") (binary_expression "(int)puVar10 * 8" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (* "*") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (puVar11 == (undefined1 *)0x0) {\n        return (undefined1 *)0xc;\n      }" (if "if") (parenthesized_expression "(puVar11 == (undefined1 *)0x0)" (( "(") (binary_expression "puVar11 == (undefined1 *)0x0" (identifier "puVar11") (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return (undefined1 *)0xc;\n      }" ({ "{") (return_statement "return (undefined1 *)0xc;" (return "return") (cast_expression "(undefined1 *)0xc" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0xc")) (; ";")) (} "}"))) (expression_statement "ppuVar7[2] = puVar11;" (assignment_expression "ppuVar7[2] = puVar11" (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "puVar11")) (; ";")) (expression_statement "*ppuVar7 = (undefined1 *)((int)puVar10 * 2);" (assignment_expression "*ppuVar7 = (undefined1 *)((int)puVar10 * 2)" (pointer_expression "*ppuVar7" (* "*") (identifier "ppuVar7")) (= "=") (cast_expression "(undefined1 *)((int)puVar10 * 2)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar10 * 2)" (( "(") (binary_expression "(int)puVar10 * 2" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (* "*") (number_literal "2")) () ")")))) (; ";")) (} "}"))) (expression_statement "puVar10 = ppuVar7[1];" (assignment_expression "puVar10 = ppuVar7[1]" (identifier "puVar10") (= "=") (subscript_expression "ppuVar7[1]" (identifier "ppuVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "pcVar13 = *(code **)(puVar12 + 0x29124);" (assignment_expression "pcVar13 = *(code **)(puVar12 + 0x29124)" (identifier "pcVar13") (= "=") (pointer_expression "*(code **)(puVar12 + 0x29124)" (* "*") (cast_expression "(code **)(puVar12 + 0x29124)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar12 + 0x29124)" (( "(") (binary_expression "puVar12 + 0x29124" (identifier "puVar12") (+ "+") (number_literal "0x29124")) () ")"))))) (; ";")) (if_statement "if (puVar10 == (undefined1 *)0x0) {\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }\n    else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" (if "if") (parenthesized_expression "(puVar10 == (undefined1 *)0x0)" (( "(") (binary_expression "puVar10 == (undefined1 *)0x0" (identifier "puVar10") (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      ppuVar7[1] = *(undefined1 **)(param_2 + 4);\n      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);\n      puVar10 = (undefined1 *)0x0;\n    }" ({ "{") (expression_statement "ppuVar7[1] = *(undefined1 **)(param_2 + 4);" (assignment_expression "ppuVar7[1] = *(undefined1 **)(param_2 + 4)" (subscript_expression "ppuVar7[1]" (identifier "ppuVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (pointer_expression "*(undefined1 **)(param_2 + 4)" (* "*") (cast_expression "(undefined1 **)(param_2 + 4)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);" (call_expression "(*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" (parenthesized_expression "(*pcVar13)" (( "(") (pointer_expression "*pcVar13" (* "*") (identifier "pcVar13")) () ")")) (argument_list "(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2)" (( "(") (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(param_2 + 8)" (* "*") (cast_expression "(undefined4 *)(param_2 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (, ",") (binary_expression "*(int *)(param_2 + 4) << 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" (identifier "puVar10") (= "=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" (else "else") (compound_statement "{\n      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;\n      iVar2 = *(int *)(param_2 + 4) + -1;\n      puVar10 = puVar10 + -1;\n      while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }\n      puVar3 = ppuVar7[1];\n      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;\n      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);\n      puVar4 = puVar3 + -1;\n      if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }\n    }" ({ "{") (expression_statement "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;" (assignment_expression "puVar11 = puVar10 + *(int *)(param_2 + 4) * 2" (identifier "puVar11") (= "=") (binary_expression "puVar10 + *(int *)(param_2 + 4) * 2" (identifier "puVar10") (+ "+") (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "2")))) (; ";")) (expression_statement "iVar2 = *(int *)(param_2 + 4) + -1;" (assignment_expression "iVar2 = *(int *)(param_2 + 4) + -1" (identifier "iVar2") (= "=") (binary_expression "*(int *)(param_2 + 4) + -1" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (while_statement "while (-1 < iVar2) {\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" (while "while") (parenthesized_expression "(-1 < iVar2)" (( "(") (binary_expression "-1 < iVar2" (number_literal "-1") (< "<") (identifier "iVar2")) () ")")) (compound_statement "{\n        if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }\n        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);\n        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);\n        if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }\n      }" ({ "{") (if_statement "if ((int)puVar10 < 0) {\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" (if "if") (parenthesized_expression "((int)puVar10 < 0)" (( "(") (binary_expression "(int)puVar10 < 0" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          puVar11 = puVar11 + -(iVar2 + 1);\n          (**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);\n          break;\n        }" ({ "{") (expression_statement "puVar11 = puVar11 + -(iVar2 + 1);" (assignment_expression "puVar11 = puVar11 + -(iVar2 + 1)" (identifier "puVar11") (= "=") (binary_expression "puVar11 + -(iVar2 + 1)" (identifier "puVar11") (+ "+") (unary_expression "-(iVar2 + 1)" (- "-") (parenthesized_expression "(iVar2 + 1)" (( "(") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);" (call_expression "(**(code **)(puVar12 + 0x29124))\n                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" (( "(") (pointer_expression "**(code **)(puVar12 + 0x29124)" (* "*") (pointer_expression "*(code **)(puVar12 + 0x29124)" (* "*") (cast_expression "(code **)(puVar12 + 0x29124)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar12 + 0x29124)" (( "(") (binary_expression "puVar12 + 0x29124" (identifier "puVar12") (+ "+") (number_literal "0x29124")) () ")"))))) () ")")) (argument_list "(ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4)" (( "(") (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (* "*") (number_literal "4"))) (, ",") (pointer_expression "*(undefined4 *)(param_2 + 8)" (* "*") (cast_expression "(undefined4 *)(param_2 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (, ",") (binary_expression "(iVar2 + 1) * 4" (parenthesized_expression "(iVar2 + 1)" (( "(") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);" (assignment_expression "iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar10 * 4)" (* "*") (cast_expression "(int *)(ppuVar7[2] + (int)puVar10 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(ppuVar7[2] + (int)puVar10 * 4)" (( "(") (binary_expression "ppuVar7[2] + (int)puVar10 * 4" (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "(int)puVar10 * 4" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);" (assignment_expression "iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 8) + iVar2 * 4)" (( "(") (binary_expression "*(int *)(param_2 + 8) + iVar2 * 4" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "iVar2 * 4" (identifier "iVar2") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (iVar5 == iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }\n        else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" (if "if") (parenthesized_expression "(iVar5 == iVar6)" (( "(") (binary_expression "iVar5 == iVar6" (identifier "iVar5") (== "==") (identifier "iVar6")) () ")")) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar10 = puVar10 + -1;\n        }" ({ "{") (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" (else "else") (if_statement "if (iVar5 < iVar6) {\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }\n        else {\n          puVar10 = puVar10 + -1;\n        }" (if "if") (parenthesized_expression "(iVar5 < iVar6)" (( "(") (binary_expression "iVar5 < iVar6" (identifier "iVar5") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n          iVar2 = iVar2 + -1;\n          puVar11 = puVar11 + -1;\n          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;\n        }" ({ "{") (expression_statement "iVar2 = iVar2 + -1;" (assignment_expression "iVar2 = iVar2 + -1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar11 = puVar11 + -1;" (assignment_expression "puVar11 = puVar11 + -1" (identifier "puVar11") (= "=") (binary_expression "puVar11 + -1" (identifier "puVar11") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;" (assignment_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6" (pointer_expression "*(int *)(ppuVar7[2] + (int)puVar11 * 4)" (* "*") (cast_expression "(int *)(ppuVar7[2] + (int)puVar11 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(ppuVar7[2] + (int)puVar11 * 4)" (( "(") (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar6")) (; ";")) (} "}")) (else_clause "else {\n          puVar10 = puVar10 + -1;\n        }" (else "else") (compound_statement "{\n          puVar10 = puVar10 + -1;\n        }" ({ "{") (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (} "}")))))) (} "}"))) (expression_statement "puVar3 = ppuVar7[1];" (assignment_expression "puVar3 = ppuVar7[1]" (identifier "puVar3") (= "=") (subscript_expression "ppuVar7[1]" (identifier "ppuVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;" (assignment_expression "puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1" (identifier "puVar9") (= "=") (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2 + -1" (binary_expression "puVar3 + *(int *)(param_2 + 4) * 2" (identifier "puVar3") (+ "+") (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "2"))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);" (assignment_expression "puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" (identifier "puVar10") (= "=") (binary_expression "puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11)" (identifier "puVar3") (+ "+") (parenthesized_expression "(*(int *)(param_2 + 4) * 2 - (int)puVar11)" (( "(") (binary_expression "*(int *)(param_2 + 4) * 2 - (int)puVar11" (binary_expression "*(int *)(param_2 + 4) * 2" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "2")) (- "-") (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11"))) () ")")))) (; ";")) (expression_statement "puVar4 = puVar3 + -1;" (assignment_expression "puVar4 = puVar3 + -1" (identifier "puVar4") (= "=") (binary_expression "puVar3 + -1" (identifier "puVar3") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (puVar10 != (undefined1 *)0x0) {\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" (if "if") (parenthesized_expression "(puVar10 != (undefined1 *)0x0)" (( "(") (binary_expression "puVar10 != (undefined1 *)0x0" (identifier "puVar10") (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        ppuVar7[1] = puVar3 + (int)puVar10;\n        do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);\n        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;\n        puVar10 = (undefined1 *)0x0;\n      }" ({ "{") (expression_statement "ppuVar7[1] = puVar3 + (int)puVar10;" (assignment_expression "ppuVar7[1] = puVar3 + (int)puVar10" (subscript_expression "ppuVar7[1]" (identifier "ppuVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "puVar3 + (int)puVar10" (identifier "puVar3") (+ "+") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")))) (; ";")) (do_statement "do {\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        } while (-1 < (int)puVar4);" (do "do") (compound_statement "{\n          while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }\n          puVar4 = puVar4 + -1;\n          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);\n        }" ({ "{") (while_statement "while( true ) {\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            puVar3 = ppuVar7[2];\n            iVar2 = (int)puVar9 * 4;\n            iVar6 = (int)puVar4 * 4;\n            puVar8 = puVar4 + (int)puVar10;\n            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;\n            puVar9 = puVar9 + -1;\n            puVar8 = puVar10 + -1;\n            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);\n            puVar10 = puVar8;\n            if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }\n          }" ({ "{") (expression_statement "puVar3 = ppuVar7[2];" (assignment_expression "puVar3 = ppuVar7[2]" (identifier "puVar3") (= "=") (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar2 = (int)puVar9 * 4;" (assignment_expression "iVar2 = (int)puVar9 * 4" (identifier "iVar2") (= "=") (binary_expression "(int)puVar9 * 4" (cast_expression "(int)puVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar9")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar6 = (int)puVar4 * 4;" (assignment_expression "iVar6 = (int)puVar4 * 4" (identifier "iVar6") (= "=") (binary_expression "(int)puVar4 * 4" (cast_expression "(int)puVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar4")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "puVar8 = puVar4 + (int)puVar10;" (assignment_expression "puVar8 = puVar4 + (int)puVar10" (identifier "puVar8") (= "=") (binary_expression "puVar4 + (int)puVar10" (identifier "puVar4") (+ "+") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")))) (; ";")) (if_statement "if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;" (if "if") (parenthesized_expression "(*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6))" (( "(") (binary_expression "*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + iVar2)" (* "*") (cast_expression "(int *)(puVar3 + iVar2)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + iVar2)" (( "(") (binary_expression "puVar3 + iVar2" (identifier "puVar3") (+ "+") (identifier "iVar2")) () ")")))) (<= "<=") (pointer_expression "*(int *)(puVar3 + iVar6)" (* "*") (cast_expression "(int *)(puVar3 + iVar6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + iVar6)" (( "(") (binary_expression "puVar3 + iVar6" (identifier "puVar3") (+ "+") (identifier "iVar6")) () ")"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -1" (identifier "puVar9") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar8 = puVar10 + -1;" (assignment_expression "puVar8 = puVar10 + -1" (identifier "puVar8") (= "=") (binary_expression "puVar10 + -1" (identifier "puVar10") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);" (assignment_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2)" (pointer_expression "*(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" (* "*") (cast_expression "(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + (int)(puVar4 + (int)puVar10) * 4)" (( "(") (binary_expression "puVar3 + (int)(puVar4 + (int)puVar10) * 4" (identifier "puVar3") (+ "+") (binary_expression "(int)(puVar4 + (int)puVar10) * 4" (cast_expression "(int)(puVar4 + (int)puVar10)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(puVar4 + (int)puVar10)" (( "(") (binary_expression "puVar4 + (int)puVar10" (identifier "puVar4") (+ "+") (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10"))) () ")"))) (* "*") (number_literal "4"))) () ")")))) (= "=") (pointer_expression "*(int *)(puVar3 + iVar2)" (* "*") (cast_expression "(int *)(puVar3 + iVar2)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + iVar2)" (( "(") (binary_expression "puVar3 + iVar2" (identifier "puVar3") (+ "+") (identifier "iVar2")) () ")"))))) (; ";")) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" (identifier "puVar10") (= "=") (identifier "puVar8")) (; ";")) (if_statement "if (puVar8 == (undefined1 *)0x0) {\n              return (undefined1 *)0x0;\n            }" (if "if") (parenthesized_expression "(puVar8 == (undefined1 *)0x0)" (( "(") (binary_expression "puVar8 == (undefined1 *)0x0" (identifier "puVar8") (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n              return (undefined1 *)0x0;\n            }" ({ "{") (return_statement "return (undefined1 *)0x0;" (return "return") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}"))) (expression_statement "puVar4 = puVar4 + -1;" (assignment_expression "puVar4 = puVar4 + -1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + -1" (identifier "puVar4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);" (assignment_expression "*(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6)" (pointer_expression "*(int *)(puVar3 + (int)puVar8 * 4)" (* "*") (cast_expression "(int *)(puVar3 + (int)puVar8 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + (int)puVar8 * 4)" (( "(") (binary_expression "puVar3 + (int)puVar8 * 4" (identifier "puVar3") (+ "+") (binary_expression "(int)puVar8 * 4" (cast_expression "(int)puVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar8")) (* "*") (number_literal "4"))) () ")")))) (= "=") (pointer_expression "*(int *)(puVar3 + iVar6)" (* "*") (cast_expression "(int *)(puVar3 + iVar6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + iVar6)" (( "(") (binary_expression "puVar3 + iVar6" (identifier "puVar3") (+ "+") (identifier "iVar6")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(-1 < (int)puVar4)" (( "(") (binary_expression "-1 < (int)puVar4" (number_literal "-1") (< "<") (cast_expression "(int)puVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar4"))) () ")")) (; ";")) (expression_statement "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)\n        ;" (call_expression "(**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" (parenthesized_expression "(**(code **)(puVar12 + 0x29124))" (( "(") (pointer_expression "**(code **)(puVar12 + 0x29124)" (* "*") (pointer_expression "*(code **)(puVar12 + 0x29124)" (* "*") (cast_expression "(code **)(puVar12 + 0x29124)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar12 + 0x29124)" (( "(") (binary_expression "puVar12 + 0x29124" (identifier "puVar12") (+ "+") (number_literal "0x29124")) () ")"))))) () ")")) (argument_list "(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)" (( "(") (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (, ",") (binary_expression "ppuVar7[2] + (int)puVar11 * 4" (subscript_expression "ppuVar7[2]" (identifier "ppuVar7") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "(int)puVar11 * 4" (cast_expression "(int)puVar11" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar11")) (* "*") (number_literal "4"))) (, ",") (binary_expression "(int)puVar10 << 2" (cast_expression "(int)puVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar10")) (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "puVar10 = (undefined1 *)0x0;" (assignment_expression "puVar10 = (undefined1 *)0x0" (identifier "puVar10") (= "=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}"))) (} "}")))) (} "}"))) (return_statement "return puVar10;" (return "return") (identifier "puVar10") (; ";")) (} "}")))

void function_1(type_1 *pstr)

{
  type_2 uVar1;
  int var_10;
  int var_8;
  type_2 *var_17;
  type_3 var_16;
  type_3 *var_13;
  size_t var_3;
  int var_7;
  type_3 var_15;
  type_3 *pwVar10;
  type_3 *pwVar11;
  type_1 *var_9;
  type_2 *var_18;
  type_2 *var_11;
  size_t var_5;
  type_2 *var_19;
  int var_2;
  type_2 *var_4;
  type_2 *var_14;
  int var_1;
  type_4 *var_12;
  type_5 *pcVar21;
  type_6 wc;
  type_7 prev_st;
  type_2 buf [64];
  
  var_10 = *(int *)PTR___stack_chk_guard_000554f0;
  var_2 = pstr->len;
  if (pstr->bufs_len <= pstr->len) {
    var_2 = pstr->bufs_len;
  }
  var_1 = pstr->valid_len;
  var_9 = pstr;
  if (var_1 < var_2) {
    do {
      prev_st.__count = (pstr->cur_state).__count;
      prev_st.__value = (pstr->cur_state).__value;
      var_5 = var_2 - var_1;
      if (pstr->trans == (type_2 *)0x0) {
        var_11 = pstr->raw_mbs + var_1 + pstr->raw_mbs_idx;
      }
      else {
        var_11 = buf;
        if ((0 < pstr->mb_cur_max) && (var_4 = buf, 0 < (int)var_5)) {
          var_3 = 0;
          do {
            uVar1 = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + var_1 + var_3]];
            pstr->mbs[var_1 + var_3] = uVar1;
            *var_4 = uVar1;
            var_3 = var_3 + 1;
            if (pstr->mb_cur_max <= (int)var_3) break;
            var_4 = var_4 + 1;
          } while (var_5 != var_3);
        }
      }
      var_9 = (type_1 *)&wc;
      var_5 = var_6(&wc,(char *)var_11,var_5,&pstr->cur_state);
      if (var_5 - 1 < 0xfffffffe) {
        if (var_5 == 0xfffffffe) {
          if (pstr->len <= pstr->bufs_len) goto LAB_0002c26c;
          (pstr->cur_state).__count = prev_st.__count;
          (pstr->cur_state).__value = prev_st.__value;
          break;
        }
      }
      else {
LAB_0002c26c:
        wc = (type_6)pstr->raw_mbs[pstr->raw_mbs_idx + var_1];
        if (pstr->trans != (type_2 *)0x0) {
          wc = (type_6)pstr->trans[wc];
        }
        (pstr->cur_state).__count = prev_st.__count;
        (pstr->cur_state).__value = prev_st.__value;
        var_5 = 1;
      }
      var_7 = var_1 + 1;
      pstr->wcs[var_1] = wc;
      var_8 = var_1 + var_5;
      var_9 = (type_1 *)(uint)(var_7 < var_8);
      var_11 = (type_2 *)wc;
      var_1 = var_7;
      if (var_9 != (type_1 *)0x0) {
        do {
          var_11 = (type_2 *)(var_7 * 4);
          var_9 = (type_1 *)(pstr->wcs + var_7);
          var_7 = var_7 + 1;
          var_9->raw_mbs = (type_2 *)0xffffffff;
          var_1 = var_8;
        } while (var_8 != var_7);
      }
    } while (var_1 < var_2);
  }
  pstr->valid_len = var_1;
  pstr->valid_raw_len = var_1;
  if (var_10 == *(int *)PTR___stack_chk_guard_000554f0) {
    return;
  }
  var_12 = PTR___stack_chk_fail_000554d4;
  (*(type_5 *)PTR___stack_chk_fail_000554d4)();
  if ((var_11 != (type_2 *)0x0) && (var_2 = *(int *)(var_11 + 4), var_2 != 0)) {
    if ((int)var_9->raw_mbs < (int)(var_9->mbs + var_2 * 2)) {
      var_4 = var_9->raw_mbs + var_2;
      var_13 = (type_3 *)(**(type_5 **)(var_12 + 0x290a8))(var_9->wcs,(int)var_4 * 8);
      if (var_13 == (type_3 *)0x0) {
        return;
      }
      var_9->wcs = var_13;
      var_9->raw_mbs = (type_2 *)((int)var_4 * 2);
    }
    var_4 = var_9->mbs;
    pcVar21 = *(type_5 **)(var_12 + 0x29124);
    if (var_4 == (type_2 *)0x0) {
      var_9->mbs = *(type_2 **)(var_11 + 4);
      (*pcVar21)(var_9->wcs,*(type_8 *)(var_11 + 8),*(int *)(var_11 + 4) << 2);
    }
    else {
      var_14 = var_4 + *(int *)(var_11 + 4) * 2;
      var_2 = *(int *)(var_11 + 4) + -1;
      var_4 = var_4 + -1;
      while (-1 < var_2) {
        if ((int)var_4 < 0) {
          var_14 = var_14 + -(var_2 + 1);
          (**(type_5 **)(var_12 + 0x29124))
                    (var_9->wcs + (int)var_14,*(type_8 *)(var_11 + 8),(var_2 + 1) * 4);
          break;
        }
        var_15 = var_9->wcs[(int)var_4];
        var_16 = *(type_3 *)(*(int *)(var_11 + 8) + var_2 * 4);
        if (var_15 == var_16) {
          var_2 = var_2 + -1;
          var_4 = var_4 + -1;
        }
        else if ((int)var_15 < (int)var_16) {
          var_2 = var_2 + -1;
          var_14 = var_14 + -1;
          var_9->wcs[(int)var_14] = var_16;
        }
        else {
          var_4 = var_4 + -1;
        }
      }
      var_17 = var_9->mbs;
      var_19 = var_17 + *(int *)(var_11 + 4) * 2 + -1;
      var_4 = var_17 + (*(int *)(var_11 + 4) * 2 - (int)var_14);
      var_18 = var_17 + -1;
      if (var_4 != (type_2 *)0x0) {
        var_9->mbs = var_17 + (int)var_4;
        do {
          while( true ) {
            var_13 = var_9->wcs;
            pwVar10 = var_13 + (int)var_19;
            pwVar11 = var_13 + (int)var_18;
            var_17 = var_18 + (int)var_4;
            if ((int)*pwVar10 <= (int)*pwVar11) break;
            var_19 = var_19 + -1;
            var_17 = var_4 + -1;
            var_13[(int)(var_18 + (int)var_4)] = *pwVar10;
            var_4 = var_17;
            if (var_17 == (type_2 *)0x0) {
              return;
            }
          }
          var_18 = var_18 + -1;
          var_13[(int)var_17] = *pwVar11;
        } while (-1 < (int)var_18);
        (**(type_5 **)(var_12 + 0x29124))(var_9->wcs,var_9->wcs + (int)var_14,(int)var_4 << 2)
        ;
      }
    }
  }
  return;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (pointer_declarator declarator: (identifier)))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (number_literal) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (subscript_expression argument: (identifier) index: (number_literal)) index: (subscript_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) index: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) index: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (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))) (break_statement)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (call_expression function: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (identifier))) arguments: (argument_list (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) index: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))))))))) (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: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (number_literal)))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) consequence: (compound_statement (return_statement (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (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))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (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))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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))))) (expression_statement (assignment_expression left: (identifier) right: (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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) body: (compound_statement (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 (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (unary_expression argument: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (break_statement))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (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: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (do_statement body: (compound_statement (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_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: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_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: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))))))) (return_statement (identifier)))))

undefined1 * MASKED(undefined1 **param_1,undefined1 *param_2)

{
  undefined1 uVar1;
  int iVar2;
  undefined1 *puVar3;
  undefined1 *puVar4;
  int iVar5;
  int iVar6;
  undefined1 **ppuVar7;
  undefined1 *puVar8;
  undefined1 *puVar9;
  undefined1 *puVar10;
  undefined1 *puVar11;
  undefined *puVar12;
  code *pcVar13;
  undefined1 *local_78;
  undefined1 *local_74;
  undefined1 *local_70;
  undefined1 local_6c [64];
  undefined1 *local_2c;
  
  local_2c = *(undefined1 **)PTR___stack_chk_guard_000554f0;
  puVar10 = param_1[0xc];
  if ((int)param_1[9] <= (int)param_1[0xc]) {
    puVar10 = param_1[9];
  }
  puVar11 = param_1[7];
  ppuVar7 = param_1;
  if ((int)puVar11 < (int)puVar10) {
    do {
      local_74 = param_1[4];
      local_70 = param_1[5];
      if (param_1[0x10] == (undefined1 *)0x0) {
        param_2 = *param_1 + (int)(puVar11 + (int)param_1[6]);
      }
      else {
        param_2 = local_6c;
        if ((0 < (int)param_1[0x14]) && (puVar3 = local_6c, 0 < (int)puVar10 - (int)puVar11)) {
          iVar2 = 0;
          do {
            uVar1 = param_1[0x10][(byte)(*param_1 + iVar2 + (int)puVar11)[(int)param_1[6]]];
            (param_1[1] + iVar2)[(int)puVar11] = uVar1;
            *puVar3 = uVar1;
            iVar2 = iVar2 + 1;
            if ((int)param_1[0x14] <= iVar2) break;
            puVar3 = puVar3 + 1;
          } while ((int)puVar10 - (int)puVar11 != iVar2);
        }
      }
      ppuVar7 = &local_78;
      iVar2 = rpl_mbrtowc();
      if (iVar2 - 1U < 0xfffffffe) {
        if (iVar2 == -2) {
          if ((int)param_1[0xc] <= (int)param_1[9]) goto LAB_0002c26c;
          param_1[4] = local_74;
          param_1[5] = local_70;
          break;
        }
      }
      else {
LAB_0002c26c:
        local_78 = (undefined1 *)(uint)(byte)(*param_1 + (int)puVar11)[(int)param_1[6]];
        if (param_1[0x10] != (undefined1 *)0x0) {
          local_78 = (undefined1 *)(uint)(byte)local_78[(int)param_1[0x10]];
        }
        param_1[4] = local_74;
        param_1[5] = local_70;
        iVar2 = 1;
      }
      puVar4 = puVar11 + 1;
      *(undefined1 **)(param_1[2] + (int)puVar11 * 4) = local_78;
      puVar3 = puVar11 + iVar2;
      ppuVar7 = (undefined1 **)(uint)((int)puVar4 < (int)puVar3);
      param_2 = local_78;
      puVar11 = puVar4;
      if (ppuVar7 != (undefined1 **)0x0) {
        do {
          param_2 = (undefined1 *)((int)puVar4 * 4);
          ppuVar7 = (undefined1 **)(param_2 + (int)param_1[2]);
          puVar4 = puVar4 + 1;
          *ppuVar7 = (undefined1 *)0xffffffff;
          puVar11 = puVar3;
        } while (puVar3 != puVar4);
      }
    } while ((int)puVar11 < (int)puVar10);
  }
  param_1[7] = puVar11;
  param_1[8] = puVar11;
  if (local_2c == *(undefined1 **)PTR___stack_chk_guard_000554f0) {
    return *(undefined1 **)PTR___stack_chk_guard_000554f0;
  }
  puVar12 = PTR___stack_chk_fail_000554d4;
  (*(code *)PTR___stack_chk_fail_000554d4)();
  puVar10 = (undefined1 *)0x0;
  if ((param_2 != (undefined1 *)0x0) &&
     (puVar10 = *(undefined1 **)(param_2 + 4), puVar10 != (undefined1 *)0x0)) {
    if ((int)*ppuVar7 < (int)(ppuVar7[1] + (int)puVar10 * 2)) {
      puVar10 = *ppuVar7 + (int)puVar10;
      puVar11 = (undefined1 *)(**(code **)(puVar12 + 0x290a8))(ppuVar7[2],(int)puVar10 * 8);
      if (puVar11 == (undefined1 *)0x0) {
        return (undefined1 *)0xc;
      }
      ppuVar7[2] = puVar11;
      *ppuVar7 = (undefined1 *)((int)puVar10 * 2);
    }
    puVar10 = ppuVar7[1];
    pcVar13 = *(code **)(puVar12 + 0x29124);
    if (puVar10 == (undefined1 *)0x0) {
      ppuVar7[1] = *(undefined1 **)(param_2 + 4);
      (*pcVar13)(ppuVar7[2],*(undefined4 *)(param_2 + 8),*(int *)(param_2 + 4) << 2);
      puVar10 = (undefined1 *)0x0;
    }
    else {
      puVar11 = puVar10 + *(int *)(param_2 + 4) * 2;
      iVar2 = *(int *)(param_2 + 4) + -1;
      puVar10 = puVar10 + -1;
      while (-1 < iVar2) {
        if ((int)puVar10 < 0) {
          puVar11 = puVar11 + -(iVar2 + 1);
          (**(code **)(puVar12 + 0x29124))
                    (ppuVar7[2] + (int)puVar11 * 4,*(undefined4 *)(param_2 + 8),(iVar2 + 1) * 4);
          break;
        }
        iVar5 = *(int *)(ppuVar7[2] + (int)puVar10 * 4);
        iVar6 = *(int *)(*(int *)(param_2 + 8) + iVar2 * 4);
        if (iVar5 == iVar6) {
          iVar2 = iVar2 + -1;
          puVar10 = puVar10 + -1;
        }
        else if (iVar5 < iVar6) {
          iVar2 = iVar2 + -1;
          puVar11 = puVar11 + -1;
          *(int *)(ppuVar7[2] + (int)puVar11 * 4) = iVar6;
        }
        else {
          puVar10 = puVar10 + -1;
        }
      }
      puVar3 = ppuVar7[1];
      puVar9 = puVar3 + *(int *)(param_2 + 4) * 2 + -1;
      puVar10 = puVar3 + (*(int *)(param_2 + 4) * 2 - (int)puVar11);
      puVar4 = puVar3 + -1;
      if (puVar10 != (undefined1 *)0x0) {
        ppuVar7[1] = puVar3 + (int)puVar10;
        do {
          while( true ) {
            puVar3 = ppuVar7[2];
            iVar2 = (int)puVar9 * 4;
            iVar6 = (int)puVar4 * 4;
            puVar8 = puVar4 + (int)puVar10;
            if (*(int *)(puVar3 + iVar2) <= *(int *)(puVar3 + iVar6)) break;
            puVar9 = puVar9 + -1;
            puVar8 = puVar10 + -1;
            *(int *)(puVar3 + (int)(puVar4 + (int)puVar10) * 4) = *(int *)(puVar3 + iVar2);
            puVar10 = puVar8;
            if (puVar8 == (undefined1 *)0x0) {
              return (undefined1 *)0x0;
            }
          }
          puVar4 = puVar4 + -1;
          *(int *)(puVar3 + (int)puVar8 * 4) = *(int *)(puVar3 + iVar6);
        } while (-1 < (int)puVar4);
        (**(code **)(puVar12 + 0x29124))(ppuVar7[2],ppuVar7[2] + (int)puVar11 * 4,(int)puVar10 << 2)
        ;
        puVar10 = (undefined1 *)0x0;
      }
    }
  }
  return puVar10;
}

