
int sqlite3GenerateIndexKey
              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,
              Index *pPrior,int regPrior)

{
  ushort uVar1;
  code *pcVar2;
  undefined4 uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  code *pcVar8;
  Vdbe *pVVar9;
  
  pVVar9 = pParse->pVdbe;
  if (piPartIdxLabel != (int *)0x0) {
    if (pIdx->pPartIdxWhere == (Expr *)0x0) {
      *piPartIdxLabel = 0;
    }
    else {
      iVar4 = pParse->nLabel + -1;
      pParse->nLabel = iVar4;
      *piPartIdxLabel = iVar4;
      pParse->iSelfTab = iDataCur + 1;
      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);
      pParse->iSelfTab = 0;
    }
  }
  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {
    uVar1 = pIdx->nColumn;
  }
  else {
    uVar1 = pIdx->nKeyCol;
  }
  uVar7 = (uint)uVar1;
  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7);
  if (pPrior != (Index *)0x0) {
    if (iVar4 == regPrior) {
      if (pPrior->pPartIdxWhere != (Expr *)0x0) {
        pPrior = (Index *)0x0;
      }
    }
    else {
      pPrior = (Index *)0x0;
    }
  }
  uVar6 = 0;
  if (uVar7 != 0) {
    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);
    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);
    do {
      while( true ) {
        iVar5 = (int)pIdx->aiColumn[uVar6];
        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))
        break;
        if (iVar5 == -2) {
          pParse->iSelfTab = iDataCur + 1;
          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);
          pParse->iSelfTab = 0;
        }
        else {
          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);
        }
        iVar5 = pVVar9->nOp;
        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {
          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);
        }
        uVar6 = uVar6 + 1;
        if (uVar7 == uVar6) goto LAB_000c7e44;
      }
      uVar6 = uVar6 + 1;
    } while (uVar7 != uVar6);
  }
LAB_000c7e44:
  if ((regOut != 0) &&
     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),
     pIdx->pTable->pSelect != (Select *)0x0)) {
    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);
    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);
  }
  if (uVar7 == 1) {
    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);
    return iVar4;
  }
  if (pParse->nRangeReg < (int)uVar7) {
    pParse->nRangeReg = uVar7;
    pParse->iRangeReg = iVar4;
  }
  return iVar4;
}



int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,
                int param_7,int param_8)

{
  ushort uVar1;
  code *pcVar2;
  undefined4 uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  code *pcVar8;
  undefined4 *puVar9;
  
  puVar9 = (undefined4 *)param_1[2];
  if (param_6 != (int *)0x0) {
    if (*(int *)(param_2 + 0x24) == 0) {
      *param_6 = 0;
    }
    else {
      iVar4 = param_1[0xe];
      param_1[0xe] = iVar4 + -1;
      *param_6 = iVar4 + -1;
      param_1[0xd] = param_3 + 1;
      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);
      param_1[0xd] = 0;
    }
  }
  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {
    uVar1 = *(ushort *)(param_2 + 0x34);
  }
  else {
    uVar1 = *(ushort *)(param_2 + 0x32);
  }
  uVar7 = (uint)uVar1;
  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);
  if (param_7 != 0) {
    if (iVar4 == param_8) {
      if (*(int *)(param_7 + 0x24) != 0) {
        param_7 = 0;
      }
    }
    else {
      param_7 = 0;
    }
  }
  uVar6 = 0;
  if (uVar7 != 0) {
    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);
    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);
    do {
      while( true ) {
        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);
        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&
           (iVar5 != -2)) break;
        if (iVar5 == -2) {
          param_1[0xd] = param_3 + 1;
          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),
                       iVar4 + uVar6);
          param_1[0xd] = 0;
        }
        else {
          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);
        }
        iVar5 = puVar9[0x1b];
        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {
          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);
        }
        uVar6 = uVar6 + 1;
        if (uVar7 == uVar6) goto LAB_000c7e44;
      }
      uVar6 = uVar6 + 1;
    } while (uVar7 != uVar6);
  }
LAB_000c7e44:
  if ((param_4 != 0) &&
     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),
     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {
    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);
    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);
  }
  if (uVar7 == 1) {
    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);
    return iVar4;
  }
  if ((int)param_1[7] < (int)uVar7) {
    param_1[7] = uVar7;
    param_1[8] = iVar4;
  }
  return iVar4;
}


