
/* WARNING: Type propagation algorithm not settling */

char * columnTypeImpl(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol
                     )

{
  int iVar1;
  int iVar2;
  Select *pSVar3;
  char *pcVar4;
  int *piVar5;
  int iVar6;
  int iVar7;
  SrcList *pSVar8;
  int iVar9;
  sqlite3 *db;
  Table *pTVar10;
  char *zOrigDb;
  char *zOrigTab;
  char *zOrigCol;
  NameContext sNC;
  
  iVar1 = *(int *)PTR___stack_chk_guard_0018fecc;
  zOrigDb = (char *)0x0;
  zOrigTab = (char *)0x0;
  zOrigCol = (char *)0x0;
  if (pExpr->op == '\x7f') {
    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;
    sNC.pParse = pNC->pParse;
    sNC.pNext = pNC;
    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,
                            &zOrigCol);
  }
  else if (pExpr->op == 0x9e) {
    iVar9 = pExpr->iColumn;
    if (pNC == (NameContext *)0x0) {
      pcVar4 = (char *)0x0;
    }
    else {
      do {
        while( true ) {
          pSVar8 = pNC->pSrcList;
          if (pSVar8->nSrc < 1) break;
          if (pSVar8->a[0].iCursor == pExpr->iTable) {
            iVar2 = 0;
            iVar6 = 0;
          }
          else {
            iVar6 = 1;
            piVar5 = &pSVar8[1].a[0].regResult;
            do {
              iVar2 = iVar6;
              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;
              iVar7 = *piVar5;
              iVar6 = iVar2 + 1;
              piVar5 = piVar5 + 0x12;
            } while (iVar7 != pExpr->iTable);
            iVar6 = iVar2 << 3;
          }
          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];
          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];
          if (pTVar10 != (Table *)0x0) {
            if (pSVar3 == (Select *)0x0) {
              if (iVar9 < 0) {
                iVar9 = (int)pTVar10->iPKey;
                if (-1 < iVar9) goto LAB_0005c288;
                zOrigCol = PTR_LAB_0018f958 + 0x4e24;
                pcVar4 = PTR_LAB_0018f958 + 0x2e40;
              }
              else {
LAB_0005c288:
                zOrigCol = pTVar10->aCol[iVar9].zName;
                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);
              }
              zOrigTab = pTVar10->zName;
              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {
                db = pNC->pParse->db;
                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);
                zOrigDb = db->aDb[iVar9].zDbSName;
              }
            }
            else {
              pcVar4 = (char *)0x0;
              if (-1 < iVar9) {
                if (iVar9 < pSVar3->pEList->nExpr) {
                  sNC.pSrcList = pSVar3->pSrc;
                  sNC.pParse = pNC->pParse;
                  sNC.pNext = pNC;
                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,
                                          &zOrigCol);
                }
                else {
                  pcVar4 = (char *)0x0;
                }
              }
            }
            goto LAB_0005c37c;
          }
        }
LAB_0005c440:
        pNC = pNC->pNext;
      } while (pNC != (NameContext *)0x0);
      pcVar4 = (char *)0x0;
    }
  }
  else {
    pcVar4 = (char *)0x0;
  }
LAB_0005c37c:
  if (pzOrigDb != (char **)0x0) {
    *pzOrigDb = zOrigDb;
    *pzOrigTab = zOrigTab;
    *pzOrigCol = zOrigCol;
  }
  if (iVar1 == *(int *)PTR___stack_chk_guard_0018fecc) {
    return pcVar4;
  }
  pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)();
  return pcVar4;
}



undefined *
FUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)

{
  undefined4 *puVar1;
  uint uVar2;
  int *piVar3;
  int iVar4;
  char *pcVar5;
  int iVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int iVar11;
  undefined4 *puVar12;
  undefined *puVar13;
  undefined4 local_50;
  undefined4 local_4c;
  undefined *local_48;
  int local_44;
  int local_40;
  int *local_38;
  char *local_24;
  char *pcVar6;
  
  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;
  local_50 = 0;
  local_4c = 0;
  local_48 = (undefined *)0x0;
  if (*param_2 == '\x7f') {
    piVar9 = (int *)(param_2 + 0x14);
    param_2 = *(char **)(*(int *)*piVar9 + 4);
    local_40 = ((int *)*piVar9)[8];
    local_44 = *param_1;
    local_38 = param_1;
    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);
  }
  else if (*param_2 == -0x62) {
    iVar10 = *(int *)(param_2 + 0x20);
    if (param_1 == (int *)0x0) {
      puVar13 = (undefined *)0x0;
    }
    else {
      do {
        while( true ) {
          piVar9 = (int *)param_1[1];
          if (*piVar9 < 1) break;
          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {
            iVar11 = 0;
            iVar4 = 0;
          }
          else {
            iVar4 = 1;
            piVar3 = piVar9 + 0x1e;
            do {
              iVar11 = iVar4;
              if (iVar11 == *piVar9) goto LAB_0005c440;
              iVar7 = *piVar3;
              iVar4 = iVar11 + 1;
              piVar3 = piVar3 + 0x12;
            } while (iVar7 != *(int *)(param_2 + 0x1c));
            iVar4 = iVar11 << 3;
          }
          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];
          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];
          if (puVar12 != (undefined4 *)0x0) {
            if (puVar1 == (undefined4 *)0x0) {
              if (iVar10 < 0) {
                iVar10 = (int)*(short *)(puVar12 + 10);
                if (-1 < iVar10) goto LAB_0005c288;
                local_48 = PTR_LAB_0018f958 + 0x4e24;
                puVar13 = PTR_LAB_0018f958 + 0x2e40;
              }
              else {
LAB_0005c288:
                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);
                param_2 = (char *)0x0;
                puVar13 = (undefined *)FUN_0005c124();
              }
              local_4c = *puVar12;
              if (((int *)*param_1 != (int *)0x0) &&
                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {
                iVar11 = *(int *)*param_1;
                iVar10 = FUN_0004a128(iVar11);
                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);
              }
            }
            else {
              puVar13 = (undefined *)0x0;
              if (-1 < iVar10) {
                if (iVar10 < *(int *)*puVar1) {
                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];
                  local_40 = puVar1[8];
                  local_44 = *param_1;
                  local_38 = param_1;
                  puVar13 = (undefined *)
                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);
                }
                else {
                  puVar13 = (undefined *)0x0;
                }
              }
            }
            goto LAB_0005c37c;
          }
        }
LAB_0005c440:
        param_1 = (int *)param_1[3];
      } while (param_1 != (int *)0x0);
      puVar13 = (undefined *)0x0;
    }
  }
  else {
    puVar13 = (undefined *)0x0;
  }
LAB_0005c37c:
  if (param_3 != (undefined4 *)0x0) {
    *param_3 = local_50;
    *param_4 = local_4c;
    *param_5 = local_48;
  }
  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {
    return puVar13;
  }
  pcVar8 = local_24;
  puVar13 = PTR___stack_chk_fail_0018fea0;
  (*(code *)PTR___stack_chk_fail_0018fea0)();
  if (((int)param_2 < 1) &&
     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {
    uVar2 = 0;
  }
  else {
    uVar2 = 0;
    pcVar6 = pcVar8;
    do {
      pcVar5 = pcVar6 + 1;
      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;
      pcVar6 = pcVar5;
    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));
  }
  return (undefined *)(uVar2 & 0x7fffffff);
}