lui gp,0xa
addiu gp,gp,-0x36a4
addu gp,gp,t9
addiu sp,sp,-0x50
lw v0,0x64(sp)
sw s7,0x44(sp)
or s7,a1,zero
sw s6,0x40(sp)
sw s3,0x34(sp)
or s3,a2,zero
sw s1,0x2c(sp)
or s1,a0,zero
sw s0,0x28(sp)
sw gp,0x18(sp)
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s2,0x30(sp)
sw a3,0x5c(sp)
lw s0,0x60(sp)
lw s6,0x68(sp)
beq v0,zero,0x000c7cf0
_lw s8,0x8(a0)
lw a1,0x24(a1)
beq a1,zero,0x000c7ebc
_addiu a2,a2,0x1
lw a1,0x38(a0)
lw t9,-0x7d3c(gp)
addiu a1,a1,-0x1
addiu t9,t9,0x7b5c
sw a1,0x38(a0)
sw a1,0x0(v0)
sw a2,0x34(a0)
lw a2,0x0(v0)
bal 0x000c7b5c
_lw a1,0x24(s7)
lw gp,0x18(sp)
sw zero,0x34(s1)
beq s0,zero,0x000c7d08
_nop
lbu v0,0x37(s7)
andi v0,v0,0x10
bne v0,zero,0x000c7ec4
_nop
lhu s2,0x34(s7)
lw t9,-0x7eec(gp)
or a1,s2,zero
addiu t9,t9,-0x7350
jalr t9
_or a0,s1,zero
lw gp,0x18(sp)
beq s6,zero,0x000c7d3c
_or s4,v0,zero
lw v0,0x6c(sp)
beq s4,v0,0x000c7ecc
_nop
or s6,zero,zero
beq s2,zero,0x000c7e40
_or s0,zero,zero
lw v0,-0x7d3c(gp)
lw s5,-0x7e98(gp)
sw v0,0x20(sp)
lw v0,-0x7eec(gp)
addiu s5,s5,0x2708
addiu v0,v0,-0x4fcc
b 0x000c7db0
_sw v0,0x24(sp)
lw a1,0xc(s7)
lw a0,0x8(s1)
jalr t9
_sw t2,0x10(sp)
lw gp,0x18(sp)
lw a2,0x6c(s8)
li a1,0x54
blez a2,0x000c7da4
_sll v0,a2,0x2
addu v0,v0,a2
lw a0,0x68(s8)
sll v0,v0,0x2
addu v0,a0,v0
lbu v0,-0x14(v0)
beq v0,a1,0x000c7ea4
_lw t9,0x24(sp)
addiu s0,s0,0x1
beq s2,s0,0x000c7e44
_lw v0,0x5c(sp)
lw v0,0x4(s7)
sll a0,s0,0x1
li a1,-0x2
addu t2,s4,s0
addu v0,v0,a0
or a2,s3,zero
beq s6,zero,0x000c7de4
_lh a3,0x0(v0)
lw v0,0x4(s6)
addu v0,v0,a0
lh v0,0x0(v0)
beq v0,a3,0x000c7e2c
_li v0,-0x2
bne a3,a1,0x000c7d64
_or t9,s5,zero
addiu a0,s3,0x1
lw v1,0x20(sp)
sll v0,s0,0x2
sw a0,0x34(s1)
or a2,t2,zero
addu v0,v0,s0
lw a1,0x28(s7)
addiu t9,v1,0x2870
sll v0,v0,0x2
or a0,s1,zero
addu v0,a1,v0
bal 0x000c2870
_lw a1,0x4(v0)
lw gp,0x18(sp)
b 0x000c7d78
_sw zero,0x34(s1)
beq a3,v0,0x000c7de4
_nop
addiu s0,s0,0x1
bne s2,s0,0x000c7db0
_nop
lw v0,0x5c(sp)
bne v0,zero,0x000c7ed8
_lw t9,-0x7e9c(gp)
li v0,0x1
beq s2,v0,0x000c7f4c
_lw t9,-0x7eec(gp)
lw v0,0x1c(s1)
slt v0,v0,s2
beq v0,zero,0x000c7e74
_lw ra,0x4c(sp)
sw s2,0x1c(s1)
sw s4,0x20(s1)
lw ra,0x4c(sp)
or v0,s4,zero
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
lw a0,0x0(s8)
addiu a2,a2,-0x1
jalr t9
_addiu a1,s8,0x68
b 0x000c7da4
_lw gp,0x18(sp)
b 0x000c7cf0
_sw zero,0x0(v0)
b 0x000c7d0c
_lhu s2,0x32(s7)
lw v0,0x24(s6)
b 0x000c7d3c
_movn s6,zero,v0
li a1,0x66
lw v0,0x5c(sp)
or a3,s2,zero
or a2,s4,zero
addiu t9,t9,-0x2f60
sw v0,0x10(sp)
jalr t9
_or a0,s8,zero
lw v0,0xc(s7)
lw v0,0xc(v0)
beq v0,zero,0x000c7e4c
_lw gp,0x18(sp)
lw t9,-0x7ed4(gp)
or a1,s7,zero
addiu t9,t9,-0xde8
jalr t9
_lw a0,0x0(s1)
or a3,zero,zero
lw gp,0x18(sp)
li a1,-0x1
or a2,v0,zero
lw t9,-0x7eec(gp)
addiu t9,t9,0x4a40
jalr t9
_or a0,s8,zero
li v0,0x1
bne s2,v0,0x000c7e58
_lw gp,0x18(sp)
lw t9,-0x7eec(gp)
or a1,s4,zero
addiu t9,t9,-0x72d0
jalr t9
_or a0,s1,zero
or v0,s4,zero
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
(translation_unit "int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}\n\n" (function_definition "int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" primitive_type (function_declarator "FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" identifier (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (expression_statement "puVar9 = (undefined4 *)param_1[2];" (assignment_expression "puVar9 = (undefined4 *)param_1[2]" identifier = (cast_expression "(undefined4 *)param_1[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" if (parenthesized_expression "(param_6 != (int *)0x0)" ( (binary_expression "param_6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" { (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" ( (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *param_6 = 0;\n    }" { (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" else (compound_statement "{\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" { (expression_statement "iVar4 = param_1[0xe];" (assignment_expression "iVar4 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = iVar4 + -1;" (assignment_expression "param_1[0xe] = iVar4 + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "*param_6 = iVar4 + -1;" (assignment_expression "*param_6 = iVar4 + -1" (pointer_expression "*param_6" * identifier) = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);" (call_expression "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) , (pointer_expression "*param_6" * identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) }))) })) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" if (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" ( (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) || (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" * (cast_expression "(byte *)(param_2 + 0x37)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x37)" ( (binary_expression "param_2 + 0x37" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x34)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x34)" * (cast_expression "(ushort *)(param_2 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" else (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x32)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x32)" * (cast_expression "(ushort *)(param_2 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x32)" ( (binary_expression "param_2 + 0x32" identifier + number_literal) ))))) ;) }))) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);" (assignment_expression "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x7350)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x7350)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x7350)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x7350" identifier + number_literal) )))) )) (argument_list "(param_1,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" { (if_statement "if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" if (parenthesized_expression "(iVar4 == param_8)" ( (binary_expression "iVar4 == param_8" identifier == identifier) )) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" { (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" if (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" ( (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" * (cast_expression "(int *)(param_7 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x24)" ( (binary_expression "param_7 + 0x24" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        param_7 = 0;\n      }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n      param_7 = 0;\n    }" else (compound_statement "{\n      param_7 = 0;\n    }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (if_statement "if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" { (expression_statement "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708)" identifier = (cast_expression "(code *)(PTR_LAB_0015c718 + 0x2708)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c718 + 0x2708)" ( (binary_expression "PTR_LAB_0015c718 + 0x2708" identifier + number_literal) )))) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc)" identifier = (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x4fcc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x4fcc)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x4fcc" identifier + number_literal) )))) ;) (do_statement "do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);" do (compound_statement "{\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    }" { (while_statement "while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" { (expression_statement "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);" (assignment_expression "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" identifier = (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar6 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar6 * 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) )))) + (binary_expression "uVar6 * 2" identifier * number_literal)) )))))) ;) (if_statement "if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;" if (parenthesized_expression "(((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2))" ( (binary_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)" (parenthesized_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5))" ( (binary_expression "(param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" ( (binary_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5" (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" * (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_7 + 4) + uVar6 * 2)" ( (binary_expression "*(int *)(param_7 + 4) + uVar6 * 2" (pointer_expression "*(int *)(param_7 + 4)" * (cast_expression "(int *)(param_7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 4)" ( (binary_expression "param_7 + 4" identifier + number_literal) )))) + (binary_expression "uVar6 * 2" identifier * number_literal)) )))) == identifier) ))) )) && (parenthesized_expression "(iVar5 != -2)" ( (binary_expression "iVar5 != -2" identifier != number_literal) ))) )) (break_statement "break;" break ;)) (if_statement "if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" if (parenthesized_expression "(iVar5 == -2)" ( (binary_expression "iVar5 == -2" identifier == number_literal) )) (compound_statement "{\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }" { (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);" (call_expression "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" identifier (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" ( (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (binary_expression "uVar6 * 0x14" identifier * number_literal)) + number_literal) )))) , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" else (compound_statement "{\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" { (expression_statement "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);" (call_expression "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier , identifier , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) }))) (expression_statement "iVar5 = puVar9[0x1b];" (assignment_expression "iVar5 = puVar9[0x1b]" identifier = (subscript_expression "puVar9[0x1b]" identifier [ number_literal ])) ;) (if_statement "if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" if (parenthesized_expression "((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'))" ( (binary_expression "(0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) && (parenthesized_expression "(*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" ( (binary_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'" (pointer_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" * (cast_expression "(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" ( (binary_expression "puVar9[0x1a] + iVar5 * 0x14 + -0x14" (binary_expression "puVar9[0x1a] + iVar5 * 0x14" (subscript_expression "puVar9[0x1a]" identifier [ number_literal ]) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) )))) == (char_literal "'T'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" { (expression_statement "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);" (call_expression "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(*puVar9,puVar9 + 0x1a,iVar5 + -1)" ( (pointer_expression "*puVar9" * identifier) , (binary_expression "puVar9 + 0x1a" identifier + number_literal) , (binary_expression "iVar5 + -1" identifier + number_literal) ))) ;) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar6) goto LAB_000c7e44;" if (parenthesized_expression "(uVar7 == uVar6)" ( (binary_expression "uVar7 == uVar6" identifier == identifier) )) (goto_statement "goto LAB_000c7e44;" goto statement_identifier ;)) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != uVar6)" ( (binary_expression "uVar7 != uVar6" identifier != identifier) )) ;) })) (labeled_statement "LAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" statement_identifier : (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" if (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" ( (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" ( (comma_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))" ( (pointer_expression "*(code *)(PTR_LAB_0015c714 + -0x2f60)" * (cast_expression "(code *)(PTR_LAB_0015c714 + -0x2f60)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c714 + -0x2f60)" ( (binary_expression "PTR_LAB_0015c714 + -0x2f60" identifier + number_literal) )))) )) (argument_list "(puVar9,0x66,iVar4,uVar7,param_4)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" * (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" ( (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" { (expression_statement "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);" (assignment_expression "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6dc + -0xde8)" * (cast_expression "(code *)(PTR_LAB_0015c6dc + -0xde8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6dc + -0xde8)" ( (binary_expression "PTR_LAB_0015c6dc + -0xde8" identifier + number_literal) )))) )) (argument_list "(*param_1,param_2)" ( (pointer_expression "*param_1" * identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + 0x4a40)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + 0x4a40)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + 0x4a40)" ( (binary_expression "PTR_LAB_0015c6c4 + 0x4a40" identifier + number_literal) )))) )) (argument_list "(puVar9,0xffffffff,uVar3,0)" ( identifier , number_literal , identifier , number_literal ))) ;) }))) (if_statement "if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" if (parenthesized_expression "(uVar7 == 1)" ( (binary_expression "uVar7 == 1" identifier == number_literal) )) (compound_statement "{\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" { (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x72d0)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x72d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x72d0)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x72d0" identifier + number_literal) )))) )) (argument_list "(param_1,iVar4)" ( identifier , identifier ))) ;) (return_statement "return iVar4;" return identifier ;) })) (if_statement "if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" if (parenthesized_expression "((int)param_1[7] < (int)uVar7)" ( (binary_expression "(int)param_1[7] < (int)uVar7" (cast_expression "(int)param_1[7]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[7]" identifier [ number_literal ])) < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" { (expression_statement "param_1[7] = uVar7;" (assignment_expression "param_1[7] = uVar7" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[8] = iVar4;" (assignment_expression "param_1[8] = iVar4" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "int sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  Vdbe *pVVar9;\n  \n  pVVar9 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7);\n  if (pPrior != (Index *)0x0) {\n    if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);\n    return iVar4;\n  }\n  if (pParse->nRangeReg < (int)uVar7) {\n    pParse->nRangeReg = uVar7;\n    pParse->iRangeReg = iVar4;\n  }\n  return iVar4;\n}\n\n" (function_definition "int sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  Vdbe *pVVar9;\n  \n  pVVar9 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7);\n  if (pPrior != (Index *)0x0) {\n    if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);\n    return iVar4;\n  }\n  if (pParse->nRangeReg < (int)uVar7) {\n    pParse->nRangeReg = uVar7;\n    pParse->iRangeReg = iVar4;\n  }\n  return iVar4;\n}" primitive_type (function_declarator "sqlite3GenerateIndexKey\n              (Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)" identifier (parameter_list "(Parse *pParse,Index *pIdx,int iDataCur,int regOut,int prefixOnly,int *piPartIdxLabel,\n              Index *pPrior,int regPrior)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "Index *pIdx" type_identifier (pointer_declarator "*pIdx" * identifier)) , (parameter_declaration "int iDataCur" primitive_type identifier) , (parameter_declaration "int regOut" primitive_type identifier) , (parameter_declaration "int prefixOnly" primitive_type identifier) , (parameter_declaration "int *piPartIdxLabel" primitive_type (pointer_declarator "*piPartIdxLabel" * identifier)) , (parameter_declaration "Index *pPrior" type_identifier (pointer_declarator "*pPrior" * identifier)) , (parameter_declaration "int regPrior" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  Vdbe *pVVar9;\n  \n  pVVar9 = pParse->pVdbe;\n  if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }\n  }\n  if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7);\n  if (pPrior != (Index *)0x0) {\n    if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);\n    return iVar4;\n  }\n  if (pParse->nRangeReg < (int)uVar7) {\n    pParse->nRangeReg = uVar7;\n    pParse->iRangeReg = iVar4;\n  }\n  return iVar4;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "Vdbe *pVVar9;" type_identifier (pointer_declarator "*pVVar9" * identifier) ;) (expression_statement "pVVar9 = pParse->pVdbe;" (assignment_expression "pVVar9 = pParse->pVdbe" identifier = (field_expression "pParse->pVdbe" identifier -> field_identifier)) ;) (if_statement "if (piPartIdxLabel != (int *)0x0) {\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }\n  }" if (parenthesized_expression "(piPartIdxLabel != (int *)0x0)" ( (binary_expression "piPartIdxLabel != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }\n  }" { (if_statement "if (pIdx->pPartIdxWhere == (Expr *)0x0) {\n      *piPartIdxLabel = 0;\n    }\n    else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }" if (parenthesized_expression "(pIdx->pPartIdxWhere == (Expr *)0x0)" ( (binary_expression "pIdx->pPartIdxWhere == (Expr *)0x0" (field_expression "pIdx->pPartIdxWhere" identifier -> field_identifier) == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *piPartIdxLabel = 0;\n    }" { (expression_statement "*piPartIdxLabel = 0;" (assignment_expression "*piPartIdxLabel = 0" (pointer_expression "*piPartIdxLabel" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }" else (compound_statement "{\n      iVar4 = pParse->nLabel + -1;\n      pParse->nLabel = iVar4;\n      *piPartIdxLabel = iVar4;\n      pParse->iSelfTab = iDataCur + 1;\n      sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);\n      pParse->iSelfTab = 0;\n    }" { (expression_statement "iVar4 = pParse->nLabel + -1;" (assignment_expression "iVar4 = pParse->nLabel + -1" identifier = (binary_expression "pParse->nLabel + -1" (field_expression "pParse->nLabel" identifier -> field_identifier) + number_literal)) ;) (expression_statement "pParse->nLabel = iVar4;" (assignment_expression "pParse->nLabel = iVar4" (field_expression "pParse->nLabel" identifier -> field_identifier) = identifier) ;) (expression_statement "*piPartIdxLabel = iVar4;" (assignment_expression "*piPartIdxLabel = iVar4" (pointer_expression "*piPartIdxLabel" * identifier) = identifier) ;) (expression_statement "pParse->iSelfTab = iDataCur + 1;" (assignment_expression "pParse->iSelfTab = iDataCur + 1" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = (binary_expression "iDataCur + 1" identifier + number_literal)) ;) (expression_statement "sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut);" (call_expression "sqlite3ExprIfFalseDup(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut)" identifier (argument_list "(pParse,pIdx->pPartIdxWhere,*piPartIdxLabel,regOut)" ( identifier , (field_expression "pIdx->pPartIdxWhere" identifier -> field_identifier) , (pointer_expression "*piPartIdxLabel" * identifier) , identifier ))) ;) (expression_statement "pParse->iSelfTab = 0;" (assignment_expression "pParse->iSelfTab = 0" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = number_literal) ;) }))) })) (if_statement "if ((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)) {\n    uVar1 = pIdx->nColumn;\n  }\n  else {\n    uVar1 = pIdx->nKeyCol;\n  }" if (parenthesized_expression "((prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0))" ( (binary_expression "(prefixOnly == 0) || ((pIdx->field_0x37 & 0x10) == 0)" (parenthesized_expression "(prefixOnly == 0)" ( (binary_expression "prefixOnly == 0" identifier == number_literal) )) || (parenthesized_expression "((pIdx->field_0x37 & 0x10) == 0)" ( (binary_expression "(pIdx->field_0x37 & 0x10) == 0" (parenthesized_expression "(pIdx->field_0x37 & 0x10)" ( (binary_expression "pIdx->field_0x37 & 0x10" (field_expression "pIdx->field_0x37" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar1 = pIdx->nColumn;\n  }" { (expression_statement "uVar1 = pIdx->nColumn;" (assignment_expression "uVar1 = pIdx->nColumn" identifier = (field_expression "pIdx->nColumn" identifier -> field_identifier)) ;) }) (else_clause "else {\n    uVar1 = pIdx->nKeyCol;\n  }" else (compound_statement "{\n    uVar1 = pIdx->nKeyCol;\n  }" { (expression_statement "uVar1 = pIdx->nKeyCol;" (assignment_expression "uVar1 = pIdx->nKeyCol" identifier = (field_expression "pIdx->nKeyCol" identifier -> field_identifier)) ;) }))) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7);" (assignment_expression "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))(pParse,uVar7)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x7350)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x7350)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x7350)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x7350" identifier + number_literal) )))) )) (argument_list "(pParse,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (pPrior != (Index *)0x0) {\n    if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }" if (parenthesized_expression "(pPrior != (Index *)0x0)" ( (binary_expression "pPrior != (Index *)0x0" identifier != (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }\n  }" { (if_statement "if (iVar4 == regPrior) {\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }\n    else {\n      pPrior = (Index *)0x0;\n    }" if (parenthesized_expression "(iVar4 == regPrior)" ( (binary_expression "iVar4 == regPrior" identifier == identifier) )) (compound_statement "{\n      if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }\n    }" { (if_statement "if (pPrior->pPartIdxWhere != (Expr *)0x0) {\n        pPrior = (Index *)0x0;\n      }" if (parenthesized_expression "(pPrior->pPartIdxWhere != (Expr *)0x0)" ( (binary_expression "pPrior->pPartIdxWhere != (Expr *)0x0" (field_expression "pPrior->pPartIdxWhere" identifier -> field_identifier) != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pPrior = (Index *)0x0;\n      }" { (expression_statement "pPrior = (Index *)0x0;" (assignment_expression "pPrior = (Index *)0x0" identifier = (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) }) (else_clause "else {\n      pPrior = (Index *)0x0;\n    }" else (compound_statement "{\n      pPrior = (Index *)0x0;\n    }" { (expression_statement "pPrior = (Index *)0x0;" (assignment_expression "pPrior = (Index *)0x0" identifier = (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (if_statement "if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" { (expression_statement "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708)" identifier = (cast_expression "(code *)(PTR_LAB_0015c718 + 0x2708)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c718 + 0x2708)" ( (binary_expression "PTR_LAB_0015c718 + 0x2708" identifier + number_literal) )))) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc)" identifier = (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x4fcc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x4fcc)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x4fcc" identifier + number_literal) )))) ;) (do_statement "do {\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);" do (compound_statement "{\n      while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    }" { (while_statement "while( true ) {\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar5 = (int)pIdx->aiColumn[uVar6];\n        if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;\n        if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = pVVar9->nOp;\n        if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" { (expression_statement "iVar5 = (int)pIdx->aiColumn[uVar6];" (assignment_expression "iVar5 = (int)pIdx->aiColumn[uVar6]" identifier = (cast_expression "(int)pIdx->aiColumn[uVar6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "pIdx->aiColumn[uVar6]" (field_expression "pIdx->aiColumn" identifier -> field_identifier) [ identifier ]))) ;) (if_statement "if (((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))\n        break;" if (parenthesized_expression "(((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2))" ( (binary_expression "((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)) && (iVar5 != -2)" (parenthesized_expression "((pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5))" ( (binary_expression "(pPrior != (Index *)0x0) && (pPrior->aiColumn[uVar6] == iVar5)" (parenthesized_expression "(pPrior != (Index *)0x0)" ( (binary_expression "pPrior != (Index *)0x0" identifier != (cast_expression "(Index *)0x0" ( (type_descriptor "Index *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pPrior->aiColumn[uVar6] == iVar5)" ( (binary_expression "pPrior->aiColumn[uVar6] == iVar5" (subscript_expression "pPrior->aiColumn[uVar6]" (field_expression "pPrior->aiColumn" identifier -> field_identifier) [ identifier ]) == identifier) ))) )) && (parenthesized_expression "(iVar5 != -2)" ( (binary_expression "iVar5 != -2" identifier != number_literal) ))) )) (break_statement "break;" break ;)) (if_statement "if (iVar5 == -2) {\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }\n        else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }" if (parenthesized_expression "(iVar5 == -2)" ( (binary_expression "iVar5 == -2" identifier == number_literal) )) (compound_statement "{\n          pParse->iSelfTab = iDataCur + 1;\n          sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);\n          pParse->iSelfTab = 0;\n        }" { (expression_statement "pParse->iSelfTab = iDataCur + 1;" (assignment_expression "pParse->iSelfTab = iDataCur + 1" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = (binary_expression "iDataCur + 1" identifier + number_literal)) ;) (expression_statement "sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6);" (call_expression "sqlite3ExprCodeCopy(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6)" identifier (argument_list "(pParse,pIdx->aColExpr->a[uVar6].pExpr,iVar4 + uVar6)" ( identifier , (field_expression "pIdx->aColExpr->a[uVar6].pExpr" (subscript_expression "pIdx->aColExpr->a[uVar6]" (field_expression "pIdx->aColExpr->a" (field_expression "pIdx->aColExpr" identifier -> field_identifier) -> field_identifier) [ identifier ]) . field_identifier) , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) (expression_statement "pParse->iSelfTab = 0;" (assignment_expression "pParse->iSelfTab = 0" (field_expression "pParse->iSelfTab" identifier -> field_identifier) = number_literal) ;) }) (else_clause "else {\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }" else (compound_statement "{\n          (*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);\n        }" { (expression_statement "(*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6);" (call_expression "(*pcVar8)(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(pParse->pVdbe,pIdx->pTable,iDataCur,iVar5,iVar4 + uVar6)" ( (field_expression "pParse->pVdbe" identifier -> field_identifier) , (field_expression "pIdx->pTable" identifier -> field_identifier) , identifier , identifier , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) }))) (expression_statement "iVar5 = pVVar9->nOp;" (assignment_expression "iVar5 = pVVar9->nOp" identifier = (field_expression "pVVar9->nOp" identifier -> field_identifier)) ;) (if_statement "if ((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')) {\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }" if (parenthesized_expression "((0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T'))" ( (binary_expression "(0 < iVar5) && (pVVar9->aOp[iVar5 + -1].opcode == 'T')" (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) && (parenthesized_expression "(pVVar9->aOp[iVar5 + -1].opcode == 'T')" ( (binary_expression "pVVar9->aOp[iVar5 + -1].opcode == 'T'" (field_expression "pVVar9->aOp[iVar5 + -1].opcode" (subscript_expression "pVVar9->aOp[iVar5 + -1]" (field_expression "pVVar9->aOp" identifier -> field_identifier) [ (binary_expression "iVar5 + -1" identifier + number_literal) ]) . field_identifier) == (char_literal "'T'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);\n        }" { (expression_statement "(*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1);" (call_expression "(*pcVar2)(pVVar9->db,&pVVar9->aOp,iVar5 + -1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(pVVar9->db,&pVVar9->aOp,iVar5 + -1)" ( (field_expression "pVVar9->db" identifier -> field_identifier) , (pointer_expression "&pVVar9->aOp" & (field_expression "pVVar9->aOp" identifier -> field_identifier)) , (binary_expression "iVar5 + -1" identifier + number_literal) ))) ;) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar6) goto LAB_000c7e44;" if (parenthesized_expression "(uVar7 == uVar6)" ( (binary_expression "uVar7 == uVar6" identifier == identifier) )) (goto_statement "goto LAB_000c7e44;" goto statement_identifier ;)) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != uVar6)" ( (binary_expression "uVar7 != uVar6" identifier != identifier) )) ;) })) (labeled_statement "LAB_000c7e44:\n  if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }" statement_identifier : (if_statement "if ((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }" if (parenthesized_expression "((regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0))" ( (binary_expression "(regOut != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)" (parenthesized_expression "(regOut != 0)" ( (binary_expression "regOut != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0)" ( (comma_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut),\n     pIdx->pTable->pSelect != (Select *)0x0" (call_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(pVVar9,0x66,iVar4,uVar7,regOut)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))" ( (pointer_expression "*(code *)(PTR_LAB_0015c714 + -0x2f60)" * (cast_expression "(code *)(PTR_LAB_0015c714 + -0x2f60)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c714 + -0x2f60)" ( (binary_expression "PTR_LAB_0015c714 + -0x2f60" identifier + number_literal) )))) )) (argument_list "(pVVar9,0x66,iVar4,uVar7,regOut)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "pIdx->pTable->pSelect != (Select *)0x0" (field_expression "pIdx->pTable->pSelect" (field_expression "pIdx->pTable" identifier -> field_identifier) -> field_identifier) != (cast_expression "(Select *)0x0" ( (type_descriptor "Select *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);\n  }" { (expression_statement "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx);" (assignment_expression "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))(pParse->db,pIdx)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6dc + -0xde8)" * (cast_expression "(code *)(PTR_LAB_0015c6dc + -0xde8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6dc + -0xde8)" ( (binary_expression "PTR_LAB_0015c6dc + -0xde8" identifier + number_literal) )))) )) (argument_list "(pParse->db,pIdx)" ( (field_expression "pParse->db" identifier -> field_identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(pVVar9,0xffffffff,uVar3,0)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + 0x4a40)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + 0x4a40)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + 0x4a40)" ( (binary_expression "PTR_LAB_0015c6c4 + 0x4a40" identifier + number_literal) )))) )) (argument_list "(pVVar9,0xffffffff,uVar3,0)" ( identifier , number_literal , identifier , number_literal ))) ;) }))) (if_statement "if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);\n    return iVar4;\n  }" if (parenthesized_expression "(uVar7 == 1)" ( (binary_expression "uVar7 == 1" identifier == number_literal) )) (compound_statement "{\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);\n    return iVar4;\n  }" { (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(pParse,iVar4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x72d0)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x72d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x72d0)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x72d0" identifier + number_literal) )))) )) (argument_list "(pParse,iVar4)" ( identifier , identifier ))) ;) (return_statement "return iVar4;" return identifier ;) })) (if_statement "if (pParse->nRangeReg < (int)uVar7) {\n    pParse->nRangeReg = uVar7;\n    pParse->iRangeReg = iVar4;\n  }" if (parenthesized_expression "(pParse->nRangeReg < (int)uVar7)" ( (binary_expression "pParse->nRangeReg < (int)uVar7" (field_expression "pParse->nRangeReg" identifier -> field_identifier) < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pParse->nRangeReg = uVar7;\n    pParse->iRangeReg = iVar4;\n  }" { (expression_statement "pParse->nRangeReg = uVar7;" (assignment_expression "pParse->nRangeReg = uVar7" (field_expression "pParse->nRangeReg" identifier -> field_identifier) = identifier) ;) (expression_statement "pParse->iRangeReg = iVar4;" (assignment_expression "pParse->iRangeReg = iVar4" (field_expression "pParse->iRangeReg" identifier -> field_identifier) = identifier) ;) })) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}\n\n" (function_definition "int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" primitive_type (function_declarator "FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" identifier (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "int param_7" primitive_type identifier) , (parameter_declaration "int param_8" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (expression_statement "puVar9 = (undefined4 *)param_1[2];" (assignment_expression "puVar9 = (undefined4 *)param_1[2]" identifier = (cast_expression "(undefined4 *)param_1[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" if (parenthesized_expression "(param_6 != (int *)0x0)" ( (binary_expression "param_6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" { (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" ( (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" * (cast_expression "(int *)(param_2 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      *param_6 = 0;\n    }" { (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" * identifier) = number_literal) ;) }) (else_clause "else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" else (compound_statement "{\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" { (expression_statement "iVar4 = param_1[0xe];" (assignment_expression "iVar4 = param_1[0xe]" identifier = (subscript_expression "param_1[0xe]" identifier [ number_literal ])) ;) (expression_statement "param_1[0xe] = iVar4 + -1;" (assignment_expression "param_1[0xe] = iVar4 + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "*param_6 = iVar4 + -1;" (assignment_expression "*param_6 = iVar4 + -1" (pointer_expression "*param_6" * identifier) = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);" (call_expression "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) , (pointer_expression "*param_6" * identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) }))) })) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" if (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" ( (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" ( (binary_expression "param_5 == 0" identifier == number_literal) )) || (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" ( (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" ( (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" * (cast_expression "(byte *)(param_2 + 0x37)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x37)" ( (binary_expression "param_2 + 0x37" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x34)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x34)" * (cast_expression "(ushort *)(param_2 + 0x34)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" else (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" { (expression_statement "uVar1 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x32)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x32)" * (cast_expression "(ushort *)(param_2 + 0x32)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x32)" ( (binary_expression "param_2 + 0x32" identifier + number_literal) ))))) ;) }))) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" identifier = (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);" (assignment_expression "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x7350)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x7350)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x7350)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x7350" identifier + number_literal) )))) )) (argument_list "(param_1,uVar7)" ( identifier , identifier )))) ;) (if_statement "if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" { (if_statement "if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" if (parenthesized_expression "(iVar4 == param_8)" ( (binary_expression "iVar4 == param_8" identifier == identifier) )) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" { (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" if (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" ( (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" * (cast_expression "(int *)(param_7 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 0x24)" ( (binary_expression "param_7 + 0x24" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        param_7 = 0;\n      }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n      param_7 = 0;\n    }" else (compound_statement "{\n      param_7 = 0;\n    }" { (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" identifier = number_literal) ;) }))) })) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (if_statement "if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" { (expression_statement "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708)" identifier = (cast_expression "(code *)(PTR_LAB_0015c718 + 0x2708)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c718 + 0x2708)" ( (binary_expression "PTR_LAB_0015c718 + 0x2708" identifier + number_literal) )))) ;) (expression_statement "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc)" identifier = (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x4fcc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x4fcc)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x4fcc" identifier + number_literal) )))) ;) (do_statement "do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);" do (compound_statement "{\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    }" { (while_statement "while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" { (expression_statement "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);" (assignment_expression "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" identifier = (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" * (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 4) + uVar6 * 2)" ( (binary_expression "*(int *)(param_2 + 4) + uVar6 * 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) )))) + (binary_expression "uVar6 * 2" identifier * number_literal)) )))))) ;) (if_statement "if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;" if (parenthesized_expression "(((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2))" ( (binary_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)" (parenthesized_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5))" ( (binary_expression "(param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) && (parenthesized_expression "(*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" ( (binary_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5" (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" * (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_7 + 4) + uVar6 * 2)" ( (binary_expression "*(int *)(param_7 + 4) + uVar6 * 2" (pointer_expression "*(int *)(param_7 + 4)" * (cast_expression "(int *)(param_7 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_7 + 4)" ( (binary_expression "param_7 + 4" identifier + number_literal) )))) + (binary_expression "uVar6 * 2" identifier * number_literal)) )))) == identifier) ))) )) && (parenthesized_expression "(iVar5 != -2)" ( (binary_expression "iVar5 != -2" identifier != number_literal) ))) )) (break_statement "break;" break ;)) (if_statement "if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" if (parenthesized_expression "(iVar5 == -2)" ( (binary_expression "iVar5 == -2" identifier == number_literal) )) (compound_statement "{\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }" { (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);" (call_expression "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" identifier (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" ( (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14" (pointer_expression "*(int *)(param_2 + 0x28)" * (cast_expression "(int *)(param_2 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) + (binary_expression "uVar6 * 0x14" identifier * number_literal)) + number_literal) )))) , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" else (compound_statement "{\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" { (expression_statement "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);" (call_expression "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , identifier , identifier , (binary_expression "iVar4 + uVar6" identifier + identifier) ))) ;) }))) (expression_statement "iVar5 = puVar9[0x1b];" (assignment_expression "iVar5 = puVar9[0x1b]" identifier = (subscript_expression "puVar9[0x1b]" identifier [ number_literal ])) ;) (if_statement "if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" if (parenthesized_expression "((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'))" ( (binary_expression "(0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) && (parenthesized_expression "(*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" ( (binary_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'" (pointer_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" * (cast_expression "(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" ( (binary_expression "puVar9[0x1a] + iVar5 * 0x14 + -0x14" (binary_expression "puVar9[0x1a] + iVar5 * 0x14" (subscript_expression "puVar9[0x1a]" identifier [ number_literal ]) + (binary_expression "iVar5 * 0x14" identifier * number_literal)) + number_literal) )))) == (char_literal "'T'" ' character ')) ))) )) (compound_statement "{\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" { (expression_statement "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);" (call_expression "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(*puVar9,puVar9 + 0x1a,iVar5 + -1)" ( (pointer_expression "*puVar9" * identifier) , (binary_expression "puVar9 + 0x1a" identifier + number_literal) , (binary_expression "iVar5 + -1" identifier + number_literal) ))) ;) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar6) goto LAB_000c7e44;" if (parenthesized_expression "(uVar7 == uVar6)" ( (binary_expression "uVar7 == uVar6" identifier == identifier) )) (goto_statement "goto LAB_000c7e44;" goto statement_identifier ;)) })) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" identifier = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != uVar6)" ( (binary_expression "uVar7 != uVar6" identifier != identifier) )) ;) })) (labeled_statement "LAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" statement_identifier : (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" if (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" ( (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" ( (binary_expression "param_4 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" ( (comma_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))" ( (pointer_expression "*(code *)(PTR_LAB_0015c714 + -0x2f60)" * (cast_expression "(code *)(PTR_LAB_0015c714 + -0x2f60)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c714 + -0x2f60)" ( (binary_expression "PTR_LAB_0015c714 + -0x2f60" identifier + number_literal) )))) )) (argument_list "(puVar9,0x66,iVar4,uVar7,param_4)" ( identifier , number_literal , identifier , identifier , identifier ))) , (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" * (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" ( (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" { (expression_statement "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);" (assignment_expression "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" identifier = (call_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6dc + -0xde8)" * (cast_expression "(code *)(PTR_LAB_0015c6dc + -0xde8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6dc + -0xde8)" ( (binary_expression "PTR_LAB_0015c6dc + -0xde8" identifier + number_literal) )))) )) (argument_list "(*param_1,param_2)" ( (pointer_expression "*param_1" * identifier) , identifier )))) ;) (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + 0x4a40)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + 0x4a40)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + 0x4a40)" ( (binary_expression "PTR_LAB_0015c6c4 + 0x4a40" identifier + number_literal) )))) )) (argument_list "(puVar9,0xffffffff,uVar3,0)" ( identifier , number_literal , identifier , number_literal ))) ;) }))) (if_statement "if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" if (parenthesized_expression "(uVar7 == 1)" ( (binary_expression "uVar7 == 1" identifier == number_literal) )) (compound_statement "{\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" { (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))" ( (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x72d0)" * (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x72d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x72d0)" ( (binary_expression "PTR_LAB_0015c6c4 + -0x72d0" identifier + number_literal) )))) )) (argument_list "(param_1,iVar4)" ( identifier , identifier ))) ;) (return_statement "return iVar4;" return identifier ;) })) (if_statement "if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" if (parenthesized_expression "((int)param_1[7] < (int)uVar7)" ( (binary_expression "(int)param_1[7] < (int)uVar7" (cast_expression "(int)param_1[7]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[7]" identifier [ number_literal ])) < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" { (expression_statement "param_1[7] = uVar7;" (assignment_expression "param_1[7] = uVar7" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[8] = iVar4;" (assignment_expression "param_1[8] = iVar4" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (pointer_expression * IDENT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (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 (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (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)) )))) == IDENT) ))) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) )))) , (binary_expression IDENT + IDENT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }) (else_clause else (compound_statement { (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) )))) , IDENT , IDENT , (binary_expression IDENT + IDENT) ))) ;) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) == (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (pointer_expression * IDENT) , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , LIT , IDENT , IDENT , IDENT ))) , (binary_expression (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) )))) + LIT) )))) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( (pointer_expression * IDENT) , IDENT )))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , LIT , IDENT , LIT ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT , IDENT ))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (return_statement return IDENT ;) })))
(function_definition "int FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)\n\n{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" (primitive_type "int") (function_declarator "FUN_000c7c54(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" (identifier "FUN_000c7c54") (parameter_list "(undefined4 *param_1,int param_2,int param_3,int param_4,int param_5,int *param_6,\n                int param_7,int param_8)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int *param_6" (primitive_type "int") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) (, ",") (parameter_declaration "int param_8" (primitive_type "int") (identifier "param_8")) () ")"))) (compound_statement "{\n  ushort uVar1;\n  code *pcVar2;\n  undefined4 uVar3;\n  int iVar4;\n  int iVar5;\n  uint uVar6;\n  uint uVar7;\n  code *pcVar8;\n  undefined4 *puVar9;\n  \n  puVar9 = (undefined4 *)param_1[2];\n  if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }\n  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }\n  uVar7 = (uint)uVar1;\n  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);\n  if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }\n  uVar6 = 0;\n  if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }\nLAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }\n  if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }\n  if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }\n  return iVar4;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "code *pcVar2;" (type_identifier "code") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "code *pcVar8;" (type_identifier "code") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "undefined4 *puVar9;" (type_identifier "undefined4") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = (undefined4 *)param_1[2];" (assignment_expression "puVar9 = (undefined4 *)param_1[2]" (identifier "puVar9") (= "=") (cast_expression "(undefined4 *)param_1[2]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (param_6 != (int *)0x0) {\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_6 != (int *)0x0)" (( "(") (binary_expression "param_6 != (int *)0x0" (identifier "param_6") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }\n  }" ({ "{") (if_statement "if (*(int *)(param_2 + 0x24) == 0) {\n      *param_6 = 0;\n    }\n    else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x24) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x24) == 0" (pointer_expression "*(int *)(param_2 + 0x24)" (* "*") (cast_expression "(int *)(param_2 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      *param_6 = 0;\n    }" ({ "{") (expression_statement "*param_6 = 0;" (assignment_expression "*param_6 = 0" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" (else "else") (compound_statement "{\n      iVar4 = param_1[0xe];\n      param_1[0xe] = iVar4 + -1;\n      *param_6 = iVar4 + -1;\n      param_1[0xd] = param_3 + 1;\n      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);\n      param_1[0xd] = 0;\n    }" ({ "{") (expression_statement "iVar4 = param_1[0xe];" (assignment_expression "iVar4 = param_1[0xe]" (identifier "iVar4") (= "=") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]"))) (; ";")) (expression_statement "param_1[0xe] = iVar4 + -1;" (assignment_expression "param_1[0xe] = iVar4 + -1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*param_6 = iVar4 + -1;" (assignment_expression "*param_6 = iVar4 + -1" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);" (call_expression "FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" (identifier "FUN_000c7b5c") (argument_list "(param_1,*(undefined4 *)(param_2 + 0x24),*param_6)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (, ",") (pointer_expression "*param_6" (* "*") (identifier "param_6")) () ")"))) (; ";")) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (if_statement "if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }\n  else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" (if "if") (parenthesized_expression "((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0))" (( "(") (binary_expression "(param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (parenthesized_expression "(param_5 == 0)" (( "(") (binary_expression "param_5 == 0" (identifier "param_5") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(param_2 + 0x37) & 0x10) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 0x37) & 0x10) == 0" (parenthesized_expression "(*(byte *)(param_2 + 0x37) & 0x10)" (( "(") (binary_expression "*(byte *)(param_2 + 0x37) & 0x10" (pointer_expression "*(byte *)(param_2 + 0x37)" (* "*") (cast_expression "(byte *)(param_2 + 0x37)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x37)" (( "(") (binary_expression "param_2 + 0x37" (identifier "param_2") (+ "+") (number_literal "0x37")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x34);\n  }" ({ "{") (expression_statement "uVar1 = *(ushort *)(param_2 + 0x34);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x34)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x34)" (* "*") (cast_expression "(ushort *)(param_2 + 0x34)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" (else "else") (compound_statement "{\n    uVar1 = *(ushort *)(param_2 + 0x32);\n  }" ({ "{") (expression_statement "uVar1 = *(ushort *)(param_2 + 0x32);" (assignment_expression "uVar1 = *(ushort *)(param_2 + 0x32)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x32)" (* "*") (cast_expression "(ushort *)(param_2 + 0x32)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x32)" (( "(") (binary_expression "param_2 + 0x32" (identifier "param_2") (+ "+") (number_literal "0x32")) () ")"))))) (; ";")) (} "}")))) (expression_statement "uVar7 = (uint)uVar1;" (assignment_expression "uVar7 = (uint)uVar1" (identifier "uVar7") (= "=") (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1"))) (; ";")) (expression_statement "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);" (assignment_expression "iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" (identifier "iVar4") (= "=") (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x7350))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x7350)" (* "*") (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x7350)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x7350)" (( "(") (binary_expression "PTR_LAB_0015c6c4 + -0x7350" (identifier "PTR_LAB_0015c6c4") (+ "+") (number_literal "-0x7350")) () ")")))) () ")")) (argument_list "(param_1,uVar7)" (( "(") (identifier "param_1") (, ",") (identifier "uVar7") () ")")))) (; ";")) (if_statement "if (param_7 != 0) {\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" (if "if") (parenthesized_expression "(param_7 != 0)" (( "(") (binary_expression "param_7 != 0" (identifier "param_7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }\n  }" ({ "{") (if_statement "if (iVar4 == param_8) {\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }\n    else {\n      param_7 = 0;\n    }" (if "if") (parenthesized_expression "(iVar4 == param_8)" (( "(") (binary_expression "iVar4 == param_8" (identifier "iVar4") (== "==") (identifier "param_8")) () ")")) (compound_statement "{\n      if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }\n    }" ({ "{") (if_statement "if (*(int *)(param_7 + 0x24) != 0) {\n        param_7 = 0;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_7 + 0x24) != 0)" (( "(") (binary_expression "*(int *)(param_7 + 0x24) != 0" (pointer_expression "*(int *)(param_7 + 0x24)" (* "*") (cast_expression "(int *)(param_7 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 0x24)" (( "(") (binary_expression "param_7 + 0x24" (identifier "param_7") (+ "+") (number_literal "0x24")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        param_7 = 0;\n      }" ({ "{") (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" (identifier "param_7") (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      param_7 = 0;\n    }" (else "else") (compound_statement "{\n      param_7 = 0;\n    }" ({ "{") (expression_statement "param_7 = 0;" (assignment_expression "param_7 = 0" (identifier "param_7") (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar7 != 0) {\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" (if "if") (parenthesized_expression "(uVar7 != 0)" (( "(") (binary_expression "uVar7 != 0" (identifier "uVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);\n    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);\n    do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);\n  }" ({ "{") (expression_statement "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708)" (identifier "pcVar8") (= "=") (cast_expression "(code *)(PTR_LAB_0015c718 + 0x2708)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c718 + 0x2708)" (( "(") (binary_expression "PTR_LAB_0015c718 + 0x2708" (identifier "PTR_LAB_0015c718") (+ "+") (number_literal "0x2708")) () ")")))) (; ";")) (expression_statement "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);" (assignment_expression "pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc)" (identifier "pcVar2") (= "=") (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x4fcc)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x4fcc)" (( "(") (binary_expression "PTR_LAB_0015c6c4 + -0x4fcc" (identifier "PTR_LAB_0015c6c4") (+ "+") (number_literal "-0x4fcc")) () ")")))) (; ";")) (do_statement "do {\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    } while (uVar7 != uVar6);" (do "do") (compound_statement "{\n      while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }\n      uVar6 = uVar6 + 1;\n    }" ({ "{") (while_statement "while( true ) {\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);\n        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;\n        if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }\n        iVar5 = puVar9[0x1b];\n        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }\n        uVar6 = uVar6 + 1;\n        if (uVar7 == uVar6) goto LAB_000c7e44;\n      }" ({ "{") (expression_statement "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);" (assignment_expression "iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" (identifier "iVar5") (= "=") (cast_expression "(int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_2 + 4) + uVar6 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 4) + uVar6 * 2)" (( "(") (binary_expression "*(int *)(param_2 + 4) + uVar6 * 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")) () ")")))) (+ "+") (binary_expression "uVar6 * 2" (identifier "uVar6") (* "*") (number_literal "2"))) () ")")))))) (; ";")) (if_statement "if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)) break;" (if "if") (parenthesized_expression "(((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2))" (( "(") (binary_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&\n           (iVar5 != -2)" (parenthesized_expression "((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5))" (( "(") (binary_expression "(param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" (parenthesized_expression "(param_7 != 0)" (( "(") (binary_expression "param_7 != 0" (identifier "param_7") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)" (( "(") (binary_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5" (pointer_expression "*(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" (* "*") (cast_expression "(short *)(*(int *)(param_7 + 4) + uVar6 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_7 + 4) + uVar6 * 2)" (( "(") (binary_expression "*(int *)(param_7 + 4) + uVar6 * 2" (pointer_expression "*(int *)(param_7 + 4)" (* "*") (cast_expression "(int *)(param_7 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_7 + 4)" (( "(") (binary_expression "param_7 + 4" (identifier "param_7") (+ "+") (number_literal "4")) () ")")))) (+ "+") (binary_expression "uVar6 * 2" (identifier "uVar6") (* "*") (number_literal "2"))) () ")")))) (== "==") (identifier "iVar5")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(iVar5 != -2)" (( "(") (binary_expression "iVar5 != -2" (identifier "iVar5") (!= "!=") (number_literal "-2")) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (iVar5 == -2) {\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }\n        else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" (if "if") (parenthesized_expression "(iVar5 == -2)" (( "(") (binary_expression "iVar5 == -2" (identifier "iVar5") (== "==") (number_literal "-2")) () ")")) (compound_statement "{\n          param_1[0xd] = param_3 + 1;\n          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);\n          param_1[0xd] = 0;\n        }" ({ "{") (expression_statement "param_1[0xd] = param_3 + 1;" (assignment_expression "param_1[0xd] = param_3 + 1" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6);" (call_expression "FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" (identifier "FUN_000c2870") (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),\n                       iVar4 + uVar6)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" (* "*") (cast_expression "(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4" (binary_expression "*(int *)(param_2 + 0x28) + uVar6 * 0x14" (pointer_expression "*(int *)(param_2 + 0x28)" (* "*") (cast_expression "(int *)(param_2 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (binary_expression "uVar6 * 0x14" (identifier "uVar6") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "4")) () ")")))) (, ",") (binary_expression "iVar4 + uVar6" (identifier "iVar4") (+ "+") (identifier "uVar6")) () ")"))) (; ";")) (expression_statement "param_1[0xd] = 0;" (assignment_expression "param_1[0xd] = 0" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" (else "else") (compound_statement "{\n          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);\n        }" ({ "{") (expression_statement "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);" (call_expression "(*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" (parenthesized_expression "(*pcVar8)" (( "(") (pointer_expression "*pcVar8" (* "*") (identifier "pcVar8")) () ")")) (argument_list "(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6)" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (identifier "param_3") (, ",") (identifier "iVar5") (, ",") (binary_expression "iVar4 + uVar6" (identifier "iVar4") (+ "+") (identifier "uVar6")) () ")"))) (; ";")) (} "}")))) (expression_statement "iVar5 = puVar9[0x1b];" (assignment_expression "iVar5 = puVar9[0x1b]" (identifier "iVar5") (= "=") (subscript_expression "puVar9[0x1b]" (identifier "puVar9") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (if_statement "if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" (if "if") (parenthesized_expression "((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'))" (( "(") (binary_expression "(0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')" (( "(") (binary_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T'" (pointer_expression "*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" (* "*") (cast_expression "(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9[0x1a] + iVar5 * 0x14 + -0x14)" (( "(") (binary_expression "puVar9[0x1a] + iVar5 * 0x14 + -0x14" (binary_expression "puVar9[0x1a] + iVar5 * 0x14" (subscript_expression "puVar9[0x1a]" (identifier "puVar9") ([ "[") (number_literal "0x1a") (] "]")) (+ "+") (binary_expression "iVar5 * 0x14" (identifier "iVar5") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "-0x14")) () ")")))) (== "==") (char_literal "'T'" (' "'") (character "T") (' "'"))) () ")"))) () ")")) (compound_statement "{\n          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);\n        }" ({ "{") (expression_statement "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);" (call_expression "(*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1)" (parenthesized_expression "(*pcVar2)" (( "(") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) () ")")) (argument_list "(*puVar9,puVar9 + 0x1a,iVar5 + -1)" (( "(") (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (, ",") (binary_expression "puVar9 + 0x1a" (identifier "puVar9") (+ "+") (number_literal "0x1a")) (, ",") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar7 == uVar6) goto LAB_000c7e44;" (if "if") (parenthesized_expression "(uVar7 == uVar6)" (( "(") (binary_expression "uVar7 == uVar6" (identifier "uVar7") (== "==") (identifier "uVar6")) () ")")) (goto_statement "goto LAB_000c7e44;" (goto "goto") (statement_identifier "LAB_000c7e44") (; ";"))) (} "}"))) (expression_statement "uVar6 = uVar6 + 1;" (assignment_expression "uVar6 = uVar6 + 1" (identifier "uVar6") (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar7 != uVar6)" (( "(") (binary_expression "uVar7 != uVar6" (identifier "uVar7") (!= "!=") (identifier "uVar6")) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_000c7e44:\n  if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" (statement_identifier "LAB_000c7e44") (: ":") (if_statement "if ((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" (if "if") (parenthesized_expression "((param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0))" (( "(") (binary_expression "(param_4 != 0) &&\n     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (parenthesized_expression "(param_4 != 0)" (( "(") (binary_expression "param_4 != 0" (identifier "param_4") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)" (( "(") (comma_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),\n     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (call_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c714 + -0x2f60))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0015c714 + -0x2f60)" (* "*") (cast_expression "(code *)(PTR_LAB_0015c714 + -0x2f60)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c714 + -0x2f60)" (( "(") (binary_expression "PTR_LAB_0015c714 + -0x2f60" (identifier "PTR_LAB_0015c714") (+ "+") (number_literal "-0x2f60")) () ")")))) () ")")) (argument_list "(puVar9,0x66,iVar4,uVar7,param_4)" (( "(") (identifier "puVar9") (, ",") (number_literal "0x66") (, ",") (identifier "iVar4") (, ",") (identifier "uVar7") (, ",") (identifier "param_4") () ")"))) (, ",") (binary_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0" (pointer_expression "*(int *)(*(int *)(param_2 + 0xc) + 0xc)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 0xc) + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0xc) + 0xc)" (( "(") (binary_expression "*(int *)(param_2 + 0xc) + 0xc" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);\n    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);\n  }" ({ "{") (expression_statement "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);" (assignment_expression "uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" (identifier "uVar3") (= "=") (call_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6dc + -0xde8))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0015c6dc + -0xde8)" (* "*") (cast_expression "(code *)(PTR_LAB_0015c6dc + -0xde8)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c6dc + -0xde8)" (( "(") (binary_expression "PTR_LAB_0015c6dc + -0xde8" (identifier "PTR_LAB_0015c6dc") (+ "+") (number_literal "-0xde8")) () ")")))) () ")")) (argument_list "(*param_1,param_2)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + 0x4a40))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + 0x4a40)" (* "*") (cast_expression "(code *)(PTR_LAB_0015c6c4 + 0x4a40)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c6c4 + 0x4a40)" (( "(") (binary_expression "PTR_LAB_0015c6c4 + 0x4a40" (identifier "PTR_LAB_0015c6c4") (+ "+") (number_literal "0x4a40")) () ")")))) () ")")) (argument_list "(puVar9,0xffffffff,uVar3,0)" (( "(") (identifier "puVar9") (, ",") (number_literal "0xffffffff") (, ",") (identifier "uVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (} "}")))) (if_statement "if (uVar7 == 1) {\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" (if "if") (parenthesized_expression "(uVar7 == 1)" (( "(") (binary_expression "uVar7 == 1" (identifier "uVar7") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);\n    return iVar4;\n  }" ({ "{") (expression_statement "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);" (call_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4)" (parenthesized_expression "(*(code *)(PTR_LAB_0015c6c4 + -0x72d0))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0015c6c4 + -0x72d0)" (* "*") (cast_expression "(code *)(PTR_LAB_0015c6c4 + -0x72d0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0015c6c4 + -0x72d0)" (( "(") (binary_expression "PTR_LAB_0015c6c4 + -0x72d0" (identifier "PTR_LAB_0015c6c4") (+ "+") (number_literal "-0x72d0")) () ")")))) () ")")) (argument_list "(param_1,iVar4)" (( "(") (identifier "param_1") (, ",") (identifier "iVar4") () ")"))) (; ";")) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (if_statement "if ((int)param_1[7] < (int)uVar7) {\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" (if "if") (parenthesized_expression "((int)param_1[7] < (int)uVar7)" (( "(") (binary_expression "(int)param_1[7] < (int)uVar7" (cast_expression "(int)param_1[7]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]"))) (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n    param_1[7] = uVar7;\n    param_1[8] = iVar4;\n  }" ({ "{") (expression_statement "param_1[7] = uVar7;" (assignment_expression "param_1[7] = uVar7" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "param_1[8] = iVar4;" (assignment_expression "param_1[8] = iVar4" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "iVar4")) (; ";")) (} "}"))) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (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))))) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (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))))) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) 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: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) 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)))))) right: (identifier))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) alternative: (else_clause (compound_statement (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))))) (identifier) (identifier) (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) right: (char_literal (character)))))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (call_expression function: (parenthesized_expression (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)))))) arguments: (argument_list (identifier) (number_literal) (identifier) (identifier) (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: (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)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier))))) (expression_statement (call_expression function: (parenthesized_expression (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)))))) arguments: (argument_list (identifier) (number_literal) (identifier) (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (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)))))) arguments: (argument_list (identifier) (identifier)))) (return_statement (identifier)))) (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: (identifier)))) consequence: (compound_statement (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))))) (return_statement (identifier)))))

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

{
  ushort uVar1;
  code *pcVar2;
  undefined4 uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  uint uVar7;
  code *pcVar8;
  undefined4 *puVar9;
  
  puVar9 = (undefined4 *)param_1[2];
  if (param_6 != (int *)0x0) {
    if (*(int *)(param_2 + 0x24) == 0) {
      *param_6 = 0;
    }
    else {
      iVar4 = param_1[0xe];
      param_1[0xe] = iVar4 + -1;
      *param_6 = iVar4 + -1;
      param_1[0xd] = param_3 + 1;
      FUN_000c7b5c(param_1,*(undefined4 *)(param_2 + 0x24),*param_6);
      param_1[0xd] = 0;
    }
  }
  if ((param_5 == 0) || ((*(byte *)(param_2 + 0x37) & 0x10) == 0)) {
    uVar1 = *(ushort *)(param_2 + 0x34);
  }
  else {
    uVar1 = *(ushort *)(param_2 + 0x32);
  }
  uVar7 = (uint)uVar1;
  iVar4 = (*(code *)(PTR_LAB_0015c6c4 + -0x7350))(param_1,uVar7);
  if (param_7 != 0) {
    if (iVar4 == param_8) {
      if (*(int *)(param_7 + 0x24) != 0) {
        param_7 = 0;
      }
    }
    else {
      param_7 = 0;
    }
  }
  uVar6 = 0;
  if (uVar7 != 0) {
    pcVar8 = (code *)(PTR_LAB_0015c718 + 0x2708);
    pcVar2 = (code *)(PTR_LAB_0015c6c4 + -0x4fcc);
    do {
      while( true ) {
        iVar5 = (int)*(short *)(*(int *)(param_2 + 4) + uVar6 * 2);
        if (((param_7 != 0) && (*(short *)(*(int *)(param_7 + 4) + uVar6 * 2) == iVar5)) &&
           (iVar5 != -2)) break;
        if (iVar5 == -2) {
          param_1[0xd] = param_3 + 1;
          FUN_000c2870(param_1,*(undefined4 *)(*(int *)(param_2 + 0x28) + uVar6 * 0x14 + 4),
                       iVar4 + uVar6);
          param_1[0xd] = 0;
        }
        else {
          (*pcVar8)(param_1[2],*(undefined4 *)(param_2 + 0xc),param_3,iVar5,iVar4 + uVar6);
        }
        iVar5 = puVar9[0x1b];
        if ((0 < iVar5) && (*(char *)(puVar9[0x1a] + iVar5 * 0x14 + -0x14) == 'T')) {
          (*pcVar2)(*puVar9,puVar9 + 0x1a,iVar5 + -1);
        }
        uVar6 = uVar6 + 1;
        if (uVar7 == uVar6) goto LAB_000c7e44;
      }
      uVar6 = uVar6 + 1;
    } while (uVar7 != uVar6);
  }
LAB_000c7e44:
  if ((param_4 != 0) &&
     ((*(code *)(PTR_LAB_0015c714 + -0x2f60))(puVar9,0x66,iVar4,uVar7,param_4),
     *(int *)(*(int *)(param_2 + 0xc) + 0xc) != 0)) {
    uVar3 = (*(code *)(PTR_LAB_0015c6dc + -0xde8))(*param_1,param_2);
    (*(code *)(PTR_LAB_0015c6c4 + 0x4a40))(puVar9,0xffffffff,uVar3,0);
  }
  if (uVar7 == 1) {
    (*(code *)(PTR_LAB_0015c6c4 + -0x72d0))(param_1,iVar4);
    return iVar4;
  }
  if ((int)param_1[7] < (int)uVar7) {
    param_1[7] = uVar7;
    param_1[8] = iVar4;
  }
  return iVar4;
}