lui gp,0x14
addiu gp,gp,-0x4868
addu gp,gp,t9
addiu sp,sp,-0x70
sw ra,0x6c(sp)
sw s5,0x68(sp)
sw s4,0x64(sp)
sw s3,0x60(sp)
sw s2,0x5c(sp)
sw s1,0x58(sp)
sw s0,0x54(sp)
sw gp,0x18(sp)
or s0,a0,zero
or s1,a2,zero
or s2,a3,zero
lw s3,0x80(sp)
lw v0,-0x7a54(gp)
lw v0,0x0(v0)
sw v0,0x4c(sp)
sw zero,0x20(sp)
sw zero,0x24(sp)
sw zero,0x28(sp)
lbu v0,0x0(a1)
li v1,0x7f
beq v0,v1,0x0005c328
_li v1,0x9e
bne v0,v1,0x0005c378
_nop
bne a0,zero,0x0005c3f8
_lw t1,0x20(a1)
b 0x0005c37c
_or s5,a0,zero
beq v0,zero,0x0005c280
_nop
bltz t1,0x0005c37c
_or s5,zero,zero
lw a0,0x0(v0)
lw v1,0x0(a0)
slt v1,t1,v1
beq v1,zero,0x0005c3d0
_sll v1,t1,0x2
addu v1,v1,t1
sll v1,v1,0x2
addu a0,a0,v1
lw a1,0x4(a0)
lw v0,0x20(v0)
sw v0,0x30(sp)
sw s0,0x38(sp)
lw v0,0x0(s0)
sw v0,0x2c(sp)
addiu v0,sp,0x28
sw v0,0x10(sp)
addiu a3,sp,0x24
addiu a2,sp,0x20
addiu a0,sp,0x2c
lw t9,-0x7d50(gp)
addiu t9,t9,-0x3e78
bal 0x0005c188
_nop
lw gp,0x18(sp)
b 0x0005c37c
_or s5,v0,zero
bltz t1,0x0005c308
_nop
sll t1,t1,0x4
lw a0,0x4(s4)
addu a0,a0,t1
lw v0,0x0(a0)
sw v0,0x28(sp)
or a1,zero,zero
lw t9,-0x7d50(gp)
addiu t9,t9,-0x3edc
bal 0x0005c124
_nop
lw gp,0x18(sp)
or s5,v0,zero
lw v0,0x0(s4)
sw v0,0x24(sp)
lw v0,0x0(s0)
beq v0,zero,0x0005c37c
_nop
lw a1,0x48(s4)
beq a1,zero,0x0005c37c
_lw t9,-0x7d64(gp)
lw s0,0x0(v0)
or a0,s0,zero
addiu t9,t9,-0x5ed8
bal 0x0004a128
_nop
lw gp,0x18(sp)
lw v1,0x10(s0)
sll v0,v0,0x4
addu v1,v1,v0
lw v0,0x0(v1)
b 0x0005c37c
_sw v0,0x20(sp)
lh t1,0x28(s4)
bgez t1,0x0005c288
_lw v0,-0x7fc8(gp)
addiu v0,v0,0x4e24
sw v0,0x28(sp)
lw s5,-0x7fc8(gp)
b 0x0005c2b8
_addiu s5,s5,0x2e40
lw v0,0x14(a1)
lw v1,0x0(v0)
lw a1,0x4(v1)
lw v0,0x20(v0)
sw v0,0x30(sp)
sw a0,0x38(sp)
lw v0,0x0(a0)
sw v0,0x2c(sp)
addiu v0,sp,0x28
sw v0,0x10(sp)
addiu a3,sp,0x24
addiu a2,sp,0x20
addiu a0,sp,0x2c
lw t9,-0x7d50(gp)
addiu t9,t9,-0x3e78
bal 0x0005c188
_nop
lw gp,0x18(sp)
b 0x0005c37c
_or s5,v0,zero
or s5,zero,zero
beq s1,zero,0x0005c398
_lw v0,0x20(sp)
sw v0,0x0(s1)
lw v0,0x24(sp)
sw v0,0x0(s2)
lw v0,0x28(sp)
sw v0,0x0(s3)
or v0,s5,zero
lw a0,0x4c(sp)
lw v1,-0x7a54(gp)
lw v1,0x0(v1)
bne a0,v1,0x0005c454
_lw ra,0x6c(sp)
lw s5,0x68(sp)
lw s4,0x64(sp)
lw s3,0x60(sp)
lw s2,0x5c(sp)
lw s1,0x58(sp)
lw s0,0x54(sp)
jr ra
_addiu sp,sp,0x70
b 0x0005c37c
_or s5,zero,zero
or v0,zero,zero
sll v1,v0,0x3
addu a0,v1,v0
sll a0,a0,0x3
addu a0,t0,a0
lw s4,0x18(a0)
bne s4,zero,0x0005c208
_lw v0,0x1c(a0)
lw t0,0x4(s0)
lw a2,0x0(t0)
blez a2,0x0005c440
_nop
lw a3,0x1c(a1)
lw v0,0x30(t0)
beq v0,a3,0x0005c3d8
_addiu v1,t0,0x78
or v0,zero,zero
addiu v0,v0,0x1
beq v0,a2,0x0005c440
_addiu v1,v1,0x48
lw a0,-0x48(v1)
bne a0,a3,0x0005c420
_addiu v0,v0,0x1
addiu v0,v0,-0x1
b 0x0005c3e0
_sll v1,v0,0x3
lw s0,0xc(s0)
bne s0,zero,0x0005c3f8
_or s5,s0,zero
b 0x0005c37c
_nop
lw t9,-0x7a80(gp)
jalr t9
_nop
(translation_unit "undefined *\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)\n\n{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}\n\n" (function_definition "undefined *\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)\n\n{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" type_identifier (pointer_declarator "*\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" * (function_declarator "FUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" identifier (parameter_list "(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) )))) (compound_statement "{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined4 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "undefined *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "undefined4 local_4c;" type_identifier identifier ;) (declaration "undefined *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "int local_44;" primitive_type identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "int *local_38;" primitive_type (pointer_declarator "*local_38" * identifier) ;) (declaration "char *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "local_24 = *(char **)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_24 = *(char **)PTR___stack_chk_guard_0018fecc" identifier = (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" * (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (expression_statement "local_48 = (undefined *)0x0;" (assignment_expression "local_48 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" if (parenthesized_expression "(*param_2 == '\x7f')" ( (binary_expression "*param_2 == '\x7f'" (pointer_expression "*param_2" * identifier) == (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }" { (expression_statement "piVar9 = (int *)(param_2 + 0x14);" (assignment_expression "piVar9 = (int *)(param_2 + 0x14)" identifier = (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) ;) (expression_statement "param_2 = *(char **)(*(int *)*piVar9 + 4);" (assignment_expression "param_2 = *(char **)(*(int *)*piVar9 + 4)" identifier = (pointer_expression "*(char **)(*(int *)*piVar9 + 4)" * (cast_expression "(char **)(*(int *)*piVar9 + 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*piVar9 + 4)" ( (binary_expression "*(int *)*piVar9 + 4" (pointer_expression "*(int *)*piVar9" * (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier))) + number_literal) ))))) ;) (expression_statement "local_40 = ((int *)*piVar9)[8];" (assignment_expression "local_40 = ((int *)*piVar9)[8]" identifier = (subscript_expression "((int *)*piVar9)[8]" (parenthesized_expression "((int *)*piVar9)" ( (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier)) )) [ number_literal ])) ;) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" identifier = identifier) ;) (expression_statement "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier = (cast_expression "(undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (pointer_expression "&local_44" & identifier) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_4c" & identifier) , (pointer_expression "&local_48" & identifier) ))))) ;) }) (else_clause "else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" else (if_statement "if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" if (parenthesized_expression "(*param_2 == -0x62)" ( (binary_expression "*param_2 == -0x62" (pointer_expression "*param_2" * identifier) == number_literal) )) (compound_statement "{\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }" { (expression_statement "iVar10 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar10 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" if (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      puVar13 = (undefined *)0x0;\n    }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" else (compound_statement "{\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" { (do_statement "do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);" do (compound_statement "{\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      }" { (while_statement "while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" { (expression_statement "piVar9 = (int *)param_1[1];" (assignment_expression "piVar9 = (int *)param_1[1]" identifier = (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (if_statement "if (*piVar9 < 1) break;" if (parenthesized_expression "(*piVar9 < 1)" ( (binary_expression "*piVar9 < 1" (pointer_expression "*piVar9" * identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" if (parenthesized_expression "(piVar9[0xc] == *(int *)(param_2 + 0x1c))" ( (binary_expression "piVar9[0xc] == *(int *)(param_2 + 0x1c)" (subscript_expression "piVar9[0xc]" identifier [ number_literal ]) == (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) )) (compound_statement "{\n            iVar11 = 0;\n            iVar4 = 0;\n          }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" else (compound_statement "{\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" { (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (expression_statement "piVar3 = piVar9 + 0x1e;" (assignment_expression "piVar3 = piVar9 + 0x1e" identifier = (binary_expression "piVar9 + 0x1e" identifier + number_literal)) ;) (do_statement "do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));" do (compound_statement "{\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            }" { (expression_statement "iVar11 = iVar4;" (assignment_expression "iVar11 = iVar4" identifier = identifier) ;) (if_statement "if (iVar11 == *piVar9) goto LAB_0005c440;" if (parenthesized_expression "(iVar11 == *piVar9)" ( (binary_expression "iVar11 == *piVar9" identifier == (pointer_expression "*piVar9" * identifier)) )) (goto_statement "goto LAB_0005c440;" goto statement_identifier ;)) (expression_statement "iVar7 = *piVar3;" (assignment_expression "iVar7 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "iVar4 = iVar11 + 1;" (assignment_expression "iVar4 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = piVar3 + 0x12;" (assignment_expression "piVar3 = piVar3 + 0x12" identifier = (binary_expression "piVar3 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != *(int *)(param_2 + 0x1c))" ( (binary_expression "iVar7 != *(int *)(param_2 + 0x1c)" identifier != (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) )) ;) (expression_statement "iVar4 = iVar11 << 3;" (assignment_expression "iVar4 = iVar11 << 3" identifier = (binary_expression "iVar11 << 3" identifier << number_literal)) ;) }))) (expression_statement "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];" (assignment_expression "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" identifier = (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 6]" identifier [ (binary_expression "(iVar4 + iVar11) * 2 + 6" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" ( (binary_expression "iVar4 + iVar11" identifier + identifier) )) * number_literal) + number_literal) ]))) ;) (expression_statement "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];" (assignment_expression "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" identifier = (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 7]" identifier [ (binary_expression "(iVar4 + iVar11) * 2 + 7" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" ( (binary_expression "iVar4 + iVar11" identifier + identifier) )) * number_literal) + number_literal) ]))) ;) (if_statement "if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" if (parenthesized_expression "(puVar12 != (undefined4 *)0x0)" ( (binary_expression "puVar12 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" { (if_statement "if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" if (parenthesized_expression "(puVar1 == (undefined4 *)0x0)" ( (binary_expression "puVar1 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }" { (if_statement "if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" if (parenthesized_expression "(iVar10 < 0)" ( (binary_expression "iVar10 < 0" identifier < number_literal) )) (compound_statement "{\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }" { (expression_statement "iVar10 = (int)*(short *)(puVar12 + 10);" (assignment_expression "iVar10 = (int)*(short *)(puVar12 + 10)" identifier = (cast_expression "(int)*(short *)(puVar12 + 10)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(puVar12 + 10)" * (cast_expression "(short *)(puVar12 + 10)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + 10)" ( (binary_expression "puVar12 + 10" identifier + number_literal) )))))) ;) (if_statement "if (-1 < iVar10) goto LAB_0005c288;" if (parenthesized_expression "(-1 < iVar10)" ( (binary_expression "-1 < iVar10" number_literal < identifier) )) (goto_statement "goto LAB_0005c288;" goto statement_identifier ;)) (expression_statement "local_48 = PTR_LAB_0018f958 + 0x4e24;" (assignment_expression "local_48 = PTR_LAB_0018f958 + 0x4e24" identifier = (binary_expression "PTR_LAB_0018f958 + 0x4e24" identifier + number_literal)) ;) (expression_statement "puVar13 = PTR_LAB_0018f958 + 0x2e40;" (assignment_expression "puVar13 = PTR_LAB_0018f958 + 0x2e40" identifier = (binary_expression "PTR_LAB_0018f958 + 0x2e40" identifier + number_literal)) ;) }) (else_clause "else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" else (compound_statement "{\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" { (labeled_statement "LAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" statement_identifier : (expression_statement "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" (assignment_expression "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10)" identifier = (pointer_expression "*(undefined **)(puVar12[1] + iVar10 * 0x10)" * (cast_expression "(undefined **)(puVar12[1] + iVar10 * 0x10)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12[1] + iVar10 * 0x10)" ( (binary_expression "puVar12[1] + iVar10 * 0x10" (subscript_expression "puVar12[1]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0x10" identifier * number_literal)) ))))) ;)) (expression_statement "param_2 = (char *)0x0;" (assignment_expression "param_2 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar13 = (undefined *)FUN_0005c124();" (assignment_expression "puVar13 = (undefined *)FUN_0005c124()" identifier = (cast_expression "(undefined *)FUN_0005c124()" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c124()" identifier (argument_list "()" ( ))))) ;) }))) (expression_statement "local_4c = *puVar12;" (assignment_expression "local_4c = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) (if_statement "if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" if (parenthesized_expression "(((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0))" ( (binary_expression "((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" (parenthesized_expression "((int *)*param_1 != (int *)0x0)" ( (binary_expression "(int *)*param_1 != (int *)0x0" (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" ( (comma_expression "param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0" (assignment_expression "param_2 = (char *)puVar12[0x12]" identifier = (cast_expression "(char *)puVar12[0x12]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar12[0x12]" identifier [ number_literal ]))) , (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" { (expression_statement "iVar11 = *(int *)*param_1;" (assignment_expression "iVar11 = *(int *)*param_1" identifier = (pointer_expression "*(int *)*param_1" * (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (expression_statement "iVar10 = FUN_0004a128(iVar11);" (assignment_expression "iVar10 = FUN_0004a128(iVar11)" identifier = (call_expression "FUN_0004a128(iVar11)" identifier (argument_list "(iVar11)" ( identifier )))) ;) (expression_statement "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);" (assignment_expression "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" identifier = (pointer_expression "*(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" * (cast_expression "(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" ( (binary_expression "*(int *)(iVar11 + 0x10) + iVar10 * 0x10" (pointer_expression "*(int *)(iVar11 + 0x10)" * (cast_expression "(int *)(iVar11 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x10)" ( (binary_expression "iVar11 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar10 * 0x10" identifier * number_literal)) ))))) ;) })) }) (else_clause "else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" else (compound_statement "{\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" if (parenthesized_expression "(-1 < iVar10)" ( (binary_expression "-1 < iVar10" number_literal < identifier) )) (compound_statement "{\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" { (if_statement "if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }" if (parenthesized_expression "(iVar10 < *(int *)*puVar1)" ( (binary_expression "iVar10 < *(int *)*puVar1" identifier < (pointer_expression "*(int *)*puVar1" * (cast_expression "(int *)*puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier)))) )) (compound_statement "{\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }" { (expression_statement "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];" (assignment_expression "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1]" identifier = (cast_expression "(char *)((int *)*puVar1)[iVar10 * 5 + 1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "((int *)*puVar1)[iVar10 * 5 + 1]" (parenthesized_expression "((int *)*puVar1)" ( (cast_expression "(int *)*puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier)) )) [ (binary_expression "iVar10 * 5 + 1" (binary_expression "iVar10 * 5" identifier * number_literal) + number_literal) ]))) ;) (expression_statement "local_40 = puVar1[8];" (assignment_expression "local_40 = puVar1[8]" identifier = (subscript_expression "puVar1[8]" identifier [ number_literal ])) ;) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" identifier = identifier) ;) (expression_statement "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier = (cast_expression "(undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (pointer_expression "&local_44" & identifier) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_4c" & identifier) , (pointer_expression "&local_48" & identifier) ))))) ;) }) (else_clause "else {\n                  puVar13 = (undefined *)0x0;\n                }" else (compound_statement "{\n                  puVar13 = (undefined *)0x0;\n                }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) }))) (goto_statement "goto LAB_0005c37c;" goto statement_identifier ;) })) })) (labeled_statement "LAB_0005c440:\n        param_1 = (int *)param_1[3];" statement_identifier : (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;)) }) while (parenthesized_expression "(param_1 != (int *)0x0)" ( (binary_expression "param_1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }) (else_clause "else {\n    puVar13 = (undefined *)0x0;\n  }" else (compound_statement "{\n    puVar13 = (undefined *)0x0;\n  }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (labeled_statement "LAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" statement_identifier : (if_statement "if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" if (parenthesized_expression "(param_3 != (undefined4 *)0x0)" ( (binary_expression "param_3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" { (expression_statement "*param_3 = local_50;" (assignment_expression "*param_3 = local_50" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*param_4 = local_4c;" (assignment_expression "*param_4 = local_4c" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "*param_5 = local_48;" (assignment_expression "*param_5 = local_48" (pointer_expression "*param_5" * identifier) = identifier) ;) }))) (if_statement "if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }" if (parenthesized_expression "(local_24 == *(char **)PTR___stack_chk_guard_0018fecc)" ( (binary_expression "local_24 == *(char **)PTR___stack_chk_guard_0018fecc" identifier == (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" * (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return puVar13;\n  }" { (return_statement "return puVar13;" return identifier ;) })) (expression_statement "pcVar8 = local_24;" (assignment_expression "pcVar8 = local_24" identifier = identifier) ;) (expression_statement "puVar13 = PTR___stack_chk_fail_0018fea0;" (assignment_expression "puVar13 = PTR___stack_chk_fail_0018fea0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" * (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" if (parenthesized_expression "(((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1))" ( (binary_expression "((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" (parenthesized_expression "((int)param_2 < 1)" ( (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) && (parenthesized_expression "(param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" ( (comma_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1" (assignment_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))()" identifier = (cast_expression "(char *)(**(code **)(puVar13 + 0x1339c8))()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(puVar13 + 0x1339c8))()" (parenthesized_expression "(**(code **)(puVar13 + 0x1339c8))" ( (pointer_expression "**(code **)(puVar13 + 0x1339c8)" * (pointer_expression "*(code **)(puVar13 + 0x1339c8)" * (cast_expression "(code **)(puVar13 + 0x1339c8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar13 + 0x1339c8)" ( (binary_expression "puVar13 + 0x1339c8" identifier + number_literal) ))))) )) (argument_list "()" ( ))))) , (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal)) ))) )) (compound_statement "{\n    uVar2 = 0;\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" else (compound_statement "{\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = pcVar8;" (assignment_expression "pcVar6 = pcVar8" identifier = identifier) ;) (do_statement "do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));" do (compound_statement "{\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    }" { (expression_statement "pcVar5 = pcVar6 + 1;" (assignment_expression "pcVar5 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;" (assignment_expression "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" identifier = (binary_expression "uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" (binary_expression "uVar2 ^ uVar2 << 3" identifier ^ (binary_expression "uVar2 << 3" identifier << number_literal)) ^ (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier)))) ;) (expression_statement "pcVar6 = pcVar5;" (assignment_expression "pcVar6 = pcVar5" identifier = identifier) ;) }) while (parenthesized_expression "(0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)))" ( (binary_expression "0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5))" number_literal < (cast_expression "(int)(param_2 + ((int)pcVar8 - (int)pcVar5))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2 + ((int)pcVar8 - (int)pcVar5))" ( (binary_expression "param_2 + ((int)pcVar8 - (int)pcVar5)" identifier + (parenthesized_expression "((int)pcVar8 - (int)pcVar5)" ( (binary_expression "(int)pcVar8 - (int)pcVar5" (cast_expression "(int)pcVar8" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) )) ;) }))) (return_statement "return (undefined *)(uVar2 & 0x7fffffff);" return (cast_expression "(undefined *)(uVar2 & 0x7fffffff)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 & 0x7fffffff)" ( (binary_expression "uVar2 & 0x7fffffff" identifier & number_literal) ))) ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n\nchar * columnTypeImpl(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol\n                     )\n\n{\n  int iVar1;\n  int iVar2;\n  Select *pSVar3;\n  char *pcVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  SrcList *pSVar8;\n  int iVar9;\n  sqlite3 *db;\n  Table *pTVar10;\n  char *zOrigDb;\n  char *zOrigTab;\n  char *zOrigCol;\n  NameContext sNC;\n  \n  iVar1 = *(int *)PTR___stack_chk_guard_0018fecc;\n  zOrigDb = (char *)0x0;\n  zOrigTab = (char *)0x0;\n  zOrigCol = (char *)0x0;\n  if (pExpr->op == '\x7f') {\n    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;\n    sNC.pParse = pNC->pParse;\n    sNC.pNext = pNC;\n    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);\n  }\n  else if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }\nLAB_0005c37c:\n  if (pzOrigDb != (char **)0x0) {\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }\n  if (iVar1 == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar4;\n  }\n  pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)();\n  return pcVar4;\n}\n\n" comment (function_definition "char * columnTypeImpl(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol\n                     )\n\n{\n  int iVar1;\n  int iVar2;\n  Select *pSVar3;\n  char *pcVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  SrcList *pSVar8;\n  int iVar9;\n  sqlite3 *db;\n  Table *pTVar10;\n  char *zOrigDb;\n  char *zOrigTab;\n  char *zOrigCol;\n  NameContext sNC;\n  \n  iVar1 = *(int *)PTR___stack_chk_guard_0018fecc;\n  zOrigDb = (char *)0x0;\n  zOrigTab = (char *)0x0;\n  zOrigCol = (char *)0x0;\n  if (pExpr->op == '\x7f') {\n    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;\n    sNC.pParse = pNC->pParse;\n    sNC.pNext = pNC;\n    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);\n  }\n  else if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }\nLAB_0005c37c:\n  if (pzOrigDb != (char **)0x0) {\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }\n  if (iVar1 == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar4;\n  }\n  pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)();\n  return pcVar4;\n}" primitive_type (pointer_declarator "* columnTypeImpl(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol\n                     )" * (function_declarator "columnTypeImpl(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol\n                     )" identifier (parameter_list "(NameContext *pNC,Expr *pExpr,char **pzOrigDb,char **pzOrigTab,char **pzOrigCol\n                     )" ( (parameter_declaration "NameContext *pNC" type_identifier (pointer_declarator "*pNC" * identifier)) , (parameter_declaration "Expr *pExpr" type_identifier (pointer_declarator "*pExpr" * identifier)) , (parameter_declaration "char **pzOrigDb" primitive_type (pointer_declarator "**pzOrigDb" * (pointer_declarator "*pzOrigDb" * identifier))) , (parameter_declaration "char **pzOrigTab" primitive_type (pointer_declarator "**pzOrigTab" * (pointer_declarator "*pzOrigTab" * identifier))) , (parameter_declaration "char **pzOrigCol" primitive_type (pointer_declarator "**pzOrigCol" * (pointer_declarator "*pzOrigCol" * identifier))) )))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  Select *pSVar3;\n  char *pcVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  SrcList *pSVar8;\n  int iVar9;\n  sqlite3 *db;\n  Table *pTVar10;\n  char *zOrigDb;\n  char *zOrigTab;\n  char *zOrigCol;\n  NameContext sNC;\n  \n  iVar1 = *(int *)PTR___stack_chk_guard_0018fecc;\n  zOrigDb = (char *)0x0;\n  zOrigTab = (char *)0x0;\n  zOrigCol = (char *)0x0;\n  if (pExpr->op == '\x7f') {\n    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;\n    sNC.pParse = pNC->pParse;\n    sNC.pNext = pNC;\n    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);\n  }\n  else if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }\nLAB_0005c37c:\n  if (pzOrigDb != (char **)0x0) {\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }\n  if (iVar1 == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar4;\n  }\n  pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)();\n  return pcVar4;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "Select *pSVar3;" type_identifier (pointer_declarator "*pSVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "SrcList *pSVar8;" type_identifier (pointer_declarator "*pSVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "sqlite3 *db;" type_identifier (pointer_declarator "*db" * identifier) ;) (declaration "Table *pTVar10;" type_identifier (pointer_declarator "*pTVar10" * identifier) ;) (declaration "char *zOrigDb;" primitive_type (pointer_declarator "*zOrigDb" * identifier) ;) (declaration "char *zOrigTab;" primitive_type (pointer_declarator "*zOrigTab" * identifier) ;) (declaration "char *zOrigCol;" primitive_type (pointer_declarator "*zOrigCol" * identifier) ;) (declaration "NameContext sNC;" type_identifier identifier ;) (expression_statement "iVar1 = *(int *)PTR___stack_chk_guard_0018fecc;" (assignment_expression "iVar1 = *(int *)PTR___stack_chk_guard_0018fecc" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "zOrigDb = (char *)0x0;" (assignment_expression "zOrigDb = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "zOrigTab = (char *)0x0;" (assignment_expression "zOrigTab = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "zOrigCol = (char *)0x0;" (assignment_expression "zOrigCol = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (pExpr->op == '\x7f') {\n    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;\n    sNC.pParse = pNC->pParse;\n    sNC.pNext = pNC;\n    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);\n  }\n  else if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }" if (parenthesized_expression "(pExpr->op == '\x7f')" ( (binary_expression "pExpr->op == '\x7f'" (field_expression "pExpr->op" identifier -> field_identifier) == (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n    sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;\n    sNC.pParse = pNC->pParse;\n    sNC.pNext = pNC;\n    pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);\n  }" { (expression_statement "sNC.pSrcList = ((pExpr->x).pSelect)->pSrc;" (assignment_expression "sNC.pSrcList = ((pExpr->x).pSelect)->pSrc" (field_expression "sNC.pSrcList" identifier . field_identifier) = (field_expression "((pExpr->x).pSelect)->pSrc" (parenthesized_expression "((pExpr->x).pSelect)" ( (field_expression "(pExpr->x).pSelect" (parenthesized_expression "(pExpr->x)" ( (field_expression "pExpr->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) ;) (expression_statement "sNC.pParse = pNC->pParse;" (assignment_expression "sNC.pParse = pNC->pParse" (field_expression "sNC.pParse" identifier . field_identifier) = (field_expression "pNC->pParse" identifier -> field_identifier)) ;) (expression_statement "sNC.pNext = pNC;" (assignment_expression "sNC.pNext = pNC" (field_expression "sNC.pNext" identifier . field_identifier) = identifier) ;) (expression_statement "pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol);" (assignment_expression "pcVar4 = columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol)" identifier = (call_expression "columnTypeImpl(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol)" identifier (argument_list "(&sNC,((pExpr->x).pSelect)->pEList->a[0].pExpr,&zOrigDb,&zOrigTab,\n                            &zOrigCol)" ( (pointer_expression "&sNC" & identifier) , (field_expression "((pExpr->x).pSelect)->pEList->a[0].pExpr" (subscript_expression "((pExpr->x).pSelect)->pEList->a[0]" (field_expression "((pExpr->x).pSelect)->pEList->a" (field_expression "((pExpr->x).pSelect)->pEList" (parenthesized_expression "((pExpr->x).pSelect)" ( (field_expression "(pExpr->x).pSelect" (parenthesized_expression "(pExpr->x)" ( (field_expression "pExpr->x" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) -> field_identifier) [ number_literal ]) . field_identifier) , (pointer_expression "&zOrigDb" & identifier) , (pointer_expression "&zOrigTab" & identifier) , (pointer_expression "&zOrigCol" & identifier) )))) ;) }) (else_clause "else if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }" else (if_statement "if (pExpr->op == 0x9e) {\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }\n  else {\n    pcVar4 = (char *)0x0;\n  }" if (parenthesized_expression "(pExpr->op == 0x9e)" ( (binary_expression "pExpr->op == 0x9e" (field_expression "pExpr->op" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n    iVar9 = pExpr->iColumn;\n    if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }\n  }" { (expression_statement "iVar9 = pExpr->iColumn;" (assignment_expression "iVar9 = pExpr->iColumn" identifier = (field_expression "pExpr->iColumn" identifier -> field_identifier)) ;) (if_statement "if (pNC == (NameContext *)0x0) {\n      pcVar4 = (char *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }" if (parenthesized_expression "(pNC == (NameContext *)0x0)" ( (binary_expression "pNC == (NameContext *)0x0" identifier == (cast_expression "(NameContext *)0x0" ( (type_descriptor "NameContext *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar4 = (char *)0x0;\n    }" { (expression_statement "pcVar4 = (char *)0x0;" (assignment_expression "pcVar4 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }" else (compound_statement "{\n      do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);\n      pcVar4 = (char *)0x0;\n    }" { (do_statement "do {\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      } while (pNC != (NameContext *)0x0);" do (compound_statement "{\n        while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        pNC = pNC->pNext;\n      }" { (while_statement "while( true ) {\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          pSVar8 = pNC->pSrcList;\n          if (pSVar8->nSrc < 1) break;\n          if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }\n          pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];\n          pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];\n          if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" { (expression_statement "pSVar8 = pNC->pSrcList;" (assignment_expression "pSVar8 = pNC->pSrcList" identifier = (field_expression "pNC->pSrcList" identifier -> field_identifier)) ;) (if_statement "if (pSVar8->nSrc < 1) break;" if (parenthesized_expression "(pSVar8->nSrc < 1)" ( (binary_expression "pSVar8->nSrc < 1" (field_expression "pSVar8->nSrc" identifier -> field_identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (pSVar8->a[0].iCursor == pExpr->iTable) {\n            iVar2 = 0;\n            iVar6 = 0;\n          }\n          else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }" if (parenthesized_expression "(pSVar8->a[0].iCursor == pExpr->iTable)" ( (binary_expression "pSVar8->a[0].iCursor == pExpr->iTable" (field_expression "pSVar8->a[0].iCursor" (subscript_expression "pSVar8->a[0]" (field_expression "pSVar8->a" identifier -> field_identifier) [ number_literal ]) . field_identifier) == (field_expression "pExpr->iTable" identifier -> field_identifier)) )) (compound_statement "{\n            iVar2 = 0;\n            iVar6 = 0;\n          }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }" else (compound_statement "{\n            iVar6 = 1;\n            piVar5 = &pSVar8[1].a[0].regResult;\n            do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);\n            iVar6 = iVar2 << 3;\n          }" { (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (expression_statement "piVar5 = &pSVar8[1].a[0].regResult;" (assignment_expression "piVar5 = &pSVar8[1].a[0].regResult" identifier = (pointer_expression "&pSVar8[1].a[0].regResult" & (field_expression "pSVar8[1].a[0].regResult" (subscript_expression "pSVar8[1].a[0]" (field_expression "pSVar8[1].a" (subscript_expression "pSVar8[1]" identifier [ number_literal ]) . field_identifier) [ number_literal ]) . field_identifier))) ;) (do_statement "do {\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            } while (iVar7 != pExpr->iTable);" do (compound_statement "{\n              iVar2 = iVar6;\n              if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;\n              iVar7 = *piVar5;\n              iVar6 = iVar2 + 1;\n              piVar5 = piVar5 + 0x12;\n            }" { (expression_statement "iVar2 = iVar6;" (assignment_expression "iVar2 = iVar6" identifier = identifier) ;) (if_statement "if (iVar2 == pSVar8->nSrc) goto LAB_0005c440;" if (parenthesized_expression "(iVar2 == pSVar8->nSrc)" ( (binary_expression "iVar2 == pSVar8->nSrc" identifier == (field_expression "pSVar8->nSrc" identifier -> field_identifier)) )) (goto_statement "goto LAB_0005c440;" goto statement_identifier ;)) (expression_statement "iVar7 = *piVar5;" (assignment_expression "iVar7 = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "iVar6 = iVar2 + 1;" (assignment_expression "iVar6 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "piVar5 = piVar5 + 0x12;" (assignment_expression "piVar5 = piVar5 + 0x12" identifier = (binary_expression "piVar5 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != pExpr->iTable)" ( (binary_expression "iVar7 != pExpr->iTable" identifier != (field_expression "pExpr->iTable" identifier -> field_identifier)) )) ;) (expression_statement "iVar6 = iVar2 << 3;" (assignment_expression "iVar6 = iVar2 << 3" identifier = (binary_expression "iVar2 << 3" identifier << number_literal)) ;) }))) (expression_statement "pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2];" (assignment_expression "pTVar10 = (&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2]" identifier = (subscript_expression "(&pSVar8->a[0].pTab)[(iVar6 + iVar2) * 2]" (parenthesized_expression "(&pSVar8->a[0].pTab)" ( (pointer_expression "&pSVar8->a[0].pTab" & (field_expression "pSVar8->a[0].pTab" (subscript_expression "pSVar8->a[0]" (field_expression "pSVar8->a" identifier -> field_identifier) [ number_literal ]) . field_identifier)) )) [ (binary_expression "(iVar6 + iVar2) * 2" (parenthesized_expression "(iVar6 + iVar2)" ( (binary_expression "iVar6 + iVar2" identifier + identifier) )) * number_literal) ])) ;) (expression_statement "pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2];" (assignment_expression "pSVar3 = (&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2]" identifier = (subscript_expression "(&pSVar8->a[0].pSelect)[(iVar6 + iVar2) * 2]" (parenthesized_expression "(&pSVar8->a[0].pSelect)" ( (pointer_expression "&pSVar8->a[0].pSelect" & (field_expression "pSVar8->a[0].pSelect" (subscript_expression "pSVar8->a[0]" (field_expression "pSVar8->a" identifier -> field_identifier) [ number_literal ]) . field_identifier)) )) [ (binary_expression "(iVar6 + iVar2) * 2" (parenthesized_expression "(iVar6 + iVar2)" ( (binary_expression "iVar6 + iVar2" identifier + identifier) )) * number_literal) ])) ;) (if_statement "if (pTVar10 != (Table *)0x0) {\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" if (parenthesized_expression "(pTVar10 != (Table *)0x0)" ( (binary_expression "pTVar10 != (Table *)0x0" identifier != (cast_expression "(Table *)0x0" ( (type_descriptor "Table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" { (if_statement "if (pSVar3 == (Select *)0x0) {\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }\n            else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }" if (parenthesized_expression "(pSVar3 == (Select *)0x0)" ( (binary_expression "pSVar3 == (Select *)0x0" identifier == (cast_expression "(Select *)0x0" ( (type_descriptor "Select *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }\n              zOrigTab = pTVar10->zName;\n              if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }\n            }" { (if_statement "if (iVar9 < 0) {\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }" if (parenthesized_expression "(iVar9 < 0)" ( (binary_expression "iVar9 < 0" identifier < number_literal) )) (compound_statement "{\n                iVar9 = (int)pTVar10->iPKey;\n                if (-1 < iVar9) goto LAB_0005c288;\n                zOrigCol = PTR_LAB_0018f958 + 0x4e24;\n                pcVar4 = PTR_LAB_0018f958 + 0x2e40;\n              }" { (expression_statement "iVar9 = (int)pTVar10->iPKey;" (assignment_expression "iVar9 = (int)pTVar10->iPKey" identifier = (cast_expression "(int)pTVar10->iPKey" ( (type_descriptor "int" primitive_type) ) (field_expression "pTVar10->iPKey" identifier -> field_identifier))) ;) (if_statement "if (-1 < iVar9) goto LAB_0005c288;" if (parenthesized_expression "(-1 < iVar9)" ( (binary_expression "-1 < iVar9" number_literal < identifier) )) (goto_statement "goto LAB_0005c288;" goto statement_identifier ;)) (expression_statement "zOrigCol = PTR_LAB_0018f958 + 0x4e24;" (assignment_expression "zOrigCol = PTR_LAB_0018f958 + 0x4e24" identifier = (binary_expression "PTR_LAB_0018f958 + 0x4e24" identifier + number_literal)) ;) (expression_statement "pcVar4 = PTR_LAB_0018f958 + 0x2e40;" (assignment_expression "pcVar4 = PTR_LAB_0018f958 + 0x2e40" identifier = (binary_expression "PTR_LAB_0018f958 + 0x2e40" identifier + number_literal)) ;) }) (else_clause "else {\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }" else (compound_statement "{\nLAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;\n                pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);\n              }" { (labeled_statement "LAB_0005c288:\n                zOrigCol = pTVar10->aCol[iVar9].zName;" statement_identifier : (expression_statement "zOrigCol = pTVar10->aCol[iVar9].zName;" (assignment_expression "zOrigCol = pTVar10->aCol[iVar9].zName" identifier = (field_expression "pTVar10->aCol[iVar9].zName" (subscript_expression "pTVar10->aCol[iVar9]" (field_expression "pTVar10->aCol" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;)) (expression_statement "pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0);" (assignment_expression "pcVar4 = sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0)" identifier = (call_expression "sqlite3ColumnType(pTVar10->aCol + iVar9,(char *)0x0)" identifier (argument_list "(pTVar10->aCol + iVar9,(char *)0x0)" ( (binary_expression "pTVar10->aCol + iVar9" (field_expression "pTVar10->aCol" identifier -> field_identifier) + identifier) , (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) }))) (expression_statement "zOrigTab = pTVar10->zName;" (assignment_expression "zOrigTab = pTVar10->zName" identifier = (field_expression "pTVar10->zName" identifier -> field_identifier)) ;) (if_statement "if ((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)) {\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }" if (parenthesized_expression "((pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0))" ( (binary_expression "(pNC->pParse != (Parse *)0x0) && (pTVar10->pSchema != (Schema *)0x0)" (parenthesized_expression "(pNC->pParse != (Parse *)0x0)" ( (binary_expression "pNC->pParse != (Parse *)0x0" (field_expression "pNC->pParse" identifier -> field_identifier) != (cast_expression "(Parse *)0x0" ( (type_descriptor "Parse *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pTVar10->pSchema != (Schema *)0x0)" ( (binary_expression "pTVar10->pSchema != (Schema *)0x0" (field_expression "pTVar10->pSchema" identifier -> field_identifier) != (cast_expression "(Schema *)0x0" ( (type_descriptor "Schema *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n                db = pNC->pParse->db;\n                iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);\n                zOrigDb = db->aDb[iVar9].zDbSName;\n              }" { (expression_statement "db = pNC->pParse->db;" (assignment_expression "db = pNC->pParse->db" identifier = (field_expression "pNC->pParse->db" (field_expression "pNC->pParse" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema);" (assignment_expression "iVar9 = sqlite3SchemaToIndex(db,pTVar10->pSchema)" identifier = (call_expression "sqlite3SchemaToIndex(db,pTVar10->pSchema)" identifier (argument_list "(db,pTVar10->pSchema)" ( identifier , (field_expression "pTVar10->pSchema" identifier -> field_identifier) )))) ;) (expression_statement "zOrigDb = db->aDb[iVar9].zDbSName;" (assignment_expression "zOrigDb = db->aDb[iVar9].zDbSName" identifier = (field_expression "db->aDb[iVar9].zDbSName" (subscript_expression "db->aDb[iVar9]" (field_expression "db->aDb" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) })) }) (else_clause "else {\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }" else (compound_statement "{\n              pcVar4 = (char *)0x0;\n              if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }\n            }" { (expression_statement "pcVar4 = (char *)0x0;" (assignment_expression "pcVar4 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar9) {\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }" if (parenthesized_expression "(-1 < iVar9)" ( (binary_expression "-1 < iVar9" number_literal < identifier) )) (compound_statement "{\n                if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }\n              }" { (if_statement "if (iVar9 < pSVar3->pEList->nExpr) {\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }\n                else {\n                  pcVar4 = (char *)0x0;\n                }" if (parenthesized_expression "(iVar9 < pSVar3->pEList->nExpr)" ( (binary_expression "iVar9 < pSVar3->pEList->nExpr" identifier < (field_expression "pSVar3->pEList->nExpr" (field_expression "pSVar3->pEList" identifier -> field_identifier) -> field_identifier)) )) (compound_statement "{\n                  sNC.pSrcList = pSVar3->pSrc;\n                  sNC.pParse = pNC->pParse;\n                  sNC.pNext = pNC;\n                  pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);\n                }" { (expression_statement "sNC.pSrcList = pSVar3->pSrc;" (assignment_expression "sNC.pSrcList = pSVar3->pSrc" (field_expression "sNC.pSrcList" identifier . field_identifier) = (field_expression "pSVar3->pSrc" identifier -> field_identifier)) ;) (expression_statement "sNC.pParse = pNC->pParse;" (assignment_expression "sNC.pParse = pNC->pParse" (field_expression "sNC.pParse" identifier . field_identifier) = (field_expression "pNC->pParse" identifier -> field_identifier)) ;) (expression_statement "sNC.pNext = pNC;" (assignment_expression "sNC.pNext = pNC" (field_expression "sNC.pNext" identifier . field_identifier) = identifier) ;) (expression_statement "pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol);" (assignment_expression "pcVar4 = columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol)" identifier = (call_expression "columnTypeImpl(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol)" identifier (argument_list "(&sNC,pSVar3->pEList->a[iVar9].pExpr,&zOrigDb,&zOrigTab,\n                                          &zOrigCol)" ( (pointer_expression "&sNC" & identifier) , (field_expression "pSVar3->pEList->a[iVar9].pExpr" (subscript_expression "pSVar3->pEList->a[iVar9]" (field_expression "pSVar3->pEList->a" (field_expression "pSVar3->pEList" identifier -> field_identifier) -> field_identifier) [ identifier ]) . field_identifier) , (pointer_expression "&zOrigDb" & identifier) , (pointer_expression "&zOrigTab" & identifier) , (pointer_expression "&zOrigCol" & identifier) )))) ;) }) (else_clause "else {\n                  pcVar4 = (char *)0x0;\n                }" else (compound_statement "{\n                  pcVar4 = (char *)0x0;\n                }" { (expression_statement "pcVar4 = (char *)0x0;" (assignment_expression "pcVar4 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) }))) (goto_statement "goto LAB_0005c37c;" goto statement_identifier ;) })) })) (labeled_statement "LAB_0005c440:\n        pNC = pNC->pNext;" statement_identifier : (expression_statement "pNC = pNC->pNext;" (assignment_expression "pNC = pNC->pNext" identifier = (field_expression "pNC->pNext" identifier -> field_identifier)) ;)) }) while (parenthesized_expression "(pNC != (NameContext *)0x0)" ( (binary_expression "pNC != (NameContext *)0x0" identifier != (cast_expression "(NameContext *)0x0" ( (type_descriptor "NameContext *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "pcVar4 = (char *)0x0;" (assignment_expression "pcVar4 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }) (else_clause "else {\n    pcVar4 = (char *)0x0;\n  }" else (compound_statement "{\n    pcVar4 = (char *)0x0;\n  }" { (expression_statement "pcVar4 = (char *)0x0;" (assignment_expression "pcVar4 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (labeled_statement "LAB_0005c37c:\n  if (pzOrigDb != (char **)0x0) {\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }" statement_identifier : (if_statement "if (pzOrigDb != (char **)0x0) {\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }" if (parenthesized_expression "(pzOrigDb != (char **)0x0)" ( (binary_expression "pzOrigDb != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    *pzOrigDb = zOrigDb;\n    *pzOrigTab = zOrigTab;\n    *pzOrigCol = zOrigCol;\n  }" { (expression_statement "*pzOrigDb = zOrigDb;" (assignment_expression "*pzOrigDb = zOrigDb" (pointer_expression "*pzOrigDb" * identifier) = identifier) ;) (expression_statement "*pzOrigTab = zOrigTab;" (assignment_expression "*pzOrigTab = zOrigTab" (pointer_expression "*pzOrigTab" * identifier) = identifier) ;) (expression_statement "*pzOrigCol = zOrigCol;" (assignment_expression "*pzOrigCol = zOrigCol" (pointer_expression "*pzOrigCol" * identifier) = identifier) ;) }))) (if_statement "if (iVar1 == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar4;\n  }" if (parenthesized_expression "(iVar1 == *(int *)PTR___stack_chk_guard_0018fecc)" ( (binary_expression "iVar1 == *(int *)PTR___stack_chk_guard_0018fecc" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return pcVar4;\n  }" { (return_statement "return pcVar4;" return identifier ;) })) (expression_statement "pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)();" (assignment_expression "pcVar4 = (char *)(*(code *)PTR___stack_chk_fail_0018fea0)()" identifier = (cast_expression "(char *)(*(code *)PTR___stack_chk_fail_0018fea0)()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" * (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))))) ;) (return_statement "return pcVar4;" return identifier ;) })))
(translation_unit "undefined *\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)\n\n{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}\n\n" (function_definition "undefined *\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)\n\n{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" type_identifier (pointer_declarator "*\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" * (function_declarator "FUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" identifier (parameter_list "(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined4 *param_5" type_identifier (pointer_declarator "*param_5" * identifier)) )))) (compound_statement "{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined4 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "undefined *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "undefined4 local_50;" type_identifier identifier ;) (declaration "undefined4 local_4c;" type_identifier identifier ;) (declaration "undefined *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "int local_44;" primitive_type identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "int *local_38;" primitive_type (pointer_declarator "*local_38" * identifier) ;) (declaration "char *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (expression_statement "local_24 = *(char **)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_24 = *(char **)PTR___stack_chk_guard_0018fecc" identifier = (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" * (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (expression_statement "local_48 = (undefined *)0x0;" (assignment_expression "local_48 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" if (parenthesized_expression "(*param_2 == '\x7f')" ( (binary_expression "*param_2 == '\x7f'" (pointer_expression "*param_2" * identifier) == (char_literal "'\x7f'" ' escape_sequence ')) )) (compound_statement "{\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }" { (expression_statement "piVar9 = (int *)(param_2 + 0x14);" (assignment_expression "piVar9 = (int *)(param_2 + 0x14)" identifier = (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) ;) (expression_statement "param_2 = *(char **)(*(int *)*piVar9 + 4);" (assignment_expression "param_2 = *(char **)(*(int *)*piVar9 + 4)" identifier = (pointer_expression "*(char **)(*(int *)*piVar9 + 4)" * (cast_expression "(char **)(*(int *)*piVar9 + 4)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*piVar9 + 4)" ( (binary_expression "*(int *)*piVar9 + 4" (pointer_expression "*(int *)*piVar9" * (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier))) + number_literal) ))))) ;) (expression_statement "local_40 = ((int *)*piVar9)[8];" (assignment_expression "local_40 = ((int *)*piVar9)[8]" identifier = (subscript_expression "((int *)*piVar9)[8]" (parenthesized_expression "((int *)*piVar9)" ( (cast_expression "(int *)*piVar9" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar9" * identifier)) )) [ number_literal ])) ;) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" identifier = identifier) ;) (expression_statement "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier = (cast_expression "(undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (pointer_expression "&local_44" & identifier) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_4c" & identifier) , (pointer_expression "&local_48" & identifier) ))))) ;) }) (else_clause "else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" else (if_statement "if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" if (parenthesized_expression "(*param_2 == -0x62)" ( (binary_expression "*param_2 == -0x62" (pointer_expression "*param_2" * identifier) == number_literal) )) (compound_statement "{\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }" { (expression_statement "iVar10 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar10 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" if (parenthesized_expression "(param_1 == (int *)0x0)" ( (binary_expression "param_1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      puVar13 = (undefined *)0x0;\n    }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" else (compound_statement "{\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" { (do_statement "do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);" do (compound_statement "{\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      }" { (while_statement "while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" { (expression_statement "piVar9 = (int *)param_1[1];" (assignment_expression "piVar9 = (int *)param_1[1]" identifier = (cast_expression "(int *)param_1[1]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (if_statement "if (*piVar9 < 1) break;" if (parenthesized_expression "(*piVar9 < 1)" ( (binary_expression "*piVar9 < 1" (pointer_expression "*piVar9" * identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" if (parenthesized_expression "(piVar9[0xc] == *(int *)(param_2 + 0x1c))" ( (binary_expression "piVar9[0xc] == *(int *)(param_2 + 0x1c)" (subscript_expression "piVar9[0xc]" identifier [ number_literal ]) == (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) )) (compound_statement "{\n            iVar11 = 0;\n            iVar4 = 0;\n          }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" else (compound_statement "{\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" { (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (expression_statement "piVar3 = piVar9 + 0x1e;" (assignment_expression "piVar3 = piVar9 + 0x1e" identifier = (binary_expression "piVar9 + 0x1e" identifier + number_literal)) ;) (do_statement "do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));" do (compound_statement "{\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            }" { (expression_statement "iVar11 = iVar4;" (assignment_expression "iVar11 = iVar4" identifier = identifier) ;) (if_statement "if (iVar11 == *piVar9) goto LAB_0005c440;" if (parenthesized_expression "(iVar11 == *piVar9)" ( (binary_expression "iVar11 == *piVar9" identifier == (pointer_expression "*piVar9" * identifier)) )) (goto_statement "goto LAB_0005c440;" goto statement_identifier ;)) (expression_statement "iVar7 = *piVar3;" (assignment_expression "iVar7 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "iVar4 = iVar11 + 1;" (assignment_expression "iVar4 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = piVar3 + 0x12;" (assignment_expression "piVar3 = piVar3 + 0x12" identifier = (binary_expression "piVar3 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 != *(int *)(param_2 + 0x1c))" ( (binary_expression "iVar7 != *(int *)(param_2 + 0x1c)" identifier != (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) )) ;) (expression_statement "iVar4 = iVar11 << 3;" (assignment_expression "iVar4 = iVar11 << 3" identifier = (binary_expression "iVar11 << 3" identifier << number_literal)) ;) }))) (expression_statement "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];" (assignment_expression "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" identifier = (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 6]" identifier [ (binary_expression "(iVar4 + iVar11) * 2 + 6" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" ( (binary_expression "iVar4 + iVar11" identifier + identifier) )) * number_literal) + number_literal) ]))) ;) (expression_statement "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];" (assignment_expression "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" identifier = (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 7]" identifier [ (binary_expression "(iVar4 + iVar11) * 2 + 7" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" ( (binary_expression "iVar4 + iVar11" identifier + identifier) )) * number_literal) + number_literal) ]))) ;) (if_statement "if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" if (parenthesized_expression "(puVar12 != (undefined4 *)0x0)" ( (binary_expression "puVar12 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" { (if_statement "if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" if (parenthesized_expression "(puVar1 == (undefined4 *)0x0)" ( (binary_expression "puVar1 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }" { (if_statement "if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" if (parenthesized_expression "(iVar10 < 0)" ( (binary_expression "iVar10 < 0" identifier < number_literal) )) (compound_statement "{\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }" { (expression_statement "iVar10 = (int)*(short *)(puVar12 + 10);" (assignment_expression "iVar10 = (int)*(short *)(puVar12 + 10)" identifier = (cast_expression "(int)*(short *)(puVar12 + 10)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(short *)(puVar12 + 10)" * (cast_expression "(short *)(puVar12 + 10)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + 10)" ( (binary_expression "puVar12 + 10" identifier + number_literal) )))))) ;) (if_statement "if (-1 < iVar10) goto LAB_0005c288;" if (parenthesized_expression "(-1 < iVar10)" ( (binary_expression "-1 < iVar10" number_literal < identifier) )) (goto_statement "goto LAB_0005c288;" goto statement_identifier ;)) (expression_statement "local_48 = PTR_LAB_0018f958 + 0x4e24;" (assignment_expression "local_48 = PTR_LAB_0018f958 + 0x4e24" identifier = (binary_expression "PTR_LAB_0018f958 + 0x4e24" identifier + number_literal)) ;) (expression_statement "puVar13 = PTR_LAB_0018f958 + 0x2e40;" (assignment_expression "puVar13 = PTR_LAB_0018f958 + 0x2e40" identifier = (binary_expression "PTR_LAB_0018f958 + 0x2e40" identifier + number_literal)) ;) }) (else_clause "else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" else (compound_statement "{\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" { (labeled_statement "LAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" statement_identifier : (expression_statement "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" (assignment_expression "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10)" identifier = (pointer_expression "*(undefined **)(puVar12[1] + iVar10 * 0x10)" * (cast_expression "(undefined **)(puVar12[1] + iVar10 * 0x10)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar12[1] + iVar10 * 0x10)" ( (binary_expression "puVar12[1] + iVar10 * 0x10" (subscript_expression "puVar12[1]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0x10" identifier * number_literal)) ))))) ;)) (expression_statement "param_2 = (char *)0x0;" (assignment_expression "param_2 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar13 = (undefined *)FUN_0005c124();" (assignment_expression "puVar13 = (undefined *)FUN_0005c124()" identifier = (cast_expression "(undefined *)FUN_0005c124()" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c124()" identifier (argument_list "()" ( ))))) ;) }))) (expression_statement "local_4c = *puVar12;" (assignment_expression "local_4c = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) (if_statement "if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" if (parenthesized_expression "(((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0))" ( (binary_expression "((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" (parenthesized_expression "((int *)*param_1 != (int *)0x0)" ( (binary_expression "(int *)*param_1 != (int *)0x0" (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" ( (comma_expression "param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0" (assignment_expression "param_2 = (char *)puVar12[0x12]" identifier = (cast_expression "(char *)puVar12[0x12]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar12[0x12]" identifier [ number_literal ]))) , (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" { (expression_statement "iVar11 = *(int *)*param_1;" (assignment_expression "iVar11 = *(int *)*param_1" identifier = (pointer_expression "*(int *)*param_1" * (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier)))) ;) (expression_statement "iVar10 = FUN_0004a128(iVar11);" (assignment_expression "iVar10 = FUN_0004a128(iVar11)" identifier = (call_expression "FUN_0004a128(iVar11)" identifier (argument_list "(iVar11)" ( identifier )))) ;) (expression_statement "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);" (assignment_expression "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" identifier = (pointer_expression "*(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" * (cast_expression "(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" ( (binary_expression "*(int *)(iVar11 + 0x10) + iVar10 * 0x10" (pointer_expression "*(int *)(iVar11 + 0x10)" * (cast_expression "(int *)(iVar11 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x10)" ( (binary_expression "iVar11 + 0x10" identifier + number_literal) )))) + (binary_expression "iVar10 * 0x10" identifier * number_literal)) ))))) ;) })) }) (else_clause "else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" else (compound_statement "{\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" if (parenthesized_expression "(-1 < iVar10)" ( (binary_expression "-1 < iVar10" number_literal < identifier) )) (compound_statement "{\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" { (if_statement "if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }" if (parenthesized_expression "(iVar10 < *(int *)*puVar1)" ( (binary_expression "iVar10 < *(int *)*puVar1" identifier < (pointer_expression "*(int *)*puVar1" * (cast_expression "(int *)*puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier)))) )) (compound_statement "{\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }" { (expression_statement "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];" (assignment_expression "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1]" identifier = (cast_expression "(char *)((int *)*puVar1)[iVar10 * 5 + 1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "((int *)*puVar1)[iVar10 * 5 + 1]" (parenthesized_expression "((int *)*puVar1)" ( (cast_expression "(int *)*puVar1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier)) )) [ (binary_expression "iVar10 * 5 + 1" (binary_expression "iVar10 * 5" identifier * number_literal) + number_literal) ]))) ;) (expression_statement "local_40 = puVar1[8];" (assignment_expression "local_40 = puVar1[8]" identifier = (subscript_expression "puVar1[8]" identifier [ number_literal ])) ;) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" identifier = identifier) ;) (expression_statement "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier = (cast_expression "(undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" identifier (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" ( (pointer_expression "&local_44" & identifier) , identifier , (pointer_expression "&local_50" & identifier) , (pointer_expression "&local_4c" & identifier) , (pointer_expression "&local_48" & identifier) ))))) ;) }) (else_clause "else {\n                  puVar13 = (undefined *)0x0;\n                }" else (compound_statement "{\n                  puVar13 = (undefined *)0x0;\n                }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) }))) (goto_statement "goto LAB_0005c37c;" goto statement_identifier ;) })) })) (labeled_statement "LAB_0005c440:\n        param_1 = (int *)param_1[3];" statement_identifier : (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" identifier = (cast_expression "(int *)param_1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;)) }) while (parenthesized_expression "(param_1 != (int *)0x0)" ( (binary_expression "param_1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) }) (else_clause "else {\n    puVar13 = (undefined *)0x0;\n  }" else (compound_statement "{\n    puVar13 = (undefined *)0x0;\n  }" { (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" identifier = (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))))) (labeled_statement "LAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" statement_identifier : (if_statement "if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" if (parenthesized_expression "(param_3 != (undefined4 *)0x0)" ( (binary_expression "param_3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" { (expression_statement "*param_3 = local_50;" (assignment_expression "*param_3 = local_50" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*param_4 = local_4c;" (assignment_expression "*param_4 = local_4c" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "*param_5 = local_48;" (assignment_expression "*param_5 = local_48" (pointer_expression "*param_5" * identifier) = identifier) ;) }))) (if_statement "if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }" if (parenthesized_expression "(local_24 == *(char **)PTR___stack_chk_guard_0018fecc)" ( (binary_expression "local_24 == *(char **)PTR___stack_chk_guard_0018fecc" identifier == (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" * (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return puVar13;\n  }" { (return_statement "return puVar13;" return identifier ;) })) (expression_statement "pcVar8 = local_24;" (assignment_expression "pcVar8 = local_24" identifier = identifier) ;) (expression_statement "puVar13 = PTR___stack_chk_fail_0018fea0;" (assignment_expression "puVar13 = PTR___stack_chk_fail_0018fea0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" * (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" if (parenthesized_expression "(((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1))" ( (binary_expression "((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" (parenthesized_expression "((int)param_2 < 1)" ( (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) && (parenthesized_expression "(param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" ( (comma_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1" (assignment_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))()" identifier = (cast_expression "(char *)(**(code **)(puVar13 + 0x1339c8))()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(puVar13 + 0x1339c8))()" (parenthesized_expression "(**(code **)(puVar13 + 0x1339c8))" ( (pointer_expression "**(code **)(puVar13 + 0x1339c8)" * (pointer_expression "*(code **)(puVar13 + 0x1339c8)" * (cast_expression "(code **)(puVar13 + 0x1339c8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar13 + 0x1339c8)" ( (binary_expression "puVar13 + 0x1339c8" identifier + number_literal) ))))) )) (argument_list "()" ( ))))) , (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal)) ))) )) (compound_statement "{\n    uVar2 = 0;\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" else (compound_statement "{\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" { (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = pcVar8;" (assignment_expression "pcVar6 = pcVar8" identifier = identifier) ;) (do_statement "do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));" do (compound_statement "{\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    }" { (expression_statement "pcVar5 = pcVar6 + 1;" (assignment_expression "pcVar5 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;" (assignment_expression "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" identifier = (binary_expression "uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" (binary_expression "uVar2 ^ uVar2 << 3" identifier ^ (binary_expression "uVar2 << 3" identifier << number_literal)) ^ (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier)))) ;) (expression_statement "pcVar6 = pcVar5;" (assignment_expression "pcVar6 = pcVar5" identifier = identifier) ;) }) while (parenthesized_expression "(0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)))" ( (binary_expression "0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5))" number_literal < (cast_expression "(int)(param_2 + ((int)pcVar8 - (int)pcVar5))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(param_2 + ((int)pcVar8 - (int)pcVar5))" ( (binary_expression "param_2 + ((int)pcVar8 - (int)pcVar5)" identifier + (parenthesized_expression "((int)pcVar8 - (int)pcVar5)" ( (binary_expression "(int)pcVar8 - (int)pcVar5" (cast_expression "(int)pcVar8" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )))) )) ;) }))) (return_statement "return (undefined *)(uVar2 & 0x7fffffff);" return (cast_expression "(undefined *)(uVar2 & 0x7fffffff)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 & 0x7fffffff)" ( (binary_expression "uVar2 & 0x7fffffff" identifier & number_literal) ))) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT) + LIT) ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT) + 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 IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (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 IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))) })) }))) (goto_statement goto statement_identifier ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;)) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( ))))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < 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 = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT ^ (binary_expression IDENT << LIT)) ^ (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )))) )) ;) }))) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ;) })))
(function_definition "undefined *\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)\n\n{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" (type_identifier "undefined") (pointer_declarator "*\nFUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" (* "*") (function_declarator "FUN_0005c188(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" (identifier "FUN_0005c188") (parameter_list "(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 *param_4" (type_identifier "undefined4") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "undefined4 *param_5" (type_identifier "undefined4") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) () ")")))) (compound_statement "{\n  undefined4 *puVar1;\n  uint uVar2;\n  int *piVar3;\n  int iVar4;\n  char *pcVar5;\n  int iVar7;\n  char *pcVar8;\n  int *piVar9;\n  int iVar10;\n  int iVar11;\n  undefined4 *puVar12;\n  undefined *puVar13;\n  undefined4 local_50;\n  undefined4 local_4c;\n  undefined *local_48;\n  int local_44;\n  int local_40;\n  int *local_38;\n  char *local_24;\n  char *pcVar6;\n  \n  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;\n  local_50 = 0;\n  local_4c = 0;\n  local_48 = (undefined *)0x0;\n  if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }\nLAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }\n  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }\n  pcVar8 = local_24;\n  puVar13 = PTR___stack_chk_fail_0018fea0;\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }\n  return (undefined *)(uVar2 & 0x7fffffff);\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "char *pcVar8;" (primitive_type "char") (pointer_declarator "*pcVar8" (* "*") (identifier "pcVar8")) (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "undefined4 *puVar12;" (type_identifier "undefined4") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "undefined *puVar13;" (type_identifier "undefined") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "undefined4 local_50;" (type_identifier "undefined4") (identifier "local_50") (; ";")) (declaration "undefined4 local_4c;" (type_identifier "undefined4") (identifier "local_4c") (; ";")) (declaration "undefined *local_48;" (type_identifier "undefined") (pointer_declarator "*local_48" (* "*") (identifier "local_48")) (; ";")) (declaration "int local_44;" (primitive_type "int") (identifier "local_44") (; ";")) (declaration "int local_40;" (primitive_type "int") (identifier "local_40") (; ";")) (declaration "int *local_38;" (primitive_type "int") (pointer_declarator "*local_38" (* "*") (identifier "local_38")) (; ";")) (declaration "char *local_24;" (primitive_type "char") (pointer_declarator "*local_24" (* "*") (identifier "local_24")) (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (expression_statement "local_24 = *(char **)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_24 = *(char **)PTR___stack_chk_guard_0018fecc" (identifier "local_24") (= "=") (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" (* "*") (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_0018fecc")))) (; ";")) (expression_statement "local_50 = 0;" (assignment_expression "local_50 = 0" (identifier "local_50") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" (identifier "local_4c") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48 = (undefined *)0x0;" (assignment_expression "local_48 = (undefined *)0x0" (identifier "local_48") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (*param_2 == '\x7f') {\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }\n  else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" (if "if") (parenthesized_expression "(*param_2 == '\x7f')" (( "(") (binary_expression "*param_2 == '\x7f'" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (== "==") (char_literal "'\x7f'" (' "'") (escape_sequence "\x7f") (' "'"))) () ")")) (compound_statement "{\n    piVar9 = (int *)(param_2 + 0x14);\n    param_2 = *(char **)(*(int *)*piVar9 + 4);\n    local_40 = ((int *)*piVar9)[8];\n    local_44 = *param_1;\n    local_38 = param_1;\n    puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n  }" ({ "{") (expression_statement "piVar9 = (int *)(param_2 + 0x14);" (assignment_expression "piVar9 = (int *)(param_2 + 0x14)" (identifier "piVar9") (= "=") (cast_expression "(int *)(param_2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")")))) (; ";")) (expression_statement "param_2 = *(char **)(*(int *)*piVar9 + 4);" (assignment_expression "param_2 = *(char **)(*(int *)*piVar9 + 4)" (identifier "param_2") (= "=") (pointer_expression "*(char **)(*(int *)*piVar9 + 4)" (* "*") (cast_expression "(char **)(*(int *)*piVar9 + 4)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*piVar9 + 4)" (( "(") (binary_expression "*(int *)*piVar9 + 4" (pointer_expression "*(int *)*piVar9" (* "*") (cast_expression "(int *)*piVar9" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar9" (* "*") (identifier "piVar9")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "local_40 = ((int *)*piVar9)[8];" (assignment_expression "local_40 = ((int *)*piVar9)[8]" (identifier "local_40") (= "=") (subscript_expression "((int *)*piVar9)[8]" (parenthesized_expression "((int *)*piVar9)" (( "(") (cast_expression "(int *)*piVar9" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar9" (* "*") (identifier "piVar9"))) () ")")) ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" (identifier "local_44") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" (identifier "local_38") (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (identifier "puVar13") (= "=") (cast_expression "(undefined *)FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (identifier "FUN_0005c188") (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" (( "(") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (pointer_expression "&local_4c" (& "&") (identifier "local_4c")) (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))))) (; ";")) (} "}")) (else_clause "else if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" (else "else") (if_statement "if (*param_2 == -0x62) {\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }\n  else {\n    puVar13 = (undefined *)0x0;\n  }" (if "if") (parenthesized_expression "(*param_2 == -0x62)" (( "(") (binary_expression "*param_2 == -0x62" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (== "==") (number_literal "-0x62")) () ")")) (compound_statement "{\n    iVar10 = *(int *)(param_2 + 0x20);\n    if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }\n  }" ({ "{") (expression_statement "iVar10 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar10 = *(int *)(param_2 + 0x20)" (identifier "iVar10") (= "=") (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if (param_1 == (int *)0x0) {\n      puVar13 = (undefined *)0x0;\n    }\n    else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" (if "if") (parenthesized_expression "(param_1 == (int *)0x0)" (( "(") (binary_expression "param_1 == (int *)0x0" (identifier "param_1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      puVar13 = (undefined *)0x0;\n    }" ({ "{") (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" (identifier "puVar13") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")) (else_clause "else {\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" (else "else") (compound_statement "{\n      do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);\n      puVar13 = (undefined *)0x0;\n    }" ({ "{") (do_statement "do {\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      } while (param_1 != (int *)0x0);" (do "do") (compound_statement "{\n        while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }\nLAB_0005c440:\n        param_1 = (int *)param_1[3];\n      }" ({ "{") (while_statement "while( true ) {\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          piVar9 = (int *)param_1[1];\n          if (*piVar9 < 1) break;\n          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }\n          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];\n          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];\n          if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }\n        }" ({ "{") (expression_statement "piVar9 = (int *)param_1[1];" (assignment_expression "piVar9 = (int *)param_1[1]" (identifier "piVar9") (= "=") (cast_expression "(int *)param_1[1]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (*piVar9 < 1) break;" (if "if") (parenthesized_expression "(*piVar9 < 1)" (( "(") (binary_expression "*piVar9 < 1" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (< "<") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {\n            iVar11 = 0;\n            iVar4 = 0;\n          }\n          else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" (if "if") (parenthesized_expression "(piVar9[0xc] == *(int *)(param_2 + 0x1c))" (( "(") (binary_expression "piVar9[0xc] == *(int *)(param_2 + 0x1c)" (subscript_expression "piVar9[0xc]" (identifier "piVar9") ([ "[") (number_literal "0xc") (] "]")) (== "==") (pointer_expression "*(int *)(param_2 + 0x1c)" (* "*") (cast_expression "(int *)(param_2 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")"))))) () ")")) (compound_statement "{\n            iVar11 = 0;\n            iVar4 = 0;\n          }" ({ "{") (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" (else "else") (compound_statement "{\n            iVar4 = 1;\n            piVar3 = piVar9 + 0x1e;\n            do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));\n            iVar4 = iVar11 << 3;\n          }" ({ "{") (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" (identifier "iVar4") (= "=") (number_literal "1")) (; ";")) (expression_statement "piVar3 = piVar9 + 0x1e;" (assignment_expression "piVar3 = piVar9 + 0x1e" (identifier "piVar3") (= "=") (binary_expression "piVar9 + 0x1e" (identifier "piVar9") (+ "+") (number_literal "0x1e"))) (; ";")) (do_statement "do {\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            } while (iVar7 != *(int *)(param_2 + 0x1c));" (do "do") (compound_statement "{\n              iVar11 = iVar4;\n              if (iVar11 == *piVar9) goto LAB_0005c440;\n              iVar7 = *piVar3;\n              iVar4 = iVar11 + 1;\n              piVar3 = piVar3 + 0x12;\n            }" ({ "{") (expression_statement "iVar11 = iVar4;" (assignment_expression "iVar11 = iVar4" (identifier "iVar11") (= "=") (identifier "iVar4")) (; ";")) (if_statement "if (iVar11 == *piVar9) goto LAB_0005c440;" (if "if") (parenthesized_expression "(iVar11 == *piVar9)" (( "(") (binary_expression "iVar11 == *piVar9" (identifier "iVar11") (== "==") (pointer_expression "*piVar9" (* "*") (identifier "piVar9"))) () ")")) (goto_statement "goto LAB_0005c440;" (goto "goto") (statement_identifier "LAB_0005c440") (; ";"))) (expression_statement "iVar7 = *piVar3;" (assignment_expression "iVar7 = *piVar3" (identifier "iVar7") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "iVar4 = iVar11 + 1;" (assignment_expression "iVar4 = iVar11 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar11 + 1" (identifier "iVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar3 = piVar3 + 0x12;" (assignment_expression "piVar3 = piVar3 + 0x12" (identifier "piVar3") (= "=") (binary_expression "piVar3 + 0x12" (identifier "piVar3") (+ "+") (number_literal "0x12"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != *(int *)(param_2 + 0x1c))" (( "(") (binary_expression "iVar7 != *(int *)(param_2 + 0x1c)" (identifier "iVar7") (!= "!=") (pointer_expression "*(int *)(param_2 + 0x1c)" (* "*") (cast_expression "(int *)(param_2 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")"))))) () ")")) (; ";")) (expression_statement "iVar4 = iVar11 << 3;" (assignment_expression "iVar4 = iVar11 << 3" (identifier "iVar4") (= "=") (binary_expression "iVar11 << 3" (identifier "iVar11") (<< "<<") (number_literal "3"))) (; ";")) (} "}")))) (expression_statement "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];" (assignment_expression "puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" (identifier "puVar12") (= "=") (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 6]" (identifier "piVar9") ([ "[") (binary_expression "(iVar4 + iVar11) * 2 + 6" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" (( "(") (binary_expression "iVar4 + iVar11" (identifier "iVar4") (+ "+") (identifier "iVar11")) () ")")) (* "*") (number_literal "2")) (+ "+") (number_literal "6")) (] "]")))) (; ";")) (expression_statement "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];" (assignment_expression "puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" (identifier "puVar1") (= "=") (cast_expression "(undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar9[(iVar4 + iVar11) * 2 + 7]" (identifier "piVar9") ([ "[") (binary_expression "(iVar4 + iVar11) * 2 + 7" (binary_expression "(iVar4 + iVar11) * 2" (parenthesized_expression "(iVar4 + iVar11)" (( "(") (binary_expression "iVar4 + iVar11" (identifier "iVar4") (+ "+") (identifier "iVar11")) () ")")) (* "*") (number_literal "2")) (+ "+") (number_literal "7")) (] "]")))) (; ";")) (if_statement "if (puVar12 != (undefined4 *)0x0) {\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" (if "if") (parenthesized_expression "(puVar12 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar12 != (undefined4 *)0x0" (identifier "puVar12") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }\n            goto LAB_0005c37c;\n          }" ({ "{") (if_statement "if (puVar1 == (undefined4 *)0x0) {\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }\n            else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" (if "if") (parenthesized_expression "(puVar1 == (undefined4 *)0x0)" (( "(") (binary_expression "puVar1 == (undefined4 *)0x0" (identifier "puVar1") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n              if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }\n              local_4c = *puVar12;\n              if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }\n            }" ({ "{") (if_statement "if (iVar10 < 0) {\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }\n              else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" (if "if") (parenthesized_expression "(iVar10 < 0)" (( "(") (binary_expression "iVar10 < 0" (identifier "iVar10") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n                iVar10 = (int)*(short *)(puVar12 + 10);\n                if (-1 < iVar10) goto LAB_0005c288;\n                local_48 = PTR_LAB_0018f958 + 0x4e24;\n                puVar13 = PTR_LAB_0018f958 + 0x2e40;\n              }" ({ "{") (expression_statement "iVar10 = (int)*(short *)(puVar12 + 10);" (assignment_expression "iVar10 = (int)*(short *)(puVar12 + 10)" (identifier "iVar10") (= "=") (cast_expression "(int)*(short *)(puVar12 + 10)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(short *)(puVar12 + 10)" (* "*") (cast_expression "(short *)(puVar12 + 10)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar12 + 10)" (( "(") (binary_expression "puVar12 + 10" (identifier "puVar12") (+ "+") (number_literal "10")) () ")")))))) (; ";")) (if_statement "if (-1 < iVar10) goto LAB_0005c288;" (if "if") (parenthesized_expression "(-1 < iVar10)" (( "(") (binary_expression "-1 < iVar10" (number_literal "-1") (< "<") (identifier "iVar10")) () ")")) (goto_statement "goto LAB_0005c288;" (goto "goto") (statement_identifier "LAB_0005c288") (; ";"))) (expression_statement "local_48 = PTR_LAB_0018f958 + 0x4e24;" (assignment_expression "local_48 = PTR_LAB_0018f958 + 0x4e24" (identifier "local_48") (= "=") (binary_expression "PTR_LAB_0018f958 + 0x4e24" (identifier "PTR_LAB_0018f958") (+ "+") (number_literal "0x4e24"))) (; ";")) (expression_statement "puVar13 = PTR_LAB_0018f958 + 0x2e40;" (assignment_expression "puVar13 = PTR_LAB_0018f958 + 0x2e40" (identifier "puVar13") (= "=") (binary_expression "PTR_LAB_0018f958 + 0x2e40" (identifier "PTR_LAB_0018f958") (+ "+") (number_literal "0x2e40"))) (; ";")) (} "}")) (else_clause "else {\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" (else "else") (compound_statement "{\nLAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);\n                param_2 = (char *)0x0;\n                puVar13 = (undefined *)FUN_0005c124();\n              }" ({ "{") (labeled_statement "LAB_0005c288:\n                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" (statement_identifier "LAB_0005c288") (: ":") (expression_statement "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);" (assignment_expression "local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10)" (identifier "local_48") (= "=") (pointer_expression "*(undefined **)(puVar12[1] + iVar10 * 0x10)" (* "*") (cast_expression "(undefined **)(puVar12[1] + iVar10 * 0x10)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar12[1] + iVar10 * 0x10)" (( "(") (binary_expression "puVar12[1] + iVar10 * 0x10" (subscript_expression "puVar12[1]" (identifier "puVar12") ([ "[") (number_literal "1") (] "]")) (+ "+") (binary_expression "iVar10 * 0x10" (identifier "iVar10") (* "*") (number_literal "0x10"))) () ")"))))) (; ";"))) (expression_statement "param_2 = (char *)0x0;" (assignment_expression "param_2 = (char *)0x0" (identifier "param_2") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "puVar13 = (undefined *)FUN_0005c124();" (assignment_expression "puVar13 = (undefined *)FUN_0005c124()" (identifier "puVar13") (= "=") (cast_expression "(undefined *)FUN_0005c124()" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0005c124()" (identifier "FUN_0005c124") (argument_list "()" (( "(") () ")"))))) (; ";")) (} "}")))) (expression_statement "local_4c = *puVar12;" (assignment_expression "local_4c = *puVar12" (identifier "local_4c") (= "=") (pointer_expression "*puVar12" (* "*") (identifier "puVar12"))) (; ";")) (if_statement "if (((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" (if "if") (parenthesized_expression "(((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0))" (( "(") (binary_expression "((int *)*param_1 != (int *)0x0) &&\n                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" (parenthesized_expression "((int *)*param_1 != (int *)0x0)" (( "(") (binary_expression "(int *)*param_1 != (int *)0x0" (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)" (( "(") (comma_expression "param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0" (assignment_expression "param_2 = (char *)puVar12[0x12]" (identifier "param_2") (= "=") (cast_expression "(char *)puVar12[0x12]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar12[0x12]" (identifier "puVar12") ([ "[") (number_literal "0x12") (] "]")))) (, ",") (binary_expression "param_2 != (char *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\n                iVar11 = *(int *)*param_1;\n                iVar10 = FUN_0004a128(iVar11);\n                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);\n              }" ({ "{") (expression_statement "iVar11 = *(int *)*param_1;" (assignment_expression "iVar11 = *(int *)*param_1" (identifier "iVar11") (= "=") (pointer_expression "*(int *)*param_1" (* "*") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))))) (; ";")) (expression_statement "iVar10 = FUN_0004a128(iVar11);" (assignment_expression "iVar10 = FUN_0004a128(iVar11)" (identifier "iVar10") (= "=") (call_expression "FUN_0004a128(iVar11)" (identifier "FUN_0004a128") (argument_list "(iVar11)" (( "(") (identifier "iVar11") () ")")))) (; ";")) (expression_statement "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);" (assignment_expression "local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" (identifier "local_50") (= "=") (pointer_expression "*(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" (* "*") (cast_expression "(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar11 + 0x10) + iVar10 * 0x10)" (( "(") (binary_expression "*(int *)(iVar11 + 0x10) + iVar10 * 0x10" (pointer_expression "*(int *)(iVar11 + 0x10)" (* "*") (cast_expression "(int *)(iVar11 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x10)" (( "(") (binary_expression "iVar11 + 0x10" (identifier "iVar11") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (binary_expression "iVar10 * 0x10" (identifier "iVar10") (* "*") (number_literal "0x10"))) () ")"))))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" (else "else") (compound_statement "{\n              puVar13 = (undefined *)0x0;\n              if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }\n            }" ({ "{") (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" (identifier "puVar13") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (-1 < iVar10) {\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" (if "if") (parenthesized_expression "(-1 < iVar10)" (( "(") (binary_expression "-1 < iVar10" (number_literal "-1") (< "<") (identifier "iVar10")) () ")")) (compound_statement "{\n                if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }\n              }" ({ "{") (if_statement "if (iVar10 < *(int *)*puVar1) {\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }\n                else {\n                  puVar13 = (undefined *)0x0;\n                }" (if "if") (parenthesized_expression "(iVar10 < *(int *)*puVar1)" (( "(") (binary_expression "iVar10 < *(int *)*puVar1" (identifier "iVar10") (< "<") (pointer_expression "*(int *)*puVar1" (* "*") (cast_expression "(int *)*puVar1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))))) () ")")) (compound_statement "{\n                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];\n                  local_40 = puVar1[8];\n                  local_44 = *param_1;\n                  local_38 = param_1;\n                  puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);\n                }" ({ "{") (expression_statement "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];" (assignment_expression "param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1]" (identifier "param_2") (= "=") (cast_expression "(char *)((int *)*puVar1)[iVar10 * 5 + 1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "((int *)*puVar1)[iVar10 * 5 + 1]" (parenthesized_expression "((int *)*puVar1)" (( "(") (cast_expression "(int *)*puVar1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) () ")")) ([ "[") (binary_expression "iVar10 * 5 + 1" (binary_expression "iVar10 * 5" (identifier "iVar10") (* "*") (number_literal "5")) (+ "+") (number_literal "1")) (] "]")))) (; ";")) (expression_statement "local_40 = puVar1[8];" (assignment_expression "local_40 = puVar1[8]" (identifier "local_40") (= "=") (subscript_expression "puVar1[8]" (identifier "puVar1") ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "local_44 = *param_1;" (assignment_expression "local_44 = *param_1" (identifier "local_44") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "local_38 = param_1;" (assignment_expression "local_38 = param_1" (identifier "local_38") (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48);" (assignment_expression "puVar13 = (undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (identifier "puVar13") (= "=") (cast_expression "(undefined *)\n                            FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0005c188(&local_44,param_2,&local_50,&local_4c,&local_48)" (identifier "FUN_0005c188") (argument_list "(&local_44,param_2,&local_50,&local_4c,&local_48)" (( "(") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (identifier "param_2") (, ",") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (pointer_expression "&local_4c" (& "&") (identifier "local_4c")) (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n                  puVar13 = (undefined *)0x0;\n                }" (else "else") (compound_statement "{\n                  puVar13 = (undefined *)0x0;\n                }" ({ "{") (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" (identifier "puVar13") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))) (} "}"))) (} "}")))) (goto_statement "goto LAB_0005c37c;" (goto "goto") (statement_identifier "LAB_0005c37c") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_0005c440:\n        param_1 = (int *)param_1[3];" (statement_identifier "LAB_0005c440") (: ":") (expression_statement "param_1 = (int *)param_1[3];" (assignment_expression "param_1 = (int *)param_1[3]" (identifier "param_1") (= "=") (cast_expression "(int *)param_1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_1 != (int *)0x0)" (( "(") (binary_expression "param_1 != (int *)0x0" (identifier "param_1") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" (identifier "puVar13") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    puVar13 = (undefined *)0x0;\n  }" (else "else") (compound_statement "{\n    puVar13 = (undefined *)0x0;\n  }" ({ "{") (expression_statement "puVar13 = (undefined *)0x0;" (assignment_expression "puVar13 = (undefined *)0x0" (identifier "puVar13") (= "=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))))) (labeled_statement "LAB_0005c37c:\n  if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" (statement_identifier "LAB_0005c37c") (: ":") (if_statement "if (param_3 != (undefined4 *)0x0) {\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" (if "if") (parenthesized_expression "(param_3 != (undefined4 *)0x0)" (( "(") (binary_expression "param_3 != (undefined4 *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    *param_3 = local_50;\n    *param_4 = local_4c;\n    *param_5 = local_48;\n  }" ({ "{") (expression_statement "*param_3 = local_50;" (assignment_expression "*param_3 = local_50" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_50")) (; ";")) (expression_statement "*param_4 = local_4c;" (assignment_expression "*param_4 = local_4c" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "local_4c")) (; ";")) (expression_statement "*param_5 = local_48;" (assignment_expression "*param_5 = local_48" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (identifier "local_48")) (; ";")) (} "}")))) (if_statement "if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {\n    return puVar13;\n  }" (if "if") (parenthesized_expression "(local_24 == *(char **)PTR___stack_chk_guard_0018fecc)" (( "(") (binary_expression "local_24 == *(char **)PTR___stack_chk_guard_0018fecc" (identifier "local_24") (== "==") (pointer_expression "*(char **)PTR___stack_chk_guard_0018fecc" (* "*") (cast_expression "(char **)PTR___stack_chk_guard_0018fecc" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_0018fecc")))) () ")")) (compound_statement "{\n    return puVar13;\n  }" ({ "{") (return_statement "return puVar13;" (return "return") (identifier "puVar13") (; ";")) (} "}"))) (expression_statement "pcVar8 = local_24;" (assignment_expression "pcVar8 = local_24" (identifier "pcVar8") (= "=") (identifier "local_24")) (; ";")) (expression_statement "puVar13 = PTR___stack_chk_fail_0018fea0;" (assignment_expression "puVar13 = PTR___stack_chk_fail_0018fea0" (identifier "puVar13") (= "=") (identifier "PTR___stack_chk_fail_0018fea0")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_0018fea0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {\n    uVar2 = 0;\n  }\n  else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" (if "if") (parenthesized_expression "(((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1))" (( "(") (binary_expression "((int)param_2 < 1) &&\n     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" (parenthesized_expression "((int)param_2 < 1)" (( "(") (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "1")) () ")")) (&& "&&") (parenthesized_expression "(param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)" (( "(") (comma_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1" (assignment_expression "param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))()" (identifier "param_2") (= "=") (cast_expression "(char *)(**(code **)(puVar13 + 0x1339c8))()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(puVar13 + 0x1339c8))()" (parenthesized_expression "(**(code **)(puVar13 + 0x1339c8))" (( "(") (pointer_expression "**(code **)(puVar13 + 0x1339c8)" (* "*") (pointer_expression "*(code **)(puVar13 + 0x1339c8)" (* "*") (cast_expression "(code **)(puVar13 + 0x1339c8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar13 + 0x1339c8)" (( "(") (binary_expression "puVar13 + 0x1339c8" (identifier "puVar13") (+ "+") (number_literal "0x1339c8")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))))) (, ",") (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "1"))) () ")"))) () ")")) (compound_statement "{\n    uVar2 = 0;\n  }" ({ "{") (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" (else "else") (compound_statement "{\n    uVar2 = 0;\n    pcVar6 = pcVar8;\n    do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));\n  }" ({ "{") (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar6 = pcVar8;" (assignment_expression "pcVar6 = pcVar8" (identifier "pcVar6") (= "=") (identifier "pcVar8")) (; ";")) (do_statement "do {\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));" (do "do") (compound_statement "{\n      pcVar5 = pcVar6 + 1;\n      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;\n      pcVar6 = pcVar5;\n    }" ({ "{") (expression_statement "pcVar5 = pcVar6 + 1;" (assignment_expression "pcVar5 = pcVar6 + 1" (identifier "pcVar5") (= "=") (binary_expression "pcVar6 + 1" (identifier "pcVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;" (assignment_expression "uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" (identifier "uVar2") (= "=") (binary_expression "uVar2 ^ uVar2 << 3 ^ (int)*pcVar6" (binary_expression "uVar2 ^ uVar2 << 3" (identifier "uVar2") (^ "^") (binary_expression "uVar2 << 3" (identifier "uVar2") (<< "<<") (number_literal "3"))) (^ "^") (cast_expression "(int)*pcVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6"))))) (; ";")) (expression_statement "pcVar6 = pcVar5;" (assignment_expression "pcVar6 = pcVar5" (identifier "pcVar6") (= "=") (identifier "pcVar5")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)))" (( "(") (binary_expression "0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5))" (number_literal "0") (< "<") (cast_expression "(int)(param_2 + ((int)pcVar8 - (int)pcVar5))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(param_2 + ((int)pcVar8 - (int)pcVar5))" (( "(") (binary_expression "param_2 + ((int)pcVar8 - (int)pcVar5)" (identifier "param_2") (+ "+") (parenthesized_expression "((int)pcVar8 - (int)pcVar5)" (( "(") (binary_expression "(int)pcVar8 - (int)pcVar5" (cast_expression "(int)pcVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar8")) (- "-") (cast_expression "(int)pcVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar5"))) () ")"))) () ")")))) () ")")) (; ";")) (} "}")))) (return_statement "return (undefined *)(uVar2 & 0x7fffffff);" (return "return") (cast_expression "(undefined *)(uVar2 & 0x7fffffff)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar2 & 0x7fffffff)" (( "(") (binary_expression "uVar2 & 0x7fffffff" (identifier "uVar2") (& "&") (number_literal "0x7fffffff")) () ")"))) (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator 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: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_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: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator 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: (pointer_expression argument: (identifier)))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (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 (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) alternative: (else_clause (compound_statement (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) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (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: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (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: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (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: (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: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (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: (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))))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))))))) (goto_statement label: (statement_identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) arguments: (argument_list)))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))))))))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))

undefined *
MASKED(int *param_1,char *param_2,undefined4 *param_3,undefined4 *param_4,undefined4 *param_5)

{
  undefined4 *puVar1;
  uint uVar2;
  int *piVar3;
  int iVar4;
  char *pcVar5;
  int iVar7;
  char *pcVar8;
  int *piVar9;
  int iVar10;
  int iVar11;
  undefined4 *puVar12;
  undefined *puVar13;
  undefined4 local_50;
  undefined4 local_4c;
  undefined *local_48;
  int local_44;
  int local_40;
  int *local_38;
  char *local_24;
  char *pcVar6;
  
  local_24 = *(char **)PTR___stack_chk_guard_0018fecc;
  local_50 = 0;
  local_4c = 0;
  local_48 = (undefined *)0x0;
  if (*param_2 == '\x7f') {
    piVar9 = (int *)(param_2 + 0x14);
    param_2 = *(char **)(*(int *)*piVar9 + 4);
    local_40 = ((int *)*piVar9)[8];
    local_44 = *param_1;
    local_38 = param_1;
    puVar13 = (undefined *)MASKED(&local_44,param_2,&local_50,&local_4c,&local_48);
  }
  else if (*param_2 == -0x62) {
    iVar10 = *(int *)(param_2 + 0x20);
    if (param_1 == (int *)0x0) {
      puVar13 = (undefined *)0x0;
    }
    else {
      do {
        while( true ) {
          piVar9 = (int *)param_1[1];
          if (*piVar9 < 1) break;
          if (piVar9[0xc] == *(int *)(param_2 + 0x1c)) {
            iVar11 = 0;
            iVar4 = 0;
          }
          else {
            iVar4 = 1;
            piVar3 = piVar9 + 0x1e;
            do {
              iVar11 = iVar4;
              if (iVar11 == *piVar9) goto LAB_0005c440;
              iVar7 = *piVar3;
              iVar4 = iVar11 + 1;
              piVar3 = piVar3 + 0x12;
            } while (iVar7 != *(int *)(param_2 + 0x1c));
            iVar4 = iVar11 << 3;
          }
          puVar12 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 6];
          puVar1 = (undefined4 *)piVar9[(iVar4 + iVar11) * 2 + 7];
          if (puVar12 != (undefined4 *)0x0) {
            if (puVar1 == (undefined4 *)0x0) {
              if (iVar10 < 0) {
                iVar10 = (int)*(short *)(puVar12 + 10);
                if (-1 < iVar10) goto LAB_0005c288;
                local_48 = PTR_LAB_0018f958 + 0x4e24;
                puVar13 = PTR_LAB_0018f958 + 0x2e40;
              }
              else {
LAB_0005c288:
                local_48 = *(undefined **)(puVar12[1] + iVar10 * 0x10);
                param_2 = (char *)0x0;
                puVar13 = (undefined *)FUN_0005c124();
              }
              local_4c = *puVar12;
              if (((int *)*param_1 != (int *)0x0) &&
                 (param_2 = (char *)puVar12[0x12], param_2 != (char *)0x0)) {
                iVar11 = *(int *)*param_1;
                iVar10 = FUN_0004a128(iVar11);
                local_50 = *(undefined4 *)(*(int *)(iVar11 + 0x10) + iVar10 * 0x10);
              }
            }
            else {
              puVar13 = (undefined *)0x0;
              if (-1 < iVar10) {
                if (iVar10 < *(int *)*puVar1) {
                  param_2 = (char *)((int *)*puVar1)[iVar10 * 5 + 1];
                  local_40 = puVar1[8];
                  local_44 = *param_1;
                  local_38 = param_1;
                  puVar13 = (undefined *)
                            MASKED(&local_44,param_2,&local_50,&local_4c,&local_48);
                }
                else {
                  puVar13 = (undefined *)0x0;
                }
              }
            }
            goto LAB_0005c37c;
          }
        }
LAB_0005c440:
        param_1 = (int *)param_1[3];
      } while (param_1 != (int *)0x0);
      puVar13 = (undefined *)0x0;
    }
  }
  else {
    puVar13 = (undefined *)0x0;
  }
LAB_0005c37c:
  if (param_3 != (undefined4 *)0x0) {
    *param_3 = local_50;
    *param_4 = local_4c;
    *param_5 = local_48;
  }
  if (local_24 == *(char **)PTR___stack_chk_guard_0018fecc) {
    return puVar13;
  }
  pcVar8 = local_24;
  puVar13 = PTR___stack_chk_fail_0018fea0;
  (*(code *)PTR___stack_chk_fail_0018fea0)();
  if (((int)param_2 < 1) &&
     (param_2 = (char *)(**(code **)(puVar13 + 0x1339c8))(), (int)param_2 < 1)) {
    uVar2 = 0;
  }
  else {
    uVar2 = 0;
    pcVar6 = pcVar8;
    do {
      pcVar5 = pcVar6 + 1;
      uVar2 = uVar2 ^ uVar2 << 3 ^ (int)*pcVar6;
      pcVar6 = pcVar5;
    } while (0 < (int)(param_2 + ((int)pcVar8 - (int)pcVar5)));
  }
  return (undefined *)(uVar2 & 0x7fffffff);
}

