
int sqlite3_db_status(sqlite3 *db,int op,int *pCurrent,int *pHighwater,int resetFlag)

{
  ushort uVar1;
  Schema *pSVar2;
  HashElem *pHVar3;
  Vdbe *p;
  Btree *pBVar4;
  Pager *pPVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  LookasideSlot *pLVar9;
  sqlite3_uint64 sVar10;
  long lVar11;
  int iVar12;
  LookasideSlot *pLVar13;
  long in_FS_OFFSET;
  int local_4c;
  int nByte;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  sqlite3_mutex_enter(db->mutex);
  switch(op) {
  case 0:
    pLVar9 = (db->lookaside).pInit;
    if (pLVar9 == (LookasideSlot *)0x0) {
      iVar12 = 0;
    }
    else {
      iVar12 = 0;
      do {
        pLVar9 = pLVar9->pNext;
        iVar12 = iVar12 + 1;
      } while (pLVar9 != (LookasideSlot *)0x0);
    }
    pLVar9 = (db->lookaside).pFree;
    if (pLVar9 == (LookasideSlot *)0x0) {
      iVar6 = 0;
    }
    else {
      iVar6 = 0;
      do {
        pLVar9 = pLVar9->pNext;
        iVar6 = iVar6 + 1;
      } while (pLVar9 != (LookasideSlot *)0x0);
    }
    if (pHighwater != (int *)0x0) {
      *pHighwater = (db->lookaside).nSlot - iVar12;
    }
    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;
    if ((resetFlag != 0) &&
       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {
      do {
        pLVar13 = pLVar9;
        pLVar9 = pLVar13->pNext;
      } while (pLVar9 != (LookasideSlot *)0x0);
      pLVar13->pNext = (db->lookaside).pInit;
      (db->lookaside).pInit = (db->lookaside).pFree;
      (db->lookaside).pFree = (LookasideSlot *)0x0;
    }
    break;
  case 1:
  case 0xb:
    sqlite3BtreeEnterAll(db);
    if (db->nDb < 1) {
      local_4c = 0;
    }
    else {
      lVar11 = 0;
      local_4c = 0;
      do {
        pBVar4 = db->aDb[lVar11].pBt;
        if (pBVar4 != (Btree *)0x0) {
          pPVar5 = pBVar4->pBt->pPager;
          uVar1 = pPVar5->nExtra;
          iVar12 = pPVar5->pageSize;
          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);
          iVar7 = sqlite3MallocSize(pPVar5);
          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;
          if (op == 0xb) {
            iVar12 = iVar12 / pBVar4->pBt->nRef;
          }
          local_4c = local_4c + iVar12;
        }
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < db->nDb);
    }
    sqlite3BtreeLeaveAll(db);
    *pCurrent = local_4c;
    *pHighwater = 0;
    resetFlag = 0;
    break;
  case 2:
    nByte = 0;
    sqlite3BtreeEnterAll(db);
    db->pnBytesFreed = &nByte;
    if (0 < db->nDb) {
      lVar11 = 0;
      do {
        pSVar2 = db->aDb[lVar11].pSchema;
        if (pSVar2 != (Schema *)0x0) {
          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);
          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +
                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;
          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);
          nByte = nByte + (int)sVar10;
          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);
          nByte = nByte + (int)sVar10;
          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);
          nByte = nByte + (int)sVar10;
          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);
          nByte = nByte + (int)sVar10;
          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)
          {
            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);
          }
          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {
            sqlite3DeleteTable(db,(Table *)pHVar3->data);
          }
        }
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < db->nDb);
    }
    db->pnBytesFreed = (int *)0x0;
    sqlite3BtreeLeaveAll(db);
    *pHighwater = 0;
    *pCurrent = nByte;
    resetFlag = 0;
    break;
  case 3:
    nByte = 0;
    db->pnBytesFreed = &nByte;
    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {
      sqlite3VdbeClearObject(db,p);
      sqlite3DbFree(db,p);
    }
    db->pnBytesFreed = (int *)0x0;
    *pHighwater = 0;
    *pCurrent = nByte;
    resetFlag = 0;
    break;
  case 4:
  case 5:
  case 6:
    *pCurrent = 0;
    *pHighwater = (db->lookaside).anStat[(long)op + -4];
    if (resetFlag != 0) {
      (db->lookaside).anStat[(long)op + -4] = 0;
      resetFlag = 0;
    }
    break;
  case 10:
    *pHighwater = 0;
    uVar8 = 1;
    if (db->nDeferredImmCons < 1) {
      uVar8 = (uint)(0 < db->nDeferredCons);
    }
    *pCurrent = uVar8;
    resetFlag = 0;
    break;
  case 0xc:
    op = 10;
  case 7:
  case 8:
  case 9:
    if (db->nDb < 1) {
      iVar12 = 0;
    }
    else {
      lVar11 = 0;
      iVar12 = 0;
      do {
        pBVar4 = db->aDb[lVar11].pBt;
        if (pBVar4 != (Btree *)0x0) {
          pPVar5 = pBVar4->pBt->pPager;
          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];
          if (resetFlag != 0) {
            pPVar5->aStat[(long)op + -7] = 0;
          }
        }
        lVar11 = lVar11 + 1;
      } while ((int)lVar11 < db->nDb);
    }
    *pHighwater = 0;
    *pCurrent = iVar12;
    resetFlag = 0;
    break;
  default:
    resetFlag = 1;
  }
  sqlite3_mutex_leave(db->mutex);
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return resetFlag;
}



int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)

{
  ushort uVar1;
  long lVar2;
  undefined8 *puVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  uint uVar9;
  long *plVar10;
  long lVar11;
  long in_FS_OFFSET;
  uint local_4c;
  uint local_44;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));
  switch(param_2) {
  case 0:
    plVar7 = *(long **)(param_1 + 400);
    if (plVar7 == (long *)0x0) {
      iVar6 = 0;
    }
    else {
      iVar6 = 0;
      do {
        plVar7 = (long *)*plVar7;
        iVar6 = iVar6 + 1;
      } while (plVar7 != (long *)0x0);
    }
    plVar7 = *(long **)(param_1 + 0x198);
    if (plVar7 == (long *)0x0) {
      iVar4 = 0;
    }
    else {
      iVar4 = 0;
      do {
        plVar7 = (long *)*plVar7;
        iVar4 = iVar4 + 1;
      } while (plVar7 != (long *)0x0);
    }
    if (param_4 != (int *)0x0) {
      *param_4 = *(int *)(param_1 + 0x180) - iVar6;
    }
    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;
    if ((param_5 != 0) &&
       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,
       *(long **)(param_1 + 0x198) != (long *)0x0)) {
      do {
        plVar10 = plVar7;
        plVar7 = (long *)*plVar10;
      } while (plVar7 != (long *)0x0);
      *plVar10 = *(long *)(param_1 + 400);
      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);
      *(undefined8 *)(param_1 + 0x198) = 0;
    }
    break;
  case 1:
  case 0xb:
    FUN_0013f226(param_1);
    if (*(int *)(param_1 + 0x28) < 1) {
      local_4c = 0;
    }
    else {
      lVar8 = 0;
      local_4c = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);
        if (lVar11 != 0) {
          lVar2 = **(long **)(lVar11 + 8);
          uVar1 = *(ushort *)(lVar2 + 0xb0);
          iVar6 = *(int *)(lVar2 + 0xbc);
          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));
          iVar5 = FUN_0012a964(lVar2);
          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);
          if (param_2 == 0xb) {
            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);
          }
          local_4c = local_4c + iVar6;
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    FUN_0012cc4a(param_1);
    *param_3 = local_4c;
    *param_4 = 0;
    param_5 = 0;
    break;
  case 2:
    local_44 = 0;
    FUN_0013f226(param_1);
    *(uint **)(param_1 + 0x2b8) = &local_44;
    if (0 < *(int *)(param_1 + 0x28)) {
      lVar8 = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);
        if (lVar11 != 0) {
          iVar6 = (*DAT_0022f690)(0x20);
          local_44 = local_44 +
                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +
                     *(int *)(lVar11 + 0x54)) * iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));
          local_44 = local_44 + iVar6;
          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;
              puVar3 = (undefined8 *)*puVar3) {
            FUN_001453db(param_1,puVar3[2]);
          }
          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;
              puVar3 = (undefined8 *)*puVar3) {
            FUN_0014471b(param_1,puVar3[2]);
          }
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    *(undefined8 *)(param_1 + 0x2b8) = 0;
    FUN_0012cc4a(param_1);
    *param_4 = 0;
    *param_3 = local_44;
    param_5 = 0;
    break;
  case 3:
    local_44 = 0;
    *(uint **)(param_1 + 0x2b8) = &local_44;
    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {
      FUN_00143e41(param_1,lVar8);
      FUN_00141394(param_1,lVar8);
    }
    *(undefined8 *)(param_1 + 0x2b8) = 0;
    *param_4 = 0;
    *param_3 = local_44;
    param_5 = 0;
    break;
  case 4:
  case 5:
  case 6:
    *param_3 = 0;
    lVar8 = param_1 + (long)param_2 * 4;
    *param_4 = *(int *)(lVar8 + 0x174);
    if (param_5 != 0) {
      *(undefined4 *)(lVar8 + 0x174) = 0;
      param_5 = 0;
    }
    break;
  case 10:
    *param_4 = 0;
    uVar9 = 1;
    if (*(long *)(param_1 + 0x2b0) < 1) {
      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));
    }
    *param_3 = uVar9;
    param_5 = 0;
    break;
  case 0xc:
    param_2 = 10;
  case 7:
  case 8:
  case 9:
    if (*(int *)(param_1 + 0x28) < 1) {
      uVar9 = 0;
    }
    else {
      lVar8 = 0;
      uVar9 = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);
        if (lVar11 != 0) {
          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);
          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);
          if (param_5 != 0) {
            *(undefined4 *)(lVar11 + 0xd4) = 0;
          }
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    *param_4 = 0;
    *param_3 = uVar9;
    param_5 = 0;
    break;
  default:
    param_5 = 1;
  }
  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return param_5;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV RBX,RDI
MOV EBP,ESI
MOV qword ptr [RSP + 0x8],RDX
MOV qword ptr [RSP + 0x10],RCX
MOV R12D,R8D
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x28],RAX
XOR EAX,EAX
MOV RDI,qword ptr [RDI + 0x18]
CALL 0x0012a8c7
CMP EBP,0xc
JA 0x001458b4
MOV EDX,EBP
LEA RCX,[0x1f7504]
MOVSXD RAX,dword ptr [RCX + RDX*0x4]
ADD RAX,RCX
JMP RAX
MOV RAX,qword ptr [RBX + 0x190]
TEST RAX,RAX
JZ 0x00145508
MOV EDX,0x0
MOV RAX,qword ptr [RAX]
ADD EDX,0x1
TEST RAX,RAX
JNZ 0x0014549c
MOV RAX,qword ptr [RBX + 0x198]
TEST RAX,RAX
JZ 0x0014550f
MOV ECX,0x0
MOV RAX,qword ptr [RAX]
ADD ECX,0x1
TEST RAX,RAX
JNZ 0x001454b8
MOV RDI,qword ptr [RSP + 0x10]
TEST RDI,RDI
JZ 0x001454d7
MOV EAX,dword ptr [RBX + 0x180]
SUB EAX,EDX
MOV dword ptr [RDI],EAX
MOV EAX,dword ptr [RBX + 0x180]
SUB EAX,EDX
SUB EAX,ECX
MOV RCX,qword ptr [RSP + 0x8]
MOV dword ptr [RCX],EAX
MOV R13D,R12D
TEST R12D,R12D
JZ 0x00145850
MOV RDX,qword ptr [RBX + 0x198]
MOV R13D,EBP
TEST RDX,RDX
JNZ 0x00145519
JMP 0x00145850
MOV EDX,0x0
JMP 0x001454a7
MOV ECX,0x0
JMP 0x001454c3
MOV RDX,RAX
MOV RAX,qword ptr [RDX]
TEST RAX,RAX
JNZ 0x00145516
MOV RAX,qword ptr [RBX + 0x190]
MOV qword ptr [RDX],RAX
MOV RAX,qword ptr [RBX + 0x198]
MOV qword ptr [RBX + 0x190],RAX
MOV qword ptr [RBX + 0x198],0x0
MOV R13D,EBP
JMP 0x00145850
MOV RAX,qword ptr [RSP + 0x8]
MOV dword ptr [RAX],0x0
MOVSXD RBP,EBP
LEA RAX,[RBX + RBP*0x4]
MOV EDX,dword ptr [RAX + 0x174]
MOV RCX,qword ptr [RSP + 0x10]
MOV dword ptr [RCX],EDX
MOV R13D,R12D
TEST R12D,R12D
JZ 0x00145850
MOV dword ptr [RAX + 0x174],0x0
MOV R13D,0x0
JMP 0x00145850
MOV RDI,RBX
CALL 0x0013f226
CMP dword ptr [RBX + 0x28],0x0
JLE 0x00145620
MOV R13D,0x0
MOV dword ptr [RSP + 0x1c],0x0
JMP 0x001455bc
ADD dword ptr [RSP + 0x1c],EAX
ADD R13,0x1
CMP dword ptr [RBX + 0x28],R13D
JLE 0x00145628
MOV RAX,R13
SHL RAX,0x5
ADD RAX,qword ptr [RBX + 0x20]
MOV R15,qword ptr [RAX + 0x8]
TEST R15,R15
JZ 0x001455b2
MOV RAX,qword ptr [R15 + 0x8]
MOV R14,qword ptr [RAX]
MOVZX R12D,word ptr [R14 + 0xb0]
ADD R12D,dword ptr [R14 + 0xbc]
ADD R12D,0x70
MOV RAX,qword ptr [R14 + 0x118]
MOV RDI,qword ptr [RAX + 0x40]
CALL qword ptr [0x0022f728]
IMUL R12D,EAX
MOV RDI,R14
CALL 0x0012a964
ADD EAX,R12D
ADD EAX,dword ptr [R14 + 0xbc]
CMP EBP,0xb
JNZ 0x001455ae
MOV RCX,qword ptr [R15 + 0x8]
CDQ
IDIV dword ptr [RCX + 0x60]
JMP 0x001455ae
MOV dword ptr [RSP + 0x1c],0x0
MOV RDI,RBX
CALL 0x0012cc4a
MOV RAX,qword ptr [RSP + 0x8]
MOV ECX,dword ptr [RSP + 0x1c]
MOV dword ptr [RAX],ECX
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX],0x0
MOV R13D,0x0
JMP 0x00145850
MOV dword ptr [RSP + 0x24],0x0
MOV RDI,RBX
CALL 0x0013f226
LEA RAX,[RSP + 0x24]
MOV qword ptr [RBX + 0x2b8],RAX
CMP dword ptr [RBX + 0x28],0x0
JLE 0x0014573e
MOV R12D,0x0
JMP 0x0014568d
ADD R12,0x1
CMP dword ptr [RBX + 0x28],R12D
JLE 0x0014573e
MOV RAX,R12
SHL RAX,0x5
ADD RAX,qword ptr [RBX + 0x20]
MOV R13,qword ptr [RAX + 0x18]
TEST R13,R13
JZ 0x0014567f
MOV EDI,0x20
CALL qword ptr [0x0022f690]
MOV ECX,dword ptr [R13 + 0x3c]
ADD ECX,dword ptr [R13 + 0xc]
ADD ECX,dword ptr [R13 + 0x24]
ADD ECX,dword ptr [R13 + 0x54]
MOV EDX,ECX
IMUL EDX,EAX
ADD dword ptr [RSP + 0x24],EDX
MOV RDI,qword ptr [R13 + 0x18]
CALL 0x0012aa60
ADD dword ptr [RSP + 0x24],EAX
MOV RDI,qword ptr [R13 + 0x48]
CALL 0x0012aa60
ADD dword ptr [RSP + 0x24],EAX
MOV RDI,qword ptr [R13 + 0x30]
CALL 0x0012aa60
ADD dword ptr [RSP + 0x24],EAX
MOV RDI,qword ptr [R13 + 0x60]
CALL 0x0012aa60
ADD dword ptr [RSP + 0x24],EAX
MOV RBP,qword ptr [R13 + 0x40]
TEST RBP,RBP
JZ 0x00145717
MOV RSI,qword ptr [RBP + 0x10]
MOV RDI,RBX
CALL 0x001453db
MOV RBP,qword ptr [RBP]
TEST RBP,RBP
JNZ 0x00145702
MOV RBP,qword ptr [R13 + 0x10]
TEST RBP,RBP
JZ 0x0014567f
MOV RSI,qword ptr [RBP + 0x10]
MOV RDI,RBX
CALL 0x0014471b
MOV RBP,qword ptr [RBP]
TEST RBP,RBP
JNZ 0x00145724
JMP 0x0014567f
MOV qword ptr [RBX + 0x2b8],0x0
MOV RDI,RBX
CALL 0x0012cc4a
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX],0x0
MOV EAX,dword ptr [RSP + 0x24]
MOV RCX,qword ptr [RSP + 0x8]
MOV dword ptr [RCX],EAX
MOV R13D,0x0
JMP 0x00145850
MOV dword ptr [RSP + 0x24],0x0
LEA RAX,[RSP + 0x24]
MOV qword ptr [RBX + 0x2b8],RAX
MOV RBP,qword ptr [RBX + 0x8]
TEST RBP,RBP
JZ 0x001457ae
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00143e41
MOV RSI,RBP
MOV RDI,RBX
CALL 0x00141394
MOV RBP,qword ptr [RBP + 0x10]
TEST RBP,RBP
JNZ 0x0014578f
MOV qword ptr [RBX + 0x2b8],0x0
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX],0x0
MOV EAX,dword ptr [RSP + 0x24]
MOV RCX,qword ptr [RSP + 0x8]
MOV dword ptr [RCX],EAX
MOV R13D,0x0
JMP 0x00145850
MOV EBP,0xa
CMP dword ptr [RBX + 0x28],0x0
JLE 0x00145833
MOV EAX,0x0
MOV ECX,0x0
MOVSXD RBP,EBP
SHL RBP,0x2
JMP 0x001457fe
ADD RAX,0x1
CMP dword ptr [RBX + 0x28],EAX
JLE 0x00145838
MOV RDX,RAX
SHL RDX,0x5
ADD RDX,qword ptr [RBX + 0x20]
MOV RDX,qword ptr [RDX + 0x8]
TEST RDX,RDX
JZ 0x001457f5
MOV RDX,qword ptr [RDX + 0x8]
MOV RSI,RBP
ADD RSI,qword ptr [RDX]
ADD ECX,dword ptr [RSI + 0xd4]
TEST R12D,R12D
JZ 0x001457f5
MOV dword ptr [RSI + 0xd4],0x0
JMP 0x001457f5
MOV ECX,0x0
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX],0x0
MOV RAX,qword ptr [RSP + 0x8]
MOV dword ptr [RAX],ECX
MOV R13D,0x0
MOV RDI,qword ptr [RBX + 0x18]
CALL 0x0012a8f6
MOV EAX,R13D
MOV RCX,qword ptr [RSP + 0x28]
XOR RCX,qword ptr FS:[0x28]
JNZ 0x001458bc
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX],0x0
MOV EAX,0x1
CMP qword ptr [RBX + 0x2b0],0x0
JLE 0x001458a4
MOV RCX,qword ptr [RSP + 0x8]
MOV dword ptr [RCX],EAX
MOV R13D,0x0
JMP 0x00145850
CMP qword ptr [RBX + 0x2a8],0x0
SETG AL
MOVZX EAX,AL
JMP 0x00145895
MOV R13D,0x1
JMP 0x00145850
CALL 0x0010e4d0
(translation_unit "int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)\n\n{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return param_5;\n}\n\n" (function_definition "int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)\n\n{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return param_5;\n}" primitive_type (function_declarator "FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" identifier (parameter_list "(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return param_5;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uint local_4c;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18))" identifier (argument_list "(*(undefined8 *)(param_1 + 0x18))" ( (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (switch_statement "switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" switch (parenthesized_expression "(param_2)" ( identifier )) (compound_statement "{\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" { (case_statement "case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;" case number_literal : (expression_statement "plVar7 = *(long **)(param_1 + 400);" (assignment_expression "plVar7 = *(long **)(param_1 + 400)" identifier = (pointer_expression "*(long **)(param_1 + 400)" * (cast_expression "(long **)(param_1 + 400)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar6 = 0;\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" else (compound_statement "{\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      }" { (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" identifier = (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (expression_statement "plVar7 = *(long **)(param_1 + 0x198);" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" identifier = (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar4 = 0;\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" else (compound_statement "{\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      }" { (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" identifier = (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" { (expression_statement "*param_4 = *(int *)(param_1 + 0x180) - iVar6;" (assignment_expression "*param_4 = *(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*param_4" * identifier) = (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" * (cast_expression "(int *)(param_1 + 0x180)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x180)" ( (binary_expression "param_1 + 0x180" identifier + number_literal) )))) - identifier)) ;) })) (expression_statement "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;" (assignment_expression "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4" (pointer_expression "*param_3" * identifier) = (binary_expression "(*(int *)(param_1 + 0x180) - iVar6) - iVar4" (parenthesized_expression "(*(int *)(param_1 + 0x180) - iVar6)" ( (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" * (cast_expression "(int *)(param_1 + 0x180)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x180)" ( (binary_expression "param_1 + 0x180" identifier + number_literal) )))) - identifier) )) - identifier)) ;) (if_statement "if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" if (parenthesized_expression "((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0))" ( (binary_expression "(param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) && (parenthesized_expression "(plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" ( (comma_expression "plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" identifier = (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) , (comma_expression "param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "param_5 = param_2" identifier = identifier) , (binary_expression "*(long **)(param_1 + 0x198) != (long *)0x0" (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) )))) != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)))) ))) )) (compound_statement "{\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" { (do_statement "do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      }" { (expression_statement "plVar10 = plVar7;" (assignment_expression "plVar10 = plVar7" identifier = identifier) ;) (expression_statement "plVar7 = (long *)*plVar10;" (assignment_expression "plVar7 = (long *)*plVar10" identifier = (cast_expression "(long *)*plVar10" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar10" * identifier))) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "*plVar10 = *(long *)(param_1 + 400);" (assignment_expression "*plVar10 = *(long *)(param_1 + 400)" (pointer_expression "*plVar10" * identifier) = (pointer_expression "*(long *)(param_1 + 400)" * (cast_expression "(long *)(param_1 + 400)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);" (assignment_expression "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198)" (pointer_expression "*(undefined8 *)(param_1 + 400)" * (cast_expression "(undefined8 *)(param_1 + 400)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_1 + 0x198)" * (cast_expression "(undefined8 *)(param_1 + 0x198)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 0x198) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x198) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x198)" * (cast_expression "(undefined8 *)(param_1 + 0x198)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) )))) = number_literal) ;) })) (break_statement "break;" break ;)) (case_statement "case 1:" case number_literal :) (case_statement "case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" ( (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      local_4c = 0;\n    }" { (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" else (compound_statement "{\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" { (expression_statement "lVar2 = **(long **)(lVar11 + 8);" (assignment_expression "lVar2 = **(long **)(lVar11 + 8)" identifier = (pointer_expression "**(long **)(lVar11 + 8)" * (pointer_expression "*(long **)(lVar11 + 8)" * (cast_expression "(long **)(lVar11 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = *(ushort *)(lVar2 + 0xb0);" (assignment_expression "uVar1 = *(ushort *)(lVar2 + 0xb0)" identifier = (pointer_expression "*(ushort *)(lVar2 + 0xb0)" * (cast_expression "(ushort *)(lVar2 + 0xb0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xb0)" ( (binary_expression "lVar2 + 0xb0" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = *(int *)(lVar2 + 0xbc)" identifier = (pointer_expression "*(int *)(lVar2 + 0xbc)" * (cast_expression "(int *)(lVar2 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xbc)" ( (binary_expression "lVar2 + 0xbc" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));" (assignment_expression "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" identifier = (call_expression "(*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" (parenthesized_expression "(*DAT_0022f728)" ( (pointer_expression "*DAT_0022f728" * identifier) )) (argument_list "(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" ( (pointer_expression "*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" * (cast_expression "(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar2 + 0x118) + 0x40)" ( (binary_expression "*(long *)(lVar2 + 0x118) + 0x40" (pointer_expression "*(long *)(lVar2 + 0x118)" * (cast_expression "(long *)(lVar2 + 0x118)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x118)" ( (binary_expression "lVar2 + 0x118" identifier + number_literal) )))) + number_literal) )))) )))) ;) (expression_statement "iVar5 = FUN_0012a964(lVar2);" (assignment_expression "iVar5 = FUN_0012a964(lVar2)" identifier = (call_expression "FUN_0012a964(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" identifier = (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4" identifier + (binary_expression "((uint)uVar1 + iVar6 + 0x70) * iVar4" (parenthesized_expression "((uint)uVar1 + iVar6 + 0x70)" ( (binary_expression "(uint)uVar1 + iVar6 + 0x70" (binary_expression "(uint)uVar1 + iVar6" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) + identifier) + number_literal) )) * identifier)) + (pointer_expression "*(int *)(lVar2 + 0xbc)" * (cast_expression "(int *)(lVar2 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xbc)" ( (binary_expression "lVar2 + 0xbc" identifier + number_literal) )))))) ;) (if_statement "if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" if (parenthesized_expression "(param_2 == 0xb)" ( (binary_expression "param_2 == 0xb" identifier == number_literal) )) (compound_statement "{\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" { (expression_statement "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);" (assignment_expression "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" identifier = (binary_expression "iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" identifier / (pointer_expression "*(int *)(*(long *)(lVar11 + 8) + 0x60)" * (cast_expression "(int *)(*(long *)(lVar11 + 8) + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar11 + 8) + 0x60)" ( (binary_expression "*(long *)(lVar11 + 8) + 0x60" (pointer_expression "*(long *)(lVar11 + 8)" * (cast_expression "(long *)(lVar11 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) )))) + number_literal) )))))) ;) })) (expression_statement "local_4c = local_4c + iVar6;" (assignment_expression "local_4c = local_4c + iVar6" identifier = (binary_expression "local_4c + iVar6" identifier + identifier)) ;) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) }))) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" * (cast_expression "(uint **)(param_1 + 0x2b8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = (pointer_expression "&local_44" & identifier)) ;) (if_statement "if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(0 < *(int *)(param_1 + 0x28))" ( (binary_expression "0 < *(int *)(param_1 + 0x28)" number_literal < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" { (expression_statement "iVar6 = (*DAT_0022f690)(0x20);" (assignment_expression "iVar6 = (*DAT_0022f690)(0x20)" identifier = (call_expression "(*DAT_0022f690)(0x20)" (parenthesized_expression "(*DAT_0022f690)" ( (pointer_expression "*DAT_0022f690" * identifier) )) (argument_list "(0x20)" ( number_literal )))) ;) (expression_statement "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;" (assignment_expression "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" identifier = (binary_expression "local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" identifier + (binary_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" (parenthesized_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54))" ( (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc)" (pointer_expression "*(int *)(lVar11 + 0x3c)" * (cast_expression "(int *)(lVar11 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x3c)" ( (binary_expression "lVar11 + 0x3c" identifier + number_literal) )))) + (pointer_expression "*(int *)(lVar11 + 0xc)" * (cast_expression "(int *)(lVar11 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xc)" ( (binary_expression "lVar11 + 0xc" identifier + number_literal) ))))) + (pointer_expression "*(int *)(lVar11 + 0x24)" * (cast_expression "(int *)(lVar11 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x24)" ( (binary_expression "lVar11 + 0x24" identifier + number_literal) ))))) + (pointer_expression "*(int *)(lVar11 + 0x54)" * (cast_expression "(int *)(lVar11 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x54)" ( (binary_expression "lVar11 + 0x54" identifier + number_literal) ))))) )) * identifier))) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x18))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x18)" * (cast_expression "(undefined8 *)(lVar11 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x18)" ( (binary_expression "lVar11 + 0x18" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x48))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x48)" * (cast_expression "(undefined8 *)(lVar11 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x48)" ( (binary_expression "lVar11 + 0x48" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x30))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x30)" * (cast_expression "(undefined8 *)(lVar11 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x30)" ( (binary_expression "lVar11 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x60))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x60)" * (cast_expression "(undefined8 *)(lVar11 + 0x60)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x60)" ( (binary_expression "lVar11 + 0x60" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }" for ( (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x40)" identifier = (pointer_expression "*(undefined8 **)(lVar11 + 0x40)" * (cast_expression "(undefined8 **)(lVar11 + 0x40)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 0x40)" ( (binary_expression "lVar11 + 0x40" identifier + number_literal) ))))) ; (binary_expression "puVar3 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar3 = (undefined8 *)*puVar3" identifier = (cast_expression "(undefined8 *)*puVar3" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ) (compound_statement "{\n            FUN_001453db(param_1,puVar3[2]);\n          }" { (expression_statement "FUN_001453db(param_1,puVar3[2]);" (call_expression "FUN_001453db(param_1,puVar3[2])" identifier (argument_list "(param_1,puVar3[2])" ( identifier , (subscript_expression "puVar3[2]" identifier [ number_literal ]) ))) ;) })) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }" for ( (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x10)" identifier = (pointer_expression "*(undefined8 **)(lVar11 + 0x10)" * (cast_expression "(undefined8 **)(lVar11 + 0x10)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 0x10)" ( (binary_expression "lVar11 + 0x10" identifier + number_literal) ))))) ; (binary_expression "puVar3 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar3 = (undefined8 *)*puVar3" identifier = (cast_expression "(undefined8 *)*puVar3" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ) (compound_statement "{\n            FUN_0014471b(param_1,puVar3[2]);\n          }" { (expression_statement "FUN_0014471b(param_1,puVar3[2]);" (call_expression "FUN_0014471b(param_1,puVar3[2])" identifier (argument_list "(param_1,puVar3[2])" ( identifier , (subscript_expression "puVar3[2]" identifier [ number_literal ]) ))) ;) })) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) })) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" * (cast_expression "(undefined8 *)(param_1 + 0x2b8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" * (cast_expression "(uint **)(param_1 + 0x2b8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = (pointer_expression "&local_44" & identifier)) ;) (for_statement "for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" for ( (assignment_expression "lVar8 = *(long *)(param_1 + 8)" identifier = (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ; (binary_expression "lVar8 != 0" identifier != number_literal) ; (assignment_expression "lVar8 = *(long *)(lVar8 + 0x10)" identifier = (pointer_expression "*(long *)(lVar8 + 0x10)" * (cast_expression "(long *)(lVar8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x10)" ( (binary_expression "lVar8 + 0x10" identifier + number_literal) ))))) ) (compound_statement "{\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" { (expression_statement "FUN_00143e41(param_1,lVar8);" (call_expression "FUN_00143e41(param_1,lVar8)" identifier (argument_list "(param_1,lVar8)" ( identifier , identifier ))) ;) (expression_statement "FUN_00141394(param_1,lVar8);" (call_expression "FUN_00141394(param_1,lVar8)" identifier (argument_list "(param_1,lVar8)" ( identifier , identifier ))) ;) })) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" * (cast_expression "(undefined8 *)(param_1 + 0x2b8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 4:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;" case number_literal : (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "lVar8 = param_1 + (long)param_2 * 4;" (assignment_expression "lVar8 = param_1 + (long)param_2 * 4" identifier = (binary_expression "param_1 + (long)param_2 * 4" identifier + (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal))) ;) (expression_statement "*param_4 = *(int *)(lVar8 + 0x174);" (assignment_expression "*param_4 = *(int *)(lVar8 + 0x174)" (pointer_expression "*param_4" * identifier) = (pointer_expression "*(int *)(lVar8 + 0x174)" * (cast_expression "(int *)(lVar8 + 0x174)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x174)" ( (binary_expression "lVar8 + 0x174" identifier + number_literal) ))))) ;) (if_statement "if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" if (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" { (expression_statement "*(undefined4 *)(lVar8 + 0x174) = 0;" (assignment_expression "*(undefined4 *)(lVar8 + 0x174) = 0" (pointer_expression "*(undefined4 *)(lVar8 + 0x174)" * (cast_expression "(undefined4 *)(lVar8 + 0x174)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x174)" ( (binary_expression "lVar8 + 0x174" identifier + number_literal) )))) = number_literal) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) })) (break_statement "break;" break ;)) (case_statement "case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "uVar9 = 1;" (assignment_expression "uVar9 = 1" identifier = number_literal) ;) (if_statement "if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x2b0) < 1)" ( (binary_expression "*(long *)(param_1 + 0x2b0) < 1" (pointer_expression "*(long *)(param_1 + 0x2b0)" * (cast_expression "(long *)(param_1 + 0x2b0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b0)" ( (binary_expression "param_1 + 0x2b0" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" { (expression_statement "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));" (assignment_expression "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8))" identifier = (call_expression "(uint)(0 < *(long *)(param_1 + 0x2a8))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < *(long *)(param_1 + 0x2a8))" ( (binary_expression "0 < *(long *)(param_1 + 0x2a8)" number_literal < (pointer_expression "*(long *)(param_1 + 0x2a8)" * (cast_expression "(long *)(param_1 + 0x2a8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a8)" ( (binary_expression "param_1 + 0x2a8" identifier + number_literal) ))))) )))) ;) })) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0xc:\n    param_2 = 10;" case number_literal : (expression_statement "param_2 = 10;" (assignment_expression "param_2 = 10" identifier = number_literal) ;)) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" case number_literal : (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" ( (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      uVar9 = 0;\n    }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" else (compound_statement "{\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" { (expression_statement "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);" (assignment_expression "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8)" identifier = (binary_expression "(long)param_2 * 4 + **(long **)(lVar11 + 8)" (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (pointer_expression "**(long **)(lVar11 + 8)" * (pointer_expression "*(long **)(lVar11 + 8)" * (cast_expression "(long **)(lVar11 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))))) ;) (expression_statement "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);" (assignment_expression "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4)" identifier = (binary_expression "uVar9 + *(int *)(lVar11 + 0xd4)" identifier + (pointer_expression "*(int *)(lVar11 + 0xd4)" * (cast_expression "(int *)(lVar11 + 0xd4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xd4)" ( (binary_expression "lVar11 + 0xd4" identifier + number_literal) )))))) ;) (if_statement "if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" if (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) (compound_statement "{\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" { (expression_statement "*(undefined4 *)(lVar11 + 0xd4) = 0;" (assignment_expression "*(undefined4 *)(lVar11 + 0xd4) = 0" (pointer_expression "*(undefined4 *)(lVar11 + 0xd4)" * (cast_expression "(undefined4 *)(lVar11 + 0xd4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xd4)" ( (binary_expression "lVar11 + 0xd4" identifier + number_literal) )))) = number_literal) ;) })) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) }))) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "default:\n    param_5 = 1;" default : (expression_statement "param_5 = 1;" (assignment_expression "param_5 = 1" identifier = number_literal) ;)) })) (expression_statement "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18))" identifier (argument_list "(*(undefined8 *)(param_1 + 0x18))" ( (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return param_5;" return identifier ;) })))
(translation_unit "int sqlite3_db_status(sqlite3 *db,int op,int *pCurrent,int *pHighwater,int resetFlag)\n\n{\n  ushort uVar1;\n  Schema *pSVar2;\n  HashElem *pHVar3;\n  Vdbe *p;\n  Btree *pBVar4;\n  Pager *pPVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  LookasideSlot *pLVar9;\n  sqlite3_uint64 sVar10;\n  long lVar11;\n  int iVar12;\n  LookasideSlot *pLVar13;\n  long in_FS_OFFSET;\n  int local_4c;\n  int nByte;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  sqlite3_mutex_enter(db->mutex);\n  switch(op) {\n  case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;\n  case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;\n  case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;\n  case 0xc:\n    op = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;\n  default:\n    resetFlag = 1;\n  }\n  sqlite3_mutex_leave(db->mutex);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return resetFlag;\n}\n\n" (function_definition "int sqlite3_db_status(sqlite3 *db,int op,int *pCurrent,int *pHighwater,int resetFlag)\n\n{\n  ushort uVar1;\n  Schema *pSVar2;\n  HashElem *pHVar3;\n  Vdbe *p;\n  Btree *pBVar4;\n  Pager *pPVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  LookasideSlot *pLVar9;\n  sqlite3_uint64 sVar10;\n  long lVar11;\n  int iVar12;\n  LookasideSlot *pLVar13;\n  long in_FS_OFFSET;\n  int local_4c;\n  int nByte;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  sqlite3_mutex_enter(db->mutex);\n  switch(op) {\n  case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;\n  case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;\n  case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;\n  case 0xc:\n    op = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;\n  default:\n    resetFlag = 1;\n  }\n  sqlite3_mutex_leave(db->mutex);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return resetFlag;\n}" primitive_type (function_declarator "sqlite3_db_status(sqlite3 *db,int op,int *pCurrent,int *pHighwater,int resetFlag)" identifier (parameter_list "(sqlite3 *db,int op,int *pCurrent,int *pHighwater,int resetFlag)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "int op" primitive_type identifier) , (parameter_declaration "int *pCurrent" primitive_type (pointer_declarator "*pCurrent" * identifier)) , (parameter_declaration "int *pHighwater" primitive_type (pointer_declarator "*pHighwater" * identifier)) , (parameter_declaration "int resetFlag" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  Schema *pSVar2;\n  HashElem *pHVar3;\n  Vdbe *p;\n  Btree *pBVar4;\n  Pager *pPVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  LookasideSlot *pLVar9;\n  sqlite3_uint64 sVar10;\n  long lVar11;\n  int iVar12;\n  LookasideSlot *pLVar13;\n  long in_FS_OFFSET;\n  int local_4c;\n  int nByte;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  sqlite3_mutex_enter(db->mutex);\n  switch(op) {\n  case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;\n  case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;\n  case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;\n  case 0xc:\n    op = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;\n  default:\n    resetFlag = 1;\n  }\n  sqlite3_mutex_leave(db->mutex);\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  return resetFlag;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "Schema *pSVar2;" type_identifier (pointer_declarator "*pSVar2" * identifier) ;) (declaration "HashElem *pHVar3;" type_identifier (pointer_declarator "*pHVar3" * identifier) ;) (declaration "Vdbe *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "Btree *pBVar4;" type_identifier (pointer_declarator "*pBVar4" * identifier) ;) (declaration "Pager *pPVar5;" type_identifier (pointer_declarator "*pPVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "LookasideSlot *pLVar9;" type_identifier (pointer_declarator "*pLVar9" * identifier) ;) (declaration "sqlite3_uint64 sVar10;" type_identifier identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "LookasideSlot *pLVar13;" type_identifier (pointer_declarator "*pLVar13" * identifier) ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "int local_4c;" primitive_type identifier ;) (declaration "int nByte;" primitive_type identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "sqlite3_mutex_enter(db->mutex);" (call_expression "sqlite3_mutex_enter(db->mutex)" identifier (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) (switch_statement "switch(op) {\n  case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;\n  case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;\n  case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;\n  case 0xc:\n    op = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;\n  default:\n    resetFlag = 1;\n  }" switch (parenthesized_expression "(op)" ( identifier )) (compound_statement "{\n  case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;\n  case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;\n  case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;\n  case 0xc:\n    op = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;\n  default:\n    resetFlag = 1;\n  }" { (case_statement "case 0:\n    pLVar9 = (db->lookaside).pInit;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    pLVar9 = (db->lookaside).pFree;\n    if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }\n    if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }\n    *pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;\n    if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }\n    break;" case number_literal : (expression_statement "pLVar9 = (db->lookaside).pInit;" (assignment_expression "pLVar9 = (db->lookaside).pInit" identifier = (field_expression "(db->lookaside).pInit" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar12 = 0;\n    }\n    else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" if (parenthesized_expression "(pLVar9 == (LookasideSlot *)0x0)" ( (binary_expression "pLVar9 == (LookasideSlot *)0x0" identifier == (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar12 = 0;\n    }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" else (compound_statement "{\n      iVar12 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (do_statement "do {\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);" do (compound_statement "{\n        pLVar9 = pLVar9->pNext;\n        iVar12 = iVar12 + 1;\n      }" { (expression_statement "pLVar9 = pLVar9->pNext;" (assignment_expression "pLVar9 = pLVar9->pNext" identifier = (field_expression "pLVar9->pNext" identifier -> field_identifier)) ;) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pLVar9 != (LookasideSlot *)0x0)" ( (binary_expression "pLVar9 != (LookasideSlot *)0x0" identifier != (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (expression_statement "pLVar9 = (db->lookaside).pFree;" (assignment_expression "pLVar9 = (db->lookaside).pFree" identifier = (field_expression "(db->lookaside).pFree" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (pLVar9 == (LookasideSlot *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" if (parenthesized_expression "(pLVar9 == (LookasideSlot *)0x0)" ( (binary_expression "pLVar9 == (LookasideSlot *)0x0" identifier == (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar6 = 0;\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" else (compound_statement "{\n      iVar6 = 0;\n      do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      } while (pLVar9 != (LookasideSlot *)0x0);" do (compound_statement "{\n        pLVar9 = pLVar9->pNext;\n        iVar6 = iVar6 + 1;\n      }" { (expression_statement "pLVar9 = pLVar9->pNext;" (assignment_expression "pLVar9 = pLVar9->pNext" identifier = (field_expression "pLVar9->pNext" identifier -> field_identifier)) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pLVar9 != (LookasideSlot *)0x0)" ( (binary_expression "pLVar9 != (LookasideSlot *)0x0" identifier != (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (if_statement "if (pHighwater != (int *)0x0) {\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }" if (parenthesized_expression "(pHighwater != (int *)0x0)" ( (binary_expression "pHighwater != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *pHighwater = (db->lookaside).nSlot - iVar12;\n    }" { (expression_statement "*pHighwater = (db->lookaside).nSlot - iVar12;" (assignment_expression "*pHighwater = (db->lookaside).nSlot - iVar12" (pointer_expression "*pHighwater" * identifier) = (binary_expression "(db->lookaside).nSlot - iVar12" (field_expression "(db->lookaside).nSlot" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) - identifier)) ;) })) (expression_statement "*pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6;" (assignment_expression "*pCurrent = ((db->lookaside).nSlot - iVar12) - iVar6" (pointer_expression "*pCurrent" * identifier) = (binary_expression "((db->lookaside).nSlot - iVar12) - iVar6" (parenthesized_expression "((db->lookaside).nSlot - iVar12)" ( (binary_expression "(db->lookaside).nSlot - iVar12" (field_expression "(db->lookaside).nSlot" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) - identifier) )) - identifier)) ;) (if_statement "if ((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)) {\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }" if (parenthesized_expression "((resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0))" ( (binary_expression "(resetFlag != 0) &&\n       (pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)" (parenthesized_expression "(resetFlag != 0)" ( (binary_expression "resetFlag != 0" identifier != number_literal) )) && (parenthesized_expression "(pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0)" ( (comma_expression "pLVar9 = (db->lookaside).pFree, resetFlag = op, pLVar9 != (LookasideSlot *)0x0" (assignment_expression "pLVar9 = (db->lookaside).pFree" identifier = (field_expression "(db->lookaside).pFree" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier)) , (comma_expression "resetFlag = op, pLVar9 != (LookasideSlot *)0x0" (assignment_expression "resetFlag = op" identifier = identifier) , (binary_expression "pLVar9 != (LookasideSlot *)0x0" identifier != (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)))) ))) )) (compound_statement "{\n      do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);\n      pLVar13->pNext = (db->lookaside).pInit;\n      (db->lookaside).pInit = (db->lookaside).pFree;\n      (db->lookaside).pFree = (LookasideSlot *)0x0;\n    }" { (do_statement "do {\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      } while (pLVar9 != (LookasideSlot *)0x0);" do (compound_statement "{\n        pLVar13 = pLVar9;\n        pLVar9 = pLVar13->pNext;\n      }" { (expression_statement "pLVar13 = pLVar9;" (assignment_expression "pLVar13 = pLVar9" identifier = identifier) ;) (expression_statement "pLVar9 = pLVar13->pNext;" (assignment_expression "pLVar9 = pLVar13->pNext" identifier = (field_expression "pLVar13->pNext" identifier -> field_identifier)) ;) }) while (parenthesized_expression "(pLVar9 != (LookasideSlot *)0x0)" ( (binary_expression "pLVar9 != (LookasideSlot *)0x0" identifier != (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "pLVar13->pNext = (db->lookaside).pInit;" (assignment_expression "pLVar13->pNext = (db->lookaside).pInit" (field_expression "pLVar13->pNext" identifier -> field_identifier) = (field_expression "(db->lookaside).pInit" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "(db->lookaside).pInit = (db->lookaside).pFree;" (assignment_expression "(db->lookaside).pInit = (db->lookaside).pFree" (field_expression "(db->lookaside).pInit" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) = (field_expression "(db->lookaside).pFree" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "(db->lookaside).pFree = (LookasideSlot *)0x0;" (assignment_expression "(db->lookaside).pFree = (LookasideSlot *)0x0" (field_expression "(db->lookaside).pFree" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(LookasideSlot *)0x0" ( (type_descriptor "LookasideSlot *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (break_statement "break;" break ;)) (case_statement "case 1:" case number_literal :) (case_statement "case 0xb:\n    sqlite3BtreeEnterAll(db);\n    if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    sqlite3BtreeLeaveAll(db);\n    *pCurrent = local_4c;\n    *pHighwater = 0;\n    resetFlag = 0;\n    break;" case number_literal : (expression_statement "sqlite3BtreeEnterAll(db);" (call_expression "sqlite3BtreeEnterAll(db)" identifier (argument_list "(db)" ( identifier ))) ;) (if_statement "if (db->nDb < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" if (parenthesized_expression "(db->nDb < 1)" ( (binary_expression "db->nDb < 1" (field_expression "db->nDb" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n      local_4c = 0;\n    }" { (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" else (compound_statement "{\n      lVar11 = 0;\n      local_4c = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" { (expression_statement "lVar11 = 0;" (assignment_expression "lVar11 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (do_statement "do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);" do (compound_statement "{\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }\n        lVar11 = lVar11 + 1;\n      }" { (expression_statement "pBVar4 = db->aDb[lVar11].pBt;" (assignment_expression "pBVar4 = db->aDb[lVar11].pBt" identifier = (field_expression "db->aDb[lVar11].pBt" (subscript_expression "db->aDb[lVar11]" (field_expression "db->aDb" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (if_statement "if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }" if (parenthesized_expression "(pBVar4 != (Btree *)0x0)" ( (binary_expression "pBVar4 != (Btree *)0x0" identifier != (cast_expression "(Btree *)0x0" ( (type_descriptor "Btree *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pPVar5 = pBVar4->pBt->pPager;\n          uVar1 = pPVar5->nExtra;\n          iVar12 = pPVar5->pageSize;\n          iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);\n          iVar7 = sqlite3MallocSize(pPVar5);\n          iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;\n          if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }\n          local_4c = local_4c + iVar12;\n        }" { (expression_statement "pPVar5 = pBVar4->pBt->pPager;" (assignment_expression "pPVar5 = pBVar4->pBt->pPager" identifier = (field_expression "pBVar4->pBt->pPager" (field_expression "pBVar4->pBt" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "uVar1 = pPVar5->nExtra;" (assignment_expression "uVar1 = pPVar5->nExtra" identifier = (field_expression "pPVar5->nExtra" identifier -> field_identifier)) ;) (expression_statement "iVar12 = pPVar5->pageSize;" (assignment_expression "iVar12 = pPVar5->pageSize" identifier = (field_expression "pPVar5->pageSize" identifier -> field_identifier)) ;) (expression_statement "iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);" (assignment_expression "iVar6 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache)" identifier = (call_expression "(*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache)" (parenthesized_expression "(*sqlite3Config.pcache2.xPagecount)" ( (pointer_expression "*sqlite3Config.pcache2.xPagecount" * (field_expression "sqlite3Config.pcache2.xPagecount" (field_expression "sqlite3Config.pcache2" identifier . field_identifier) . field_identifier)) )) (argument_list "(pPVar5->pPCache->pCache)" ( (field_expression "pPVar5->pPCache->pCache" (field_expression "pPVar5->pPCache" identifier -> field_identifier) -> field_identifier) )))) ;) (expression_statement "iVar7 = sqlite3MallocSize(pPVar5);" (assignment_expression "iVar7 = sqlite3MallocSize(pPVar5)" identifier = (call_expression "sqlite3MallocSize(pPVar5)" identifier (argument_list "(pPVar5)" ( identifier )))) ;) (expression_statement "iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize;" (assignment_expression "iVar12 = iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize" identifier = (binary_expression "iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6 + pPVar5->pageSize" (binary_expression "iVar7 + ((uint)uVar1 + iVar12 + 0x70) * iVar6" identifier + (binary_expression "((uint)uVar1 + iVar12 + 0x70) * iVar6" (parenthesized_expression "((uint)uVar1 + iVar12 + 0x70)" ( (binary_expression "(uint)uVar1 + iVar12 + 0x70" (binary_expression "(uint)uVar1 + iVar12" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) + identifier) + number_literal) )) * identifier)) + (field_expression "pPVar5->pageSize" identifier -> field_identifier))) ;) (if_statement "if (op == 0xb) {\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }" if (parenthesized_expression "(op == 0xb)" ( (binary_expression "op == 0xb" identifier == number_literal) )) (compound_statement "{\n            iVar12 = iVar12 / pBVar4->pBt->nRef;\n          }" { (expression_statement "iVar12 = iVar12 / pBVar4->pBt->nRef;" (assignment_expression "iVar12 = iVar12 / pBVar4->pBt->nRef" identifier = (binary_expression "iVar12 / pBVar4->pBt->nRef" identifier / (field_expression "pBVar4->pBt->nRef" (field_expression "pBVar4->pBt" identifier -> field_identifier) -> field_identifier))) ;) })) (expression_statement "local_4c = local_4c + iVar12;" (assignment_expression "local_4c = local_4c + iVar12" identifier = (binary_expression "local_4c + iVar12" identifier + identifier)) ;) })) (expression_statement "lVar11 = lVar11 + 1;" (assignment_expression "lVar11 = lVar11 + 1" identifier = (binary_expression "lVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar11 < db->nDb)" ( (binary_expression "(int)lVar11 < db->nDb" (cast_expression "(int)lVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (field_expression "db->nDb" identifier -> field_identifier)) )) ;) }))) (expression_statement "sqlite3BtreeLeaveAll(db);" (call_expression "sqlite3BtreeLeaveAll(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "*pCurrent = local_4c;" (assignment_expression "*pCurrent = local_4c" (pointer_expression "*pCurrent" * identifier) = identifier) ;) (expression_statement "*pHighwater = 0;" (assignment_expression "*pHighwater = 0" (pointer_expression "*pHighwater" * identifier) = number_literal) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n    nByte = 0;\n    sqlite3BtreeEnterAll(db);\n    db->pnBytesFreed = &nByte;\n    if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    sqlite3BtreeLeaveAll(db);\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;" case number_literal : (expression_statement "nByte = 0;" (assignment_expression "nByte = 0" identifier = number_literal) ;) (expression_statement "sqlite3BtreeEnterAll(db);" (call_expression "sqlite3BtreeEnterAll(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "db->pnBytesFreed = &nByte;" (assignment_expression "db->pnBytesFreed = &nByte" (field_expression "db->pnBytesFreed" identifier -> field_identifier) = (pointer_expression "&nByte" & identifier)) ;) (if_statement "if (0 < db->nDb) {\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" if (parenthesized_expression "(0 < db->nDb)" ( (binary_expression "0 < db->nDb" number_literal < (field_expression "db->nDb" identifier -> field_identifier)) )) (compound_statement "{\n      lVar11 = 0;\n      do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" { (expression_statement "lVar11 = 0;" (assignment_expression "lVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);" do (compound_statement "{\n        pSVar2 = db->aDb[lVar11].pSchema;\n        if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }\n        lVar11 = lVar11 + 1;\n      }" { (expression_statement "pSVar2 = db->aDb[lVar11].pSchema;" (assignment_expression "pSVar2 = db->aDb[lVar11].pSchema" identifier = (field_expression "db->aDb[lVar11].pSchema" (subscript_expression "db->aDb[lVar11]" (field_expression "db->aDb" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (if_statement "if (pSVar2 != (Schema *)0x0) {\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }" if (parenthesized_expression "(pSVar2 != (Schema *)0x0)" ( (binary_expression "pSVar2 != (Schema *)0x0" identifier != (cast_expression "(Schema *)0x0" ( (type_descriptor "Schema *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar12 = (*sqlite3Config.m.xRoundup)(0x20);\n          nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;\n          sVar10 = sqlite3_msize((pSVar2->tblHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->trigHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->idxHash).ht);\n          nByte = nByte + (int)sVar10;\n          sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);\n          nByte = nByte + (int)sVar10;\n          for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }\n          for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }\n        }" { (expression_statement "iVar12 = (*sqlite3Config.m.xRoundup)(0x20);" (assignment_expression "iVar12 = (*sqlite3Config.m.xRoundup)(0x20)" identifier = (call_expression "(*sqlite3Config.m.xRoundup)(0x20)" (parenthesized_expression "(*sqlite3Config.m.xRoundup)" ( (pointer_expression "*sqlite3Config.m.xRoundup" * (field_expression "sqlite3Config.m.xRoundup" (field_expression "sqlite3Config.m" identifier . field_identifier) . field_identifier)) )) (argument_list "(0x20)" ( number_literal )))) ;) (expression_statement "nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12;" (assignment_expression "nByte = nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12" identifier = (binary_expression "nByte + ((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12" identifier + (binary_expression "((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count) * iVar12" (parenthesized_expression "((pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count)" ( (binary_expression "(pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count + (pSVar2->fkeyHash).count" (binary_expression "(pSVar2->trigHash).count + (pSVar2->tblHash).count +\n                           (pSVar2->idxHash).count" (binary_expression "(pSVar2->trigHash).count + (pSVar2->tblHash).count" (field_expression "(pSVar2->trigHash).count" (parenthesized_expression "(pSVar2->trigHash)" ( (field_expression "pSVar2->trigHash" identifier -> field_identifier) )) . field_identifier) + (field_expression "(pSVar2->tblHash).count" (parenthesized_expression "(pSVar2->tblHash)" ( (field_expression "pSVar2->tblHash" identifier -> field_identifier) )) . field_identifier)) + (field_expression "(pSVar2->idxHash).count" (parenthesized_expression "(pSVar2->idxHash)" ( (field_expression "pSVar2->idxHash" identifier -> field_identifier) )) . field_identifier)) + (field_expression "(pSVar2->fkeyHash).count" (parenthesized_expression "(pSVar2->fkeyHash)" ( (field_expression "pSVar2->fkeyHash" identifier -> field_identifier) )) . field_identifier)) )) * identifier))) ;) (expression_statement "sVar10 = sqlite3_msize((pSVar2->tblHash).ht);" (assignment_expression "sVar10 = sqlite3_msize((pSVar2->tblHash).ht)" identifier = (call_expression "sqlite3_msize((pSVar2->tblHash).ht)" identifier (argument_list "((pSVar2->tblHash).ht)" ( (field_expression "(pSVar2->tblHash).ht" (parenthesized_expression "(pSVar2->tblHash)" ( (field_expression "pSVar2->tblHash" identifier -> field_identifier) )) . field_identifier) )))) ;) (expression_statement "nByte = nByte + (int)sVar10;" (assignment_expression "nByte = nByte + (int)sVar10" identifier = (binary_expression "nByte + (int)sVar10" identifier + (cast_expression "(int)sVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "sVar10 = sqlite3_msize((pSVar2->trigHash).ht);" (assignment_expression "sVar10 = sqlite3_msize((pSVar2->trigHash).ht)" identifier = (call_expression "sqlite3_msize((pSVar2->trigHash).ht)" identifier (argument_list "((pSVar2->trigHash).ht)" ( (field_expression "(pSVar2->trigHash).ht" (parenthesized_expression "(pSVar2->trigHash)" ( (field_expression "pSVar2->trigHash" identifier -> field_identifier) )) . field_identifier) )))) ;) (expression_statement "nByte = nByte + (int)sVar10;" (assignment_expression "nByte = nByte + (int)sVar10" identifier = (binary_expression "nByte + (int)sVar10" identifier + (cast_expression "(int)sVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "sVar10 = sqlite3_msize((pSVar2->idxHash).ht);" (assignment_expression "sVar10 = sqlite3_msize((pSVar2->idxHash).ht)" identifier = (call_expression "sqlite3_msize((pSVar2->idxHash).ht)" identifier (argument_list "((pSVar2->idxHash).ht)" ( (field_expression "(pSVar2->idxHash).ht" (parenthesized_expression "(pSVar2->idxHash)" ( (field_expression "pSVar2->idxHash" identifier -> field_identifier) )) . field_identifier) )))) ;) (expression_statement "nByte = nByte + (int)sVar10;" (assignment_expression "nByte = nByte + (int)sVar10" identifier = (binary_expression "nByte + (int)sVar10" identifier + (cast_expression "(int)sVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht);" (assignment_expression "sVar10 = sqlite3_msize((pSVar2->fkeyHash).ht)" identifier = (call_expression "sqlite3_msize((pSVar2->fkeyHash).ht)" identifier (argument_list "((pSVar2->fkeyHash).ht)" ( (field_expression "(pSVar2->fkeyHash).ht" (parenthesized_expression "(pSVar2->fkeyHash)" ( (field_expression "pSVar2->fkeyHash" identifier -> field_identifier) )) . field_identifier) )))) ;) (expression_statement "nByte = nByte + (int)sVar10;" (assignment_expression "nByte = nByte + (int)sVar10" identifier = (binary_expression "nByte + (int)sVar10" identifier + (cast_expression "(int)sVar10" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (for_statement "for (pHVar3 = (pSVar2->trigHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next)\n          {\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }" for ( (assignment_expression "pHVar3 = (pSVar2->trigHash).first" identifier = (field_expression "(pSVar2->trigHash).first" (parenthesized_expression "(pSVar2->trigHash)" ( (field_expression "pSVar2->trigHash" identifier -> field_identifier) )) . field_identifier)) ; (binary_expression "pHVar3 != (HashElem *)0x0" identifier != (cast_expression "(HashElem *)0x0" ( (type_descriptor "HashElem *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pHVar3 = pHVar3->next" identifier = (field_expression "pHVar3->next" identifier -> field_identifier)) ) (compound_statement "{\n            sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);\n          }" { (expression_statement "sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data);" (call_expression "sqlite3DeleteTrigger(db,(Trigger *)pHVar3->data)" identifier (argument_list "(db,(Trigger *)pHVar3->data)" ( identifier , (cast_expression "(Trigger *)pHVar3->data" ( (type_descriptor "Trigger *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pHVar3->data" identifier -> field_identifier)) ))) ;) })) (for_statement "for (pHVar3 = (pSVar2->tblHash).first; pHVar3 != (HashElem *)0x0; pHVar3 = pHVar3->next) {\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }" for ( (assignment_expression "pHVar3 = (pSVar2->tblHash).first" identifier = (field_expression "(pSVar2->tblHash).first" (parenthesized_expression "(pSVar2->tblHash)" ( (field_expression "pSVar2->tblHash" identifier -> field_identifier) )) . field_identifier)) ; (binary_expression "pHVar3 != (HashElem *)0x0" identifier != (cast_expression "(HashElem *)0x0" ( (type_descriptor "HashElem *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pHVar3 = pHVar3->next" identifier = (field_expression "pHVar3->next" identifier -> field_identifier)) ) (compound_statement "{\n            sqlite3DeleteTable(db,(Table *)pHVar3->data);\n          }" { (expression_statement "sqlite3DeleteTable(db,(Table *)pHVar3->data);" (call_expression "sqlite3DeleteTable(db,(Table *)pHVar3->data)" identifier (argument_list "(db,(Table *)pHVar3->data)" ( identifier , (cast_expression "(Table *)pHVar3->data" ( (type_descriptor "Table *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pHVar3->data" identifier -> field_identifier)) ))) ;) })) })) (expression_statement "lVar11 = lVar11 + 1;" (assignment_expression "lVar11 = lVar11 + 1" identifier = (binary_expression "lVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar11 < db->nDb)" ( (binary_expression "(int)lVar11 < db->nDb" (cast_expression "(int)lVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (field_expression "db->nDb" identifier -> field_identifier)) )) ;) })) (expression_statement "db->pnBytesFreed = (int *)0x0;" (assignment_expression "db->pnBytesFreed = (int *)0x0" (field_expression "db->pnBytesFreed" identifier -> field_identifier) = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "sqlite3BtreeLeaveAll(db);" (call_expression "sqlite3BtreeLeaveAll(db)" identifier (argument_list "(db)" ( identifier ))) ;) (expression_statement "*pHighwater = 0;" (assignment_expression "*pHighwater = 0" (pointer_expression "*pHighwater" * identifier) = number_literal) ;) (expression_statement "*pCurrent = nByte;" (assignment_expression "*pCurrent = nByte" (pointer_expression "*pCurrent" * identifier) = identifier) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    nByte = 0;\n    db->pnBytesFreed = &nByte;\n    for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }\n    db->pnBytesFreed = (int *)0x0;\n    *pHighwater = 0;\n    *pCurrent = nByte;\n    resetFlag = 0;\n    break;" case number_literal : (expression_statement "nByte = 0;" (assignment_expression "nByte = 0" identifier = number_literal) ;) (expression_statement "db->pnBytesFreed = &nByte;" (assignment_expression "db->pnBytesFreed = &nByte" (field_expression "db->pnBytesFreed" identifier -> field_identifier) = (pointer_expression "&nByte" & identifier)) ;) (for_statement "for (p = db->pVdbe; p != (Vdbe *)0x0; p = p->pNext) {\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }" for ( (assignment_expression "p = db->pVdbe" identifier = (field_expression "db->pVdbe" identifier -> field_identifier)) ; (binary_expression "p != (Vdbe *)0x0" identifier != (cast_expression "(Vdbe *)0x0" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "p = p->pNext" identifier = (field_expression "p->pNext" identifier -> field_identifier)) ) (compound_statement "{\n      sqlite3VdbeClearObject(db,p);\n      sqlite3DbFree(db,p);\n    }" { (expression_statement "sqlite3VdbeClearObject(db,p);" (call_expression "sqlite3VdbeClearObject(db,p)" identifier (argument_list "(db,p)" ( identifier , identifier ))) ;) (expression_statement "sqlite3DbFree(db,p);" (call_expression "sqlite3DbFree(db,p)" identifier (argument_list "(db,p)" ( identifier , identifier ))) ;) })) (expression_statement "db->pnBytesFreed = (int *)0x0;" (assignment_expression "db->pnBytesFreed = (int *)0x0" (field_expression "db->pnBytesFreed" identifier -> field_identifier) = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "*pHighwater = 0;" (assignment_expression "*pHighwater = 0" (pointer_expression "*pHighwater" * identifier) = number_literal) ;) (expression_statement "*pCurrent = nByte;" (assignment_expression "*pCurrent = nByte" (pointer_expression "*pCurrent" * identifier) = identifier) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 4:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:\n    *pCurrent = 0;\n    *pHighwater = (db->lookaside).anStat[(long)op + -4];\n    if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }\n    break;" case number_literal : (expression_statement "*pCurrent = 0;" (assignment_expression "*pCurrent = 0" (pointer_expression "*pCurrent" * identifier) = number_literal) ;) (expression_statement "*pHighwater = (db->lookaside).anStat[(long)op + -4];" (assignment_expression "*pHighwater = (db->lookaside).anStat[(long)op + -4]" (pointer_expression "*pHighwater" * identifier) = (subscript_expression "(db->lookaside).anStat[(long)op + -4]" (field_expression "(db->lookaside).anStat" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) [ (binary_expression "(long)op + -4" (cast_expression "(long)op" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ])) ;) (if_statement "if (resetFlag != 0) {\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }" if (parenthesized_expression "(resetFlag != 0)" ( (binary_expression "resetFlag != 0" identifier != number_literal) )) (compound_statement "{\n      (db->lookaside).anStat[(long)op + -4] = 0;\n      resetFlag = 0;\n    }" { (expression_statement "(db->lookaside).anStat[(long)op + -4] = 0;" (assignment_expression "(db->lookaside).anStat[(long)op + -4] = 0" (subscript_expression "(db->lookaside).anStat[(long)op + -4]" (field_expression "(db->lookaside).anStat" (parenthesized_expression "(db->lookaside)" ( (field_expression "db->lookaside" identifier -> field_identifier) )) . field_identifier) [ (binary_expression "(long)op + -4" (cast_expression "(long)op" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ]) = number_literal) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) })) (break_statement "break;" break ;)) (case_statement "case 10:\n    *pHighwater = 0;\n    uVar8 = 1;\n    if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }\n    *pCurrent = uVar8;\n    resetFlag = 0;\n    break;" case number_literal : (expression_statement "*pHighwater = 0;" (assignment_expression "*pHighwater = 0" (pointer_expression "*pHighwater" * identifier) = number_literal) ;) (expression_statement "uVar8 = 1;" (assignment_expression "uVar8 = 1" identifier = number_literal) ;) (if_statement "if (db->nDeferredImmCons < 1) {\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }" if (parenthesized_expression "(db->nDeferredImmCons < 1)" ( (binary_expression "db->nDeferredImmCons < 1" (field_expression "db->nDeferredImmCons" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n      uVar8 = (uint)(0 < db->nDeferredCons);\n    }" { (expression_statement "uVar8 = (uint)(0 < db->nDeferredCons);" (assignment_expression "uVar8 = (uint)(0 < db->nDeferredCons)" identifier = (call_expression "(uint)(0 < db->nDeferredCons)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < db->nDeferredCons)" ( (binary_expression "0 < db->nDeferredCons" number_literal < (field_expression "db->nDeferredCons" identifier -> field_identifier)) )))) ;) })) (expression_statement "*pCurrent = uVar8;" (assignment_expression "*pCurrent = uVar8" (pointer_expression "*pCurrent" * identifier) = identifier) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0xc:\n    op = 10;" case number_literal : (expression_statement "op = 10;" (assignment_expression "op = 10" identifier = number_literal) ;)) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:\n    if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }\n    *pHighwater = 0;\n    *pCurrent = iVar12;\n    resetFlag = 0;\n    break;" case number_literal : (if_statement "if (db->nDb < 1) {\n      iVar12 = 0;\n    }\n    else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" if (parenthesized_expression "(db->nDb < 1)" ( (binary_expression "db->nDb < 1" (field_expression "db->nDb" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n      iVar12 = 0;\n    }" { (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" else (compound_statement "{\n      lVar11 = 0;\n      iVar12 = 0;\n      do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);\n    }" { (expression_statement "lVar11 = 0;" (assignment_expression "lVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (do_statement "do {\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      } while ((int)lVar11 < db->nDb);" do (compound_statement "{\n        pBVar4 = db->aDb[lVar11].pBt;\n        if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }\n        lVar11 = lVar11 + 1;\n      }" { (expression_statement "pBVar4 = db->aDb[lVar11].pBt;" (assignment_expression "pBVar4 = db->aDb[lVar11].pBt" identifier = (field_expression "db->aDb[lVar11].pBt" (subscript_expression "db->aDb[lVar11]" (field_expression "db->aDb" identifier -> field_identifier) [ identifier ]) . field_identifier)) ;) (if_statement "if (pBVar4 != (Btree *)0x0) {\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }" if (parenthesized_expression "(pBVar4 != (Btree *)0x0)" ( (binary_expression "pBVar4 != (Btree *)0x0" identifier != (cast_expression "(Btree *)0x0" ( (type_descriptor "Btree *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pPVar5 = pBVar4->pBt->pPager;\n          iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];\n          if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }\n        }" { (expression_statement "pPVar5 = pBVar4->pBt->pPager;" (assignment_expression "pPVar5 = pBVar4->pBt->pPager" identifier = (field_expression "pBVar4->pBt->pPager" (field_expression "pBVar4->pBt" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "iVar12 = iVar12 + pPVar5->aStat[(long)op + -7];" (assignment_expression "iVar12 = iVar12 + pPVar5->aStat[(long)op + -7]" identifier = (binary_expression "iVar12 + pPVar5->aStat[(long)op + -7]" identifier + (subscript_expression "pPVar5->aStat[(long)op + -7]" (field_expression "pPVar5->aStat" identifier -> field_identifier) [ (binary_expression "(long)op + -7" (cast_expression "(long)op" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ]))) ;) (if_statement "if (resetFlag != 0) {\n            pPVar5->aStat[(long)op + -7] = 0;\n          }" if (parenthesized_expression "(resetFlag != 0)" ( (binary_expression "resetFlag != 0" identifier != number_literal) )) (compound_statement "{\n            pPVar5->aStat[(long)op + -7] = 0;\n          }" { (expression_statement "pPVar5->aStat[(long)op + -7] = 0;" (assignment_expression "pPVar5->aStat[(long)op + -7] = 0" (subscript_expression "pPVar5->aStat[(long)op + -7]" (field_expression "pPVar5->aStat" identifier -> field_identifier) [ (binary_expression "(long)op + -7" (cast_expression "(long)op" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ]) = number_literal) ;) })) })) (expression_statement "lVar11 = lVar11 + 1;" (assignment_expression "lVar11 = lVar11 + 1" identifier = (binary_expression "lVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar11 < db->nDb)" ( (binary_expression "(int)lVar11 < db->nDb" (cast_expression "(int)lVar11" ( (type_descriptor "int" primitive_type) ) identifier) < (field_expression "db->nDb" identifier -> field_identifier)) )) ;) }))) (expression_statement "*pHighwater = 0;" (assignment_expression "*pHighwater = 0" (pointer_expression "*pHighwater" * identifier) = number_literal) ;) (expression_statement "*pCurrent = iVar12;" (assignment_expression "*pCurrent = iVar12" (pointer_expression "*pCurrent" * identifier) = identifier) ;) (expression_statement "resetFlag = 0;" (assignment_expression "resetFlag = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "default:\n    resetFlag = 1;" default : (expression_statement "resetFlag = 1;" (assignment_expression "resetFlag = 1" identifier = number_literal) ;)) })) (expression_statement "sqlite3_mutex_leave(db->mutex);" (call_expression "sqlite3_mutex_leave(db->mutex)" identifier (argument_list "(db->mutex)" ( (field_expression "db->mutex" identifier -> field_identifier) ))) ;) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return resetFlag;" return identifier ;) })))
(translation_unit "int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)\n\n{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return param_5;\n}\n\n" (function_definition "int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)\n\n{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return param_5;\n}" primitive_type (function_declarator "FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" identifier (parameter_list "(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return param_5;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "uint local_4c;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "long local_40;" (sized_type_specifier "long" long) identifier ;) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18))" identifier (argument_list "(*(undefined8 *)(param_1 + 0x18))" ( (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (switch_statement "switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" switch (parenthesized_expression "(param_2)" ( identifier )) (compound_statement "{\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" { (case_statement "case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;" case number_literal : (expression_statement "plVar7 = *(long **)(param_1 + 400);" (assignment_expression "plVar7 = *(long **)(param_1 + 400)" identifier = (pointer_expression "*(long **)(param_1 + 400)" * (cast_expression "(long **)(param_1 + 400)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar6 = 0;\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" else (compound_statement "{\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      }" { (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" identifier = (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (expression_statement "plVar7 = *(long **)(param_1 + 0x198);" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" identifier = (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar4 = 0;\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" else (compound_statement "{\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      }" { (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" identifier = (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) }))) (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" { (expression_statement "*param_4 = *(int *)(param_1 + 0x180) - iVar6;" (assignment_expression "*param_4 = *(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*param_4" * identifier) = (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" * (cast_expression "(int *)(param_1 + 0x180)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x180)" ( (binary_expression "param_1 + 0x180" identifier + number_literal) )))) - identifier)) ;) })) (expression_statement "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;" (assignment_expression "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4" (pointer_expression "*param_3" * identifier) = (binary_expression "(*(int *)(param_1 + 0x180) - iVar6) - iVar4" (parenthesized_expression "(*(int *)(param_1 + 0x180) - iVar6)" ( (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" * (cast_expression "(int *)(param_1 + 0x180)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x180)" ( (binary_expression "param_1 + 0x180" identifier + number_literal) )))) - identifier) )) - identifier)) ;) (if_statement "if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" if (parenthesized_expression "((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0))" ( (binary_expression "(param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) && (parenthesized_expression "(plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" ( (comma_expression "plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" identifier = (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) , (comma_expression "param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "param_5 = param_2" identifier = identifier) , (binary_expression "*(long **)(param_1 + 0x198) != (long *)0x0" (pointer_expression "*(long **)(param_1 + 0x198)" * (cast_expression "(long **)(param_1 + 0x198)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) )))) != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)))) ))) )) (compound_statement "{\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" { (do_statement "do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);" do (compound_statement "{\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      }" { (expression_statement "plVar10 = plVar7;" (assignment_expression "plVar10 = plVar7" identifier = identifier) ;) (expression_statement "plVar7 = (long *)*plVar10;" (assignment_expression "plVar7 = (long *)*plVar10" identifier = (cast_expression "(long *)*plVar10" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar10" * identifier))) ;) }) while (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (expression_statement "*plVar10 = *(long *)(param_1 + 400);" (assignment_expression "*plVar10 = *(long *)(param_1 + 400)" (pointer_expression "*plVar10" * identifier) = (pointer_expression "*(long *)(param_1 + 400)" * (cast_expression "(long *)(param_1 + 400)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);" (assignment_expression "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198)" (pointer_expression "*(undefined8 *)(param_1 + 400)" * (cast_expression "(undefined8 *)(param_1 + 400)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 400)" ( (binary_expression "param_1 + 400" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_1 + 0x198)" * (cast_expression "(undefined8 *)(param_1 + 0x198)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 0x198) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x198) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x198)" * (cast_expression "(undefined8 *)(param_1 + 0x198)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x198)" ( (binary_expression "param_1 + 0x198" identifier + number_literal) )))) = number_literal) ;) })) (break_statement "break;" break ;)) (case_statement "case 1:" case number_literal :) (case_statement "case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" ( (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      local_4c = 0;\n    }" { (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" else (compound_statement "{\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" { (expression_statement "lVar2 = **(long **)(lVar11 + 8);" (assignment_expression "lVar2 = **(long **)(lVar11 + 8)" identifier = (pointer_expression "**(long **)(lVar11 + 8)" * (pointer_expression "*(long **)(lVar11 + 8)" * (cast_expression "(long **)(lVar11 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) )))))) ;) (expression_statement "uVar1 = *(ushort *)(lVar2 + 0xb0);" (assignment_expression "uVar1 = *(ushort *)(lVar2 + 0xb0)" identifier = (pointer_expression "*(ushort *)(lVar2 + 0xb0)" * (cast_expression "(ushort *)(lVar2 + 0xb0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xb0)" ( (binary_expression "lVar2 + 0xb0" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = *(int *)(lVar2 + 0xbc)" identifier = (pointer_expression "*(int *)(lVar2 + 0xbc)" * (cast_expression "(int *)(lVar2 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xbc)" ( (binary_expression "lVar2 + 0xbc" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));" (assignment_expression "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" identifier = (call_expression "(*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" (parenthesized_expression "(*DAT_0022f728)" ( (pointer_expression "*DAT_0022f728" * identifier) )) (argument_list "(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" ( (pointer_expression "*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" * (cast_expression "(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar2 + 0x118) + 0x40)" ( (binary_expression "*(long *)(lVar2 + 0x118) + 0x40" (pointer_expression "*(long *)(lVar2 + 0x118)" * (cast_expression "(long *)(lVar2 + 0x118)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x118)" ( (binary_expression "lVar2 + 0x118" identifier + number_literal) )))) + number_literal) )))) )))) ;) (expression_statement "iVar5 = FUN_0012a964(lVar2);" (assignment_expression "iVar5 = FUN_0012a964(lVar2)" identifier = (call_expression "FUN_0012a964(lVar2)" identifier (argument_list "(lVar2)" ( identifier )))) ;) (expression_statement "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" identifier = (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4" identifier + (binary_expression "((uint)uVar1 + iVar6 + 0x70) * iVar4" (parenthesized_expression "((uint)uVar1 + iVar6 + 0x70)" ( (binary_expression "(uint)uVar1 + iVar6 + 0x70" (binary_expression "(uint)uVar1 + iVar6" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) + identifier) + number_literal) )) * identifier)) + (pointer_expression "*(int *)(lVar2 + 0xbc)" * (cast_expression "(int *)(lVar2 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0xbc)" ( (binary_expression "lVar2 + 0xbc" identifier + number_literal) )))))) ;) (if_statement "if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" if (parenthesized_expression "(param_2 == 0xb)" ( (binary_expression "param_2 == 0xb" identifier == number_literal) )) (compound_statement "{\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" { (expression_statement "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);" (assignment_expression "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" identifier = (binary_expression "iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" identifier / (pointer_expression "*(int *)(*(long *)(lVar11 + 8) + 0x60)" * (cast_expression "(int *)(*(long *)(lVar11 + 8) + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar11 + 8) + 0x60)" ( (binary_expression "*(long *)(lVar11 + 8) + 0x60" (pointer_expression "*(long *)(lVar11 + 8)" * (cast_expression "(long *)(lVar11 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) )))) + number_literal) )))))) ;) })) (expression_statement "local_4c = local_4c + iVar6;" (assignment_expression "local_4c = local_4c + iVar6" identifier = (binary_expression "local_4c + iVar6" identifier + identifier)) ;) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) }))) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" * (cast_expression "(uint **)(param_1 + 0x2b8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = (pointer_expression "&local_44" & identifier)) ;) (if_statement "if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(0 < *(int *)(param_1 + 0x28))" ( (binary_expression "0 < *(int *)(param_1 + 0x28)" number_literal < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" { (expression_statement "iVar6 = (*DAT_0022f690)(0x20);" (assignment_expression "iVar6 = (*DAT_0022f690)(0x20)" identifier = (call_expression "(*DAT_0022f690)(0x20)" (parenthesized_expression "(*DAT_0022f690)" ( (pointer_expression "*DAT_0022f690" * identifier) )) (argument_list "(0x20)" ( number_literal )))) ;) (expression_statement "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;" (assignment_expression "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" identifier = (binary_expression "local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" identifier + (binary_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" (parenthesized_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54))" ( (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc)" (pointer_expression "*(int *)(lVar11 + 0x3c)" * (cast_expression "(int *)(lVar11 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x3c)" ( (binary_expression "lVar11 + 0x3c" identifier + number_literal) )))) + (pointer_expression "*(int *)(lVar11 + 0xc)" * (cast_expression "(int *)(lVar11 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xc)" ( (binary_expression "lVar11 + 0xc" identifier + number_literal) ))))) + (pointer_expression "*(int *)(lVar11 + 0x24)" * (cast_expression "(int *)(lVar11 + 0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x24)" ( (binary_expression "lVar11 + 0x24" identifier + number_literal) ))))) + (pointer_expression "*(int *)(lVar11 + 0x54)" * (cast_expression "(int *)(lVar11 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x54)" ( (binary_expression "lVar11 + 0x54" identifier + number_literal) ))))) )) * identifier))) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x18))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x18)" * (cast_expression "(undefined8 *)(lVar11 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x18)" ( (binary_expression "lVar11 + 0x18" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x48))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x48)" * (cast_expression "(undefined8 *)(lVar11 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x48)" ( (binary_expression "lVar11 + 0x48" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x30))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x30)" * (cast_expression "(undefined8 *)(lVar11 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x30)" ( (binary_expression "lVar11 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" identifier = (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" identifier (argument_list "(*(undefined8 *)(lVar11 + 0x60))" ( (pointer_expression "*(undefined8 *)(lVar11 + 0x60)" * (cast_expression "(undefined8 *)(lVar11 + 0x60)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0x60)" ( (binary_expression "lVar11 + 0x60" identifier + number_literal) )))) )))) ;) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" identifier = (binary_expression "local_44 + iVar6" identifier + identifier)) ;) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }" for ( (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x40)" identifier = (pointer_expression "*(undefined8 **)(lVar11 + 0x40)" * (cast_expression "(undefined8 **)(lVar11 + 0x40)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 0x40)" ( (binary_expression "lVar11 + 0x40" identifier + number_literal) ))))) ; (binary_expression "puVar3 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar3 = (undefined8 *)*puVar3" identifier = (cast_expression "(undefined8 *)*puVar3" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ) (compound_statement "{\n            FUN_001453db(param_1,puVar3[2]);\n          }" { (expression_statement "FUN_001453db(param_1,puVar3[2]);" (call_expression "FUN_001453db(param_1,puVar3[2])" identifier (argument_list "(param_1,puVar3[2])" ( identifier , (subscript_expression "puVar3[2]" identifier [ number_literal ]) ))) ;) })) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }" for ( (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x10)" identifier = (pointer_expression "*(undefined8 **)(lVar11 + 0x10)" * (cast_expression "(undefined8 **)(lVar11 + 0x10)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 0x10)" ( (binary_expression "lVar11 + 0x10" identifier + number_literal) ))))) ; (binary_expression "puVar3 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar3 = (undefined8 *)*puVar3" identifier = (cast_expression "(undefined8 *)*puVar3" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ) (compound_statement "{\n            FUN_0014471b(param_1,puVar3[2]);\n          }" { (expression_statement "FUN_0014471b(param_1,puVar3[2]);" (call_expression "FUN_0014471b(param_1,puVar3[2])" identifier (argument_list "(param_1,puVar3[2])" ( identifier , (subscript_expression "puVar3[2]" identifier [ number_literal ]) ))) ;) })) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) })) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" * (cast_expression "(undefined8 *)(param_1 + 0x2b8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" identifier = number_literal) ;) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" * (cast_expression "(uint **)(param_1 + 0x2b8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = (pointer_expression "&local_44" & identifier)) ;) (for_statement "for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" for ( (assignment_expression "lVar8 = *(long *)(param_1 + 8)" identifier = (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ; (binary_expression "lVar8 != 0" identifier != number_literal) ; (assignment_expression "lVar8 = *(long *)(lVar8 + 0x10)" identifier = (pointer_expression "*(long *)(lVar8 + 0x10)" * (cast_expression "(long *)(lVar8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x10)" ( (binary_expression "lVar8 + 0x10" identifier + number_literal) ))))) ) (compound_statement "{\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" { (expression_statement "FUN_00143e41(param_1,lVar8);" (call_expression "FUN_00143e41(param_1,lVar8)" identifier (argument_list "(param_1,lVar8)" ( identifier , identifier ))) ;) (expression_statement "FUN_00141394(param_1,lVar8);" (call_expression "FUN_00141394(param_1,lVar8)" identifier (argument_list "(param_1,lVar8)" ( identifier , identifier ))) ;) })) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" * (cast_expression "(undefined8 *)(param_1 + 0x2b8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b8)" ( (binary_expression "param_1 + 0x2b8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 4:" case number_literal :) (case_statement "case 5:" case number_literal :) (case_statement "case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;" case number_literal : (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" * identifier) = number_literal) ;) (expression_statement "lVar8 = param_1 + (long)param_2 * 4;" (assignment_expression "lVar8 = param_1 + (long)param_2 * 4" identifier = (binary_expression "param_1 + (long)param_2 * 4" identifier + (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal))) ;) (expression_statement "*param_4 = *(int *)(lVar8 + 0x174);" (assignment_expression "*param_4 = *(int *)(lVar8 + 0x174)" (pointer_expression "*param_4" * identifier) = (pointer_expression "*(int *)(lVar8 + 0x174)" * (cast_expression "(int *)(lVar8 + 0x174)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x174)" ( (binary_expression "lVar8 + 0x174" identifier + number_literal) ))))) ;) (if_statement "if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" if (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" { (expression_statement "*(undefined4 *)(lVar8 + 0x174) = 0;" (assignment_expression "*(undefined4 *)(lVar8 + 0x174) = 0" (pointer_expression "*(undefined4 *)(lVar8 + 0x174)" * (cast_expression "(undefined4 *)(lVar8 + 0x174)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x174)" ( (binary_expression "lVar8 + 0x174" identifier + number_literal) )))) = number_literal) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) })) (break_statement "break;" break ;)) (case_statement "case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" case number_literal : (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "uVar9 = 1;" (assignment_expression "uVar9 = 1" identifier = number_literal) ;) (if_statement "if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x2b0) < 1)" ( (binary_expression "*(long *)(param_1 + 0x2b0) < 1" (pointer_expression "*(long *)(param_1 + 0x2b0)" * (cast_expression "(long *)(param_1 + 0x2b0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2b0)" ( (binary_expression "param_1 + 0x2b0" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" { (expression_statement "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));" (assignment_expression "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8))" identifier = (call_expression "(uint)(0 < *(long *)(param_1 + 0x2a8))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0 < *(long *)(param_1 + 0x2a8))" ( (binary_expression "0 < *(long *)(param_1 + 0x2a8)" number_literal < (pointer_expression "*(long *)(param_1 + 0x2a8)" * (cast_expression "(long *)(param_1 + 0x2a8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2a8)" ( (binary_expression "param_1 + 0x2a8" identifier + number_literal) ))))) )))) ;) })) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 0xc:\n    param_2 = 10;" case number_literal : (expression_statement "param_2 = 10;" (assignment_expression "param_2 = 10" identifier = number_literal) ;)) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" case number_literal : (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" ( (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n      uVar9 = 0;\n    }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" else (compound_statement "{\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" { (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" do (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" { (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" identifier = (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" * (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" ( (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" identifier * number_literal) + (pointer_expression "*(long *)(param_1 + 0x20)" * (cast_expression "(long *)(param_1 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" if (parenthesized_expression "(lVar11 != 0)" ( (binary_expression "lVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" { (expression_statement "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);" (assignment_expression "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8)" identifier = (binary_expression "(long)param_2 * 4 + **(long **)(lVar11 + 8)" (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (pointer_expression "**(long **)(lVar11 + 8)" * (pointer_expression "*(long **)(lVar11 + 8)" * (cast_expression "(long **)(lVar11 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar11 + 8)" ( (binary_expression "lVar11 + 8" identifier + number_literal) ))))))) ;) (expression_statement "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);" (assignment_expression "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4)" identifier = (binary_expression "uVar9 + *(int *)(lVar11 + 0xd4)" identifier + (pointer_expression "*(int *)(lVar11 + 0xd4)" * (cast_expression "(int *)(lVar11 + 0xd4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xd4)" ( (binary_expression "lVar11 + 0xd4" identifier + number_literal) )))))) ;) (if_statement "if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" if (parenthesized_expression "(param_5 != 0)" ( (binary_expression "param_5 != 0" identifier != number_literal) )) (compound_statement "{\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" { (expression_statement "*(undefined4 *)(lVar11 + 0xd4) = 0;" (assignment_expression "*(undefined4 *)(lVar11 + 0xd4) = 0" (pointer_expression "*(undefined4 *)(lVar11 + 0xd4)" * (cast_expression "(undefined4 *)(lVar11 + 0xd4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar11 + 0xd4)" ( (binary_expression "lVar11 + 0xd4" identifier + number_literal) )))) = number_literal) ;) })) })) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" identifier = (binary_expression "lVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" ( (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" ( (type_descriptor "int" primitive_type) ) identifier) < (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) )) ;) }))) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "default:\n    param_5 = 1;" default : (expression_statement "param_5 = 1;" (assignment_expression "param_5 = 1" identifier = number_literal) ;)) })) (expression_statement "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18))" identifier (argument_list "(*(undefined8 *)(param_1 + 0x18))" ( (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) ))) ;) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" identifier != (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return param_5;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (switch_statement switch (parenthesized_expression ( IDENT )) (compound_statement { (case_statement case LIT : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) }))) (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) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) )) - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)))) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (break_statement break ;)) (case_statement case LIT :) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) + LIT) )) * 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 == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT / (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression & IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression 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) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) * IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) })) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression & IDENT)) ;) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT))) ;) (expression_statement (assignment_expression (pointer_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 != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = LIT) ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) + (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))))) ;) (expression_statement (assignment_expression IDENT = (binary_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 != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement default : (expression_statement (assignment_expression IDENT = LIT) ;)) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (return_statement return IDENT ;) })))
(function_definition "int FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)\n\n{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return param_5;\n}" (primitive_type "int") (function_declarator "FUN_00145437(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" (identifier "FUN_00145437") (parameter_list "(long param_1,int param_2,uint *param_3,int *param_4,int param_5)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  ushort uVar1;\n  long lVar2;\n  undefined8 *puVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  uint uVar9;\n  long *plVar10;\n  long lVar11;\n  long in_FS_OFFSET;\n  uint local_4c;\n  uint local_44;\n  long local_40;\n  \n  local_40 = *(long *)(in_FS_OFFSET + 0x28);\n  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));\n  switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }\n  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));\n  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }\n  return param_5;\n}" ({ "{") (declaration "ushort uVar1;" (type_identifier "ushort") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "long *plVar10;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar10" (* "*") (identifier "plVar10")) (; ";")) (declaration "long lVar11;" (sized_type_specifier "long" (long "long")) (identifier "lVar11") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "uint local_4c;" (type_identifier "uint") (identifier "local_4c") (; ";")) (declaration "uint local_44;" (type_identifier "uint") (identifier "local_44") (; ";")) (declaration "long local_40;" (sized_type_specifier "long" (long "long")) (identifier "local_40") (; ";")) (expression_statement "local_40 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_40 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18))" (identifier "FUN_0012a8c7") (argument_list "(*(undefined8 *)(param_1 + 0x18))" (( "(") (pointer_expression "*(undefined8 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) () ")"))) (; ";")) (switch_statement "switch(param_2) {\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" (switch "switch") (parenthesized_expression "(param_2)" (( "(") (identifier "param_2") () ")")) (compound_statement "{\n  case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;\n  case 1:\n  case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;\n  case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;\n  case 4:\n  case 5:\n  case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;\n  case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  case 0xc:\n    param_2 = 10;\n  case 7:\n  case 8:\n  case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;\n  default:\n    param_5 = 1;\n  }" ({ "{") (case_statement "case 0:\n    plVar7 = *(long **)(param_1 + 400);\n    if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    plVar7 = *(long **)(param_1 + 0x198);\n    if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }\n    if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }\n    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;\n    if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }\n    break;" (case "case") (number_literal "0") (: ":") (expression_statement "plVar7 = *(long **)(param_1 + 400);" (assignment_expression "plVar7 = *(long **)(param_1 + 400)" (identifier "plVar7") (= "=") (pointer_expression "*(long **)(param_1 + 400)" (* "*") (cast_expression "(long **)(param_1 + 400)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 400)" (( "(") (binary_expression "param_1 + 400" (identifier "param_1") (+ "+") (number_literal "400")) () ")"))))) (; ";")) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar6 = 0;\n    }\n    else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar6 = 0;\n    }" ({ "{") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" (else "else") (compound_statement "{\n      iVar6 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" ({ "{") (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      } while (plVar7 != (long *)0x0);" (do "do") (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar6 = iVar6 + 1;\n      }" ({ "{") (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" (identifier "plVar7") (= "=") (cast_expression "(long *)*plVar7" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar7" (* "*") (identifier "plVar7")))) (; ";")) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar7 != (long *)0x0)" (( "(") (binary_expression "plVar7 != (long *)0x0" (identifier "plVar7") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}")))) (expression_statement "plVar7 = *(long **)(param_1 + 0x198);" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" (identifier "plVar7") (= "=") (pointer_expression "*(long **)(param_1 + 0x198)" (* "*") (cast_expression "(long **)(param_1 + 0x198)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x198)" (( "(") (binary_expression "param_1 + 0x198" (identifier "param_1") (+ "+") (number_literal "0x198")) () ")"))))) (; ";")) (if_statement "if (plVar7 == (long *)0x0) {\n      iVar4 = 0;\n    }\n    else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar4 = 0;\n    }" ({ "{") (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" (else "else") (compound_statement "{\n      iVar4 = 0;\n      do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);\n    }" ({ "{") (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      } while (plVar7 != (long *)0x0);" (do "do") (compound_statement "{\n        plVar7 = (long *)*plVar7;\n        iVar4 = iVar4 + 1;\n      }" ({ "{") (expression_statement "plVar7 = (long *)*plVar7;" (assignment_expression "plVar7 = (long *)*plVar7" (identifier "plVar7") (= "=") (cast_expression "(long *)*plVar7" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar7" (* "*") (identifier "plVar7")))) (; ";")) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + 1" (identifier "iVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar7 != (long *)0x0)" (( "(") (binary_expression "plVar7 != (long *)0x0" (identifier "plVar7") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}")))) (if_statement "if (param_4 != (int *)0x0) {\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" (if "if") (parenthesized_expression "(param_4 != (int *)0x0)" (( "(") (binary_expression "param_4 != (int *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *param_4 = *(int *)(param_1 + 0x180) - iVar6;\n    }" ({ "{") (expression_statement "*param_4 = *(int *)(param_1 + 0x180) - iVar6;" (assignment_expression "*param_4 = *(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" (* "*") (cast_expression "(int *)(param_1 + 0x180)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x180)" (( "(") (binary_expression "param_1 + 0x180" (identifier "param_1") (+ "+") (number_literal "0x180")) () ")")))) (- "-") (identifier "iVar6"))) (; ";")) (} "}"))) (expression_statement "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;" (assignment_expression "*param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (binary_expression "(*(int *)(param_1 + 0x180) - iVar6) - iVar4" (parenthesized_expression "(*(int *)(param_1 + 0x180) - iVar6)" (( "(") (binary_expression "*(int *)(param_1 + 0x180) - iVar6" (pointer_expression "*(int *)(param_1 + 0x180)" (* "*") (cast_expression "(int *)(param_1 + 0x180)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x180)" (( "(") (binary_expression "param_1 + 0x180" (identifier "param_1") (+ "+") (number_literal "0x180")) () ")")))) (- "-") (identifier "iVar6")) () ")")) (- "-") (identifier "iVar4"))) (; ";")) (if_statement "if ((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)) {\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" (if "if") (parenthesized_expression "((param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0))" (( "(") (binary_expression "(param_5 != 0) &&\n       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0)" (( "(") (comma_expression "plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "plVar7 = *(long **)(param_1 + 0x198)" (identifier "plVar7") (= "=") (pointer_expression "*(long **)(param_1 + 0x198)" (* "*") (cast_expression "(long **)(param_1 + 0x198)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x198)" (( "(") (binary_expression "param_1 + 0x198" (identifier "param_1") (+ "+") (number_literal "0x198")) () ")"))))) (, ",") (comma_expression "param_5 = param_2,\n       *(long **)(param_1 + 0x198) != (long *)0x0" (assignment_expression "param_5 = param_2" (identifier "param_5") (= "=") (identifier "param_2")) (, ",") (binary_expression "*(long **)(param_1 + 0x198) != (long *)0x0" (pointer_expression "*(long **)(param_1 + 0x198)" (* "*") (cast_expression "(long **)(param_1 + 0x198)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x198)" (( "(") (binary_expression "param_1 + 0x198" (identifier "param_1") (+ "+") (number_literal "0x198")) () ")")))) (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))))) () ")"))) () ")")) (compound_statement "{\n      do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);\n      *plVar10 = *(long *)(param_1 + 400);\n      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);\n      *(undefined8 *)(param_1 + 0x198) = 0;\n    }" ({ "{") (do_statement "do {\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      } while (plVar7 != (long *)0x0);" (do "do") (compound_statement "{\n        plVar10 = plVar7;\n        plVar7 = (long *)*plVar10;\n      }" ({ "{") (expression_statement "plVar10 = plVar7;" (assignment_expression "plVar10 = plVar7" (identifier "plVar10") (= "=") (identifier "plVar7")) (; ";")) (expression_statement "plVar7 = (long *)*plVar10;" (assignment_expression "plVar7 = (long *)*plVar10" (identifier "plVar7") (= "=") (cast_expression "(long *)*plVar10" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar10" (* "*") (identifier "plVar10")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar7 != (long *)0x0)" (( "(") (binary_expression "plVar7 != (long *)0x0" (identifier "plVar7") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (expression_statement "*plVar10 = *(long *)(param_1 + 400);" (assignment_expression "*plVar10 = *(long *)(param_1 + 400)" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (= "=") (pointer_expression "*(long *)(param_1 + 400)" (* "*") (cast_expression "(long *)(param_1 + 400)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 400)" (( "(") (binary_expression "param_1 + 400" (identifier "param_1") (+ "+") (number_literal "400")) () ")"))))) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);" (assignment_expression "*(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198)" (pointer_expression "*(undefined8 *)(param_1 + 400)" (* "*") (cast_expression "(undefined8 *)(param_1 + 400)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 400)" (( "(") (binary_expression "param_1 + 400" (identifier "param_1") (+ "+") (number_literal "400")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(param_1 + 0x198)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x198)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x198)" (( "(") (binary_expression "param_1 + 0x198" (identifier "param_1") (+ "+") (number_literal "0x198")) () ")"))))) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0x198) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x198) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x198)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x198)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x198)" (( "(") (binary_expression "param_1 + 0x198" (identifier "param_1") (+ "+") (number_literal "0x198")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 1:" (case "case") (number_literal "1") (: ":")) (case_statement "case 0xb:\n    FUN_0013f226(param_1);\n    if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    FUN_0012cc4a(param_1);\n    *param_3 = local_4c;\n    *param_4 = 0;\n    param_5 = 0;\n    break;" (case "case") (number_literal "0xb") (: ":") (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" (identifier "FUN_0013f226") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      local_4c = 0;\n    }\n    else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" (( "(") (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      local_4c = 0;\n    }" ({ "{") (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" (identifier "local_4c") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" (else "else") (compound_statement "{\n      lVar8 = 0;\n      local_4c = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" ({ "{") (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" (identifier "lVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" (identifier "local_4c") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" (do "do") (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }\n        lVar8 = lVar8 + 1;\n      }" ({ "{") (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (identifier "lVar11") (= "=") (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (* "*") (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (( "(") (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" (identifier "lVar8") (* "*") (number_literal "0x20")) (+ "+") (pointer_expression "*(long *)(param_1 + 0x20)" (* "*") (cast_expression "(long *)(param_1 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (lVar11 != 0) {\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" (if "if") (parenthesized_expression "(lVar11 != 0)" (( "(") (binary_expression "lVar11 != 0" (identifier "lVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          lVar2 = **(long **)(lVar11 + 8);\n          uVar1 = *(ushort *)(lVar2 + 0xb0);\n          iVar6 = *(int *)(lVar2 + 0xbc);\n          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));\n          iVar5 = FUN_0012a964(lVar2);\n          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);\n          if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }\n          local_4c = local_4c + iVar6;\n        }" ({ "{") (expression_statement "lVar2 = **(long **)(lVar11 + 8);" (assignment_expression "lVar2 = **(long **)(lVar11 + 8)" (identifier "lVar2") (= "=") (pointer_expression "**(long **)(lVar11 + 8)" (* "*") (pointer_expression "*(long **)(lVar11 + 8)" (* "*") (cast_expression "(long **)(lVar11 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar11 + 8)" (( "(") (binary_expression "lVar11 + 8" (identifier "lVar11") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (expression_statement "uVar1 = *(ushort *)(lVar2 + 0xb0);" (assignment_expression "uVar1 = *(ushort *)(lVar2 + 0xb0)" (identifier "uVar1") (= "=") (pointer_expression "*(ushort *)(lVar2 + 0xb0)" (* "*") (cast_expression "(ushort *)(lVar2 + 0xb0)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0xb0)" (( "(") (binary_expression "lVar2 + 0xb0" (identifier "lVar2") (+ "+") (number_literal "0xb0")) () ")"))))) (; ";")) (expression_statement "iVar6 = *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = *(int *)(lVar2 + 0xbc)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(lVar2 + 0xbc)" (* "*") (cast_expression "(int *)(lVar2 + 0xbc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0xbc)" (( "(") (binary_expression "lVar2 + 0xbc" (identifier "lVar2") (+ "+") (number_literal "0xbc")) () ")"))))) (; ";")) (expression_statement "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));" (assignment_expression "iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" (identifier "iVar4") (= "=") (call_expression "(*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" (parenthesized_expression "(*DAT_0022f728)" (( "(") (pointer_expression "*DAT_0022f728" (* "*") (identifier "DAT_0022f728")) () ")")) (argument_list "(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40))" (( "(") (pointer_expression "*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" (* "*") (cast_expression "(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar2 + 0x118) + 0x40)" (( "(") (binary_expression "*(long *)(lVar2 + 0x118) + 0x40" (pointer_expression "*(long *)(lVar2 + 0x118)" (* "*") (cast_expression "(long *)(lVar2 + 0x118)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x118)" (( "(") (binary_expression "lVar2 + 0x118" (identifier "lVar2") (+ "+") (number_literal "0x118")) () ")")))) (+ "+") (number_literal "0x40")) () ")")))) () ")")))) (; ";")) (expression_statement "iVar5 = FUN_0012a964(lVar2);" (assignment_expression "iVar5 = FUN_0012a964(lVar2)" (identifier "iVar5") (= "=") (call_expression "FUN_0012a964(lVar2)" (identifier "FUN_0012a964") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")")))) (; ";")) (expression_statement "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);" (assignment_expression "iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" (identifier "iVar6") (= "=") (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc)" (binary_expression "iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4" (identifier "iVar5") (+ "+") (binary_expression "((uint)uVar1 + iVar6 + 0x70) * iVar4" (parenthesized_expression "((uint)uVar1 + iVar6 + 0x70)" (( "(") (binary_expression "(uint)uVar1 + iVar6 + 0x70" (binary_expression "(uint)uVar1 + iVar6" (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1")) (+ "+") (identifier "iVar6")) (+ "+") (number_literal "0x70")) () ")")) (* "*") (identifier "iVar4"))) (+ "+") (pointer_expression "*(int *)(lVar2 + 0xbc)" (* "*") (cast_expression "(int *)(lVar2 + 0xbc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0xbc)" (( "(") (binary_expression "lVar2 + 0xbc" (identifier "lVar2") (+ "+") (number_literal "0xbc")) () ")")))))) (; ";")) (if_statement "if (param_2 == 0xb) {\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" (if "if") (parenthesized_expression "(param_2 == 0xb)" (( "(") (binary_expression "param_2 == 0xb" (identifier "param_2") (== "==") (number_literal "0xb")) () ")")) (compound_statement "{\n            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);\n          }" ({ "{") (expression_statement "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);" (assignment_expression "iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" (identifier "iVar6") (= "=") (binary_expression "iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60)" (identifier "iVar6") (/ "/") (pointer_expression "*(int *)(*(long *)(lVar11 + 8) + 0x60)" (* "*") (cast_expression "(int *)(*(long *)(lVar11 + 8) + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar11 + 8) + 0x60)" (( "(") (binary_expression "*(long *)(lVar11 + 8) + 0x60" (pointer_expression "*(long *)(lVar11 + 8)" (* "*") (cast_expression "(long *)(lVar11 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 8)" (( "(") (binary_expression "lVar11 + 8" (identifier "lVar11") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x60")) () ")")))))) (; ";")) (} "}"))) (expression_statement "local_4c = local_4c + iVar6;" (assignment_expression "local_4c = local_4c + iVar6" (identifier "local_4c") (= "=") (binary_expression "local_4c + iVar6" (identifier "local_4c") (+ "+") (identifier "iVar6"))) (; ";")) (} "}"))) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + 1" (identifier "lVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" (( "(") (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar8")) (< "<") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (; ";")) (} "}")))) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" (identifier "FUN_0012cc4a") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "*param_3 = local_4c;" (assignment_expression "*param_3 = local_4c" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_4c")) (; ";")) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 2:\n    local_44 = 0;\n    FUN_0013f226(param_1);\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    FUN_0012cc4a(param_1);\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" (case "case") (number_literal "2") (: ":") (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" (identifier "local_44") (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_0013f226(param_1);" (call_expression "FUN_0013f226(param_1)" (identifier "FUN_0013f226") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" (* "*") (cast_expression "(uint **)(param_1 + 0x2b8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x2b8)" (( "(") (binary_expression "param_1 + 0x2b8" (identifier "param_1") (+ "+") (number_literal "0x2b8")) () ")")))) (= "=") (pointer_expression "&local_44" (& "&") (identifier "local_44"))) (; ";")) (if_statement "if (0 < *(int *)(param_1 + 0x28)) {\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" (if "if") (parenthesized_expression "(0 < *(int *)(param_1 + 0x28))" (( "(") (binary_expression "0 < *(int *)(param_1 + 0x28)" (number_literal "0") (< "<") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n      lVar8 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" ({ "{") (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" (identifier "lVar8") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" (do "do") (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);\n        if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" ({ "{") (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" (identifier "lVar11") (= "=") (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" (* "*") (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18)" (( "(") (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" (identifier "lVar8") (* "*") (number_literal "0x20")) (+ "+") (pointer_expression "*(long *)(param_1 + 0x20)" (* "*") (cast_expression "(long *)(param_1 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (lVar11 != 0) {\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" (if "if") (parenthesized_expression "(lVar11 != 0)" (( "(") (binary_expression "lVar11 != 0" (identifier "lVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          iVar6 = (*DAT_0022f690)(0x20);\n          local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));\n          local_44 = local_44 + iVar6;\n          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));\n          local_44 = local_44 + iVar6;\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }\n          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }\n        }" ({ "{") (expression_statement "iVar6 = (*DAT_0022f690)(0x20);" (assignment_expression "iVar6 = (*DAT_0022f690)(0x20)" (identifier "iVar6") (= "=") (call_expression "(*DAT_0022f690)(0x20)" (parenthesized_expression "(*DAT_0022f690)" (( "(") (pointer_expression "*DAT_0022f690" (* "*") (identifier "DAT_0022f690")) () ")")) (argument_list "(0x20)" (( "(") (number_literal "0x20") () ")")))) (; ";")) (expression_statement "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6;" (assignment_expression "local_44 = local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" (identifier "local_44") (= "=") (binary_expression "local_44 +\n                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" (identifier "local_44") (+ "+") (binary_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)) * iVar6" (parenthesized_expression "(*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54))" (( "(") (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +\n                     *(int *)(lVar11 + 0x54)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24)" (binary_expression "*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc)" (pointer_expression "*(int *)(lVar11 + 0x3c)" (* "*") (cast_expression "(int *)(lVar11 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x3c)" (( "(") (binary_expression "lVar11 + 0x3c" (identifier "lVar11") (+ "+") (number_literal "0x3c")) () ")")))) (+ "+") (pointer_expression "*(int *)(lVar11 + 0xc)" (* "*") (cast_expression "(int *)(lVar11 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0xc)" (( "(") (binary_expression "lVar11 + 0xc" (identifier "lVar11") (+ "+") (number_literal "0xc")) () ")"))))) (+ "+") (pointer_expression "*(int *)(lVar11 + 0x24)" (* "*") (cast_expression "(int *)(lVar11 + 0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x24)" (( "(") (binary_expression "lVar11 + 0x24" (identifier "lVar11") (+ "+") (number_literal "0x24")) () ")"))))) (+ "+") (pointer_expression "*(int *)(lVar11 + 0x54)" (* "*") (cast_expression "(int *)(lVar11 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x54)" (( "(") (binary_expression "lVar11 + 0x54" (identifier "lVar11") (+ "+") (number_literal "0x54")) () ")"))))) () ")")) (* "*") (identifier "iVar6")))) (; ";")) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" (identifier "iVar6") (= "=") (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18))" (identifier "FUN_0012aa60") (argument_list "(*(undefined8 *)(lVar11 + 0x18))" (( "(") (pointer_expression "*(undefined8 *)(lVar11 + 0x18)" (* "*") (cast_expression "(undefined8 *)(lVar11 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x18)" (( "(") (binary_expression "lVar11 + 0x18" (identifier "lVar11") (+ "+") (number_literal "0x18")) () ")")))) () ")")))) (; ";")) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" (identifier "local_44") (= "=") (binary_expression "local_44 + iVar6" (identifier "local_44") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" (identifier "iVar6") (= "=") (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48))" (identifier "FUN_0012aa60") (argument_list "(*(undefined8 *)(lVar11 + 0x48))" (( "(") (pointer_expression "*(undefined8 *)(lVar11 + 0x48)" (* "*") (cast_expression "(undefined8 *)(lVar11 + 0x48)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x48)" (( "(") (binary_expression "lVar11 + 0x48" (identifier "lVar11") (+ "+") (number_literal "0x48")) () ")")))) () ")")))) (; ";")) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" (identifier "local_44") (= "=") (binary_expression "local_44 + iVar6" (identifier "local_44") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" (identifier "iVar6") (= "=") (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30))" (identifier "FUN_0012aa60") (argument_list "(*(undefined8 *)(lVar11 + 0x30))" (( "(") (pointer_expression "*(undefined8 *)(lVar11 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar11 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x30)" (( "(") (binary_expression "lVar11 + 0x30" (identifier "lVar11") (+ "+") (number_literal "0x30")) () ")")))) () ")")))) (; ";")) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" (identifier "local_44") (= "=") (binary_expression "local_44 + iVar6" (identifier "local_44") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));" (assignment_expression "iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" (identifier "iVar6") (= "=") (call_expression "FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60))" (identifier "FUN_0012aa60") (argument_list "(*(undefined8 *)(lVar11 + 0x60))" (( "(") (pointer_expression "*(undefined8 *)(lVar11 + 0x60)" (* "*") (cast_expression "(undefined8 *)(lVar11 + 0x60)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0x60)" (( "(") (binary_expression "lVar11 + 0x60" (identifier "lVar11") (+ "+") (number_literal "0x60")) () ")")))) () ")")))) (; ";")) (expression_statement "local_44 = local_44 + iVar6;" (assignment_expression "local_44 = local_44 + iVar6" (identifier "local_44") (= "=") (binary_expression "local_44 + iVar6" (identifier "local_44") (+ "+") (identifier "iVar6"))) (; ";")) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_001453db(param_1,puVar3[2]);\n          }" (for "for") (( "(") (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x40)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined8 **)(lVar11 + 0x40)" (* "*") (cast_expression "(undefined8 **)(lVar11 + 0x40)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar11 + 0x40)" (( "(") (binary_expression "lVar11 + 0x40" (identifier "lVar11") (+ "+") (number_literal "0x40")) () ")"))))) (; ";") (binary_expression "puVar3 != (undefined8 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar3 = (undefined8 *)*puVar3" (identifier "puVar3") (= "=") (cast_expression "(undefined8 *)*puVar3" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) () ")") (compound_statement "{\n            FUN_001453db(param_1,puVar3[2]);\n          }" ({ "{") (expression_statement "FUN_001453db(param_1,puVar3[2]);" (call_expression "FUN_001453db(param_1,puVar3[2])" (identifier "FUN_001453db") (argument_list "(param_1,puVar3[2])" (( "(") (identifier "param_1") (, ",") (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (} "}"))) (for_statement "for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;\n              puVar3 = (undefined8 *)*puVar3) {\n            FUN_0014471b(param_1,puVar3[2]);\n          }" (for "for") (( "(") (assignment_expression "puVar3 = *(undefined8 **)(lVar11 + 0x10)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined8 **)(lVar11 + 0x10)" (* "*") (cast_expression "(undefined8 **)(lVar11 + 0x10)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar11 + 0x10)" (( "(") (binary_expression "lVar11 + 0x10" (identifier "lVar11") (+ "+") (number_literal "0x10")) () ")"))))) (; ";") (binary_expression "puVar3 != (undefined8 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar3 = (undefined8 *)*puVar3" (identifier "puVar3") (= "=") (cast_expression "(undefined8 *)*puVar3" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) () ")") (compound_statement "{\n            FUN_0014471b(param_1,puVar3[2]);\n          }" ({ "{") (expression_statement "FUN_0014471b(param_1,puVar3[2]);" (call_expression "FUN_0014471b(param_1,puVar3[2])" (identifier "FUN_0014471b") (argument_list "(param_1,puVar3[2])" (( "(") (identifier "param_1") (, ",") (subscript_expression "puVar3[2]" (identifier "puVar3") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + 1" (identifier "lVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" (( "(") (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar8")) (< "<") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x2b8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2b8)" (( "(") (binary_expression "param_1 + 0x2b8" (identifier "param_1") (+ "+") (number_literal "0x2b8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_0012cc4a(param_1);" (call_expression "FUN_0012cc4a(param_1)" (identifier "FUN_0012cc4a") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_44")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 3:\n    local_44 = 0;\n    *(uint **)(param_1 + 0x2b8) = &local_44;\n    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }\n    *(undefined8 *)(param_1 + 0x2b8) = 0;\n    *param_4 = 0;\n    *param_3 = local_44;\n    param_5 = 0;\n    break;" (case "case") (number_literal "3") (: ":") (expression_statement "local_44 = 0;" (assignment_expression "local_44 = 0" (identifier "local_44") (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint **)(param_1 + 0x2b8) = &local_44;" (assignment_expression "*(uint **)(param_1 + 0x2b8) = &local_44" (pointer_expression "*(uint **)(param_1 + 0x2b8)" (* "*") (cast_expression "(uint **)(param_1 + 0x2b8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x2b8)" (( "(") (binary_expression "param_1 + 0x2b8" (identifier "param_1") (+ "+") (number_literal "0x2b8")) () ")")))) (= "=") (pointer_expression "&local_44" (& "&") (identifier "local_44"))) (; ";")) (for_statement "for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" (for "for") (( "(") (assignment_expression "lVar8 = *(long *)(param_1 + 8)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(param_1 + 8)" (* "*") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";") (binary_expression "lVar8 != 0" (identifier "lVar8") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "lVar8 = *(long *)(lVar8 + 0x10)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(lVar8 + 0x10)" (* "*") (cast_expression "(long *)(lVar8 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x10)" (( "(") (binary_expression "lVar8 + 0x10" (identifier "lVar8") (+ "+") (number_literal "0x10")) () ")"))))) () ")") (compound_statement "{\n      FUN_00143e41(param_1,lVar8);\n      FUN_00141394(param_1,lVar8);\n    }" ({ "{") (expression_statement "FUN_00143e41(param_1,lVar8);" (call_expression "FUN_00143e41(param_1,lVar8)" (identifier "FUN_00143e41") (argument_list "(param_1,lVar8)" (( "(") (identifier "param_1") (, ",") (identifier "lVar8") () ")"))) (; ";")) (expression_statement "FUN_00141394(param_1,lVar8);" (call_expression "FUN_00141394(param_1,lVar8)" (identifier "FUN_00141394") (argument_list "(param_1,lVar8)" (( "(") (identifier "param_1") (, ",") (identifier "lVar8") () ")"))) (; ";")) (} "}"))) (expression_statement "*(undefined8 *)(param_1 + 0x2b8) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 0x2b8) = 0" (pointer_expression "*(undefined8 *)(param_1 + 0x2b8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x2b8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2b8)" (( "(") (binary_expression "param_1 + 0x2b8" (identifier "param_1") (+ "+") (number_literal "0x2b8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_3 = local_44;" (assignment_expression "*param_3 = local_44" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "local_44")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:" (case "case") (number_literal "4") (: ":")) (case_statement "case 5:" (case "case") (number_literal "5") (: ":")) (case_statement "case 6:\n    *param_3 = 0;\n    lVar8 = param_1 + (long)param_2 * 4;\n    *param_4 = *(int *)(lVar8 + 0x174);\n    if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }\n    break;" (case "case") (number_literal "6") (: ":") (expression_statement "*param_3 = 0;" (assignment_expression "*param_3 = 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar8 = param_1 + (long)param_2 * 4;" (assignment_expression "lVar8 = param_1 + (long)param_2 * 4" (identifier "lVar8") (= "=") (binary_expression "param_1 + (long)param_2 * 4" (identifier "param_1") (+ "+") (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (* "*") (number_literal "4")))) (; ";")) (expression_statement "*param_4 = *(int *)(lVar8 + 0x174);" (assignment_expression "*param_4 = *(int *)(lVar8 + 0x174)" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (pointer_expression "*(int *)(lVar8 + 0x174)" (* "*") (cast_expression "(int *)(lVar8 + 0x174)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x174)" (( "(") (binary_expression "lVar8 + 0x174" (identifier "lVar8") (+ "+") (number_literal "0x174")) () ")"))))) (; ";")) (if_statement "if (param_5 != 0) {\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" (if "if") (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined4 *)(lVar8 + 0x174) = 0;\n      param_5 = 0;\n    }" ({ "{") (expression_statement "*(undefined4 *)(lVar8 + 0x174) = 0;" (assignment_expression "*(undefined4 *)(lVar8 + 0x174) = 0" (pointer_expression "*(undefined4 *)(lVar8 + 0x174)" (* "*") (cast_expression "(undefined4 *)(lVar8 + 0x174)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x174)" (( "(") (binary_expression "lVar8 + 0x174" (identifier "lVar8") (+ "+") (number_literal "0x174")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 10:\n    *param_4 = 0;\n    uVar9 = 1;\n    if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" (case "case") (number_literal "10") (: ":") (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar9 = 1;" (assignment_expression "uVar9 = 1" (identifier "uVar9") (= "=") (number_literal "1")) (; ";")) (if_statement "if (*(long *)(param_1 + 0x2b0) < 1) {\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x2b0) < 1)" (( "(") (binary_expression "*(long *)(param_1 + 0x2b0) < 1" (pointer_expression "*(long *)(param_1 + 0x2b0)" (* "*") (cast_expression "(long *)(param_1 + 0x2b0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2b0)" (( "(") (binary_expression "param_1 + 0x2b0" (identifier "param_1") (+ "+") (number_literal "0x2b0")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));\n    }" ({ "{") (expression_statement "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));" (assignment_expression "uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8))" (identifier "uVar9") (= "=") (call_expression "(uint)(0 < *(long *)(param_1 + 0x2a8))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0 < *(long *)(param_1 + 0x2a8))" (( "(") (binary_expression "0 < *(long *)(param_1 + 0x2a8)" (number_literal "0") (< "<") (pointer_expression "*(long *)(param_1 + 0x2a8)" (* "*") (cast_expression "(long *)(param_1 + 0x2a8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2a8)" (( "(") (binary_expression "param_1 + 0x2a8" (identifier "param_1") (+ "+") (number_literal "0x2a8")) () ")"))))) () ")")))) (; ";")) (} "}"))) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 0xc:\n    param_2 = 10;" (case "case") (number_literal "0xc") (: ":") (expression_statement "param_2 = 10;" (assignment_expression "param_2 = 10" (identifier "param_2") (= "=") (number_literal "10")) (; ";"))) (case_statement "case 7:" (case "case") (number_literal "7") (: ":")) (case_statement "case 8:" (case "case") (number_literal "8") (: ":")) (case_statement "case 9:\n    if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }\n    *param_4 = 0;\n    *param_3 = uVar9;\n    param_5 = 0;\n    break;" (case "case") (number_literal "9") (: ":") (if_statement "if (*(int *)(param_1 + 0x28) < 1) {\n      uVar9 = 0;\n    }\n    else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x28) < 1)" (( "(") (binary_expression "*(int *)(param_1 + 0x28) < 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      uVar9 = 0;\n    }" ({ "{") (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" (identifier "uVar9") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" (else "else") (compound_statement "{\n      lVar8 = 0;\n      uVar9 = 0;\n      do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));\n    }" ({ "{") (expression_statement "lVar8 = 0;" (assignment_expression "lVar8 = 0" (identifier "lVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" (identifier "uVar9") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      } while ((int)lVar8 < *(int *)(param_1 + 0x28));" (do "do") (compound_statement "{\n        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);\n        if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }\n        lVar8 = lVar8 + 1;\n      }" ({ "{") (expression_statement "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);" (assignment_expression "lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (identifier "lVar11") (= "=") (pointer_expression "*(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (* "*") (cast_expression "(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8)" (( "(") (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8" (binary_expression "lVar8 * 0x20 + *(long *)(param_1 + 0x20)" (binary_expression "lVar8 * 0x20" (identifier "lVar8") (* "*") (number_literal "0x20")) (+ "+") (pointer_expression "*(long *)(param_1 + 0x20)" (* "*") (cast_expression "(long *)(param_1 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (lVar11 != 0) {\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" (if "if") (parenthesized_expression "(lVar11 != 0)" (( "(") (binary_expression "lVar11 != 0" (identifier "lVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);\n          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);\n          if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }\n        }" ({ "{") (expression_statement "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);" (assignment_expression "lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8)" (identifier "lVar11") (= "=") (binary_expression "(long)param_2 * 4 + **(long **)(lVar11 + 8)" (binary_expression "(long)param_2 * 4" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (* "*") (number_literal "4")) (+ "+") (pointer_expression "**(long **)(lVar11 + 8)" (* "*") (pointer_expression "*(long **)(lVar11 + 8)" (* "*") (cast_expression "(long **)(lVar11 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar11 + 8)" (( "(") (binary_expression "lVar11 + 8" (identifier "lVar11") (+ "+") (number_literal "8")) () ")"))))))) (; ";")) (expression_statement "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);" (assignment_expression "uVar9 = uVar9 + *(int *)(lVar11 + 0xd4)" (identifier "uVar9") (= "=") (binary_expression "uVar9 + *(int *)(lVar11 + 0xd4)" (identifier "uVar9") (+ "+") (pointer_expression "*(int *)(lVar11 + 0xd4)" (* "*") (cast_expression "(int *)(lVar11 + 0xd4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0xd4)" (( "(") (binary_expression "lVar11 + 0xd4" (identifier "lVar11") (+ "+") (number_literal "0xd4")) () ")")))))) (; ";")) (if_statement "if (param_5 != 0) {\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" (if "if") (parenthesized_expression "(param_5 != 0)" (( "(") (binary_expression "param_5 != 0" (identifier "param_5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            *(undefined4 *)(lVar11 + 0xd4) = 0;\n          }" ({ "{") (expression_statement "*(undefined4 *)(lVar11 + 0xd4) = 0;" (assignment_expression "*(undefined4 *)(lVar11 + 0xd4) = 0" (pointer_expression "*(undefined4 *)(lVar11 + 0xd4)" (* "*") (cast_expression "(undefined4 *)(lVar11 + 0xd4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar11 + 0xd4)" (( "(") (binary_expression "lVar11 + 0xd4" (identifier "lVar11") (+ "+") (number_literal "0xd4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}"))) (expression_statement "lVar8 = lVar8 + 1;" (assignment_expression "lVar8 = lVar8 + 1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + 1" (identifier "lVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int)lVar8 < *(int *)(param_1 + 0x28))" (( "(") (binary_expression "(int)lVar8 < *(int *)(param_1 + 0x28)" (cast_expression "(int)lVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar8")) (< "<") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (; ";")) (} "}")))) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_3 = uVar9;" (assignment_expression "*param_3 = uVar9" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "param_5 = 0;" (assignment_expression "param_5 = 0" (identifier "param_5") (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "default:\n    param_5 = 1;" (default "default") (: ":") (expression_statement "param_5 = 1;" (assignment_expression "param_5 = 1" (identifier "param_5") (= "=") (number_literal "1")) (; ";"))) (} "}"))) (expression_statement "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));" (call_expression "FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18))" (identifier "FUN_0012a8f6") (argument_list "(*(undefined8 *)(param_1 + 0x18))" (( "(") (pointer_expression "*(undefined8 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) () ")"))) (; ";")) (if_statement "if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "(local_40 != *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_40 != *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_40") (!= "!=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return param_5;" (return "return") (identifier "param_5") (; ";")) (} "}")))

int function_1(type_1 *db,int var_12,int *pCurrent,int *var_6,int var_7)

{
  type_2 uVar1;
  type_3 *var_16;
  type_4 *var_19;
  type_5 *var_22;
  type_6 *var_9;
  type_7 *pPVar5;
  int var_5;
  int var_11;
  type_8 uVar8;
  type_9 *var_3;
  type_10 sVar10;
  long var_14;
  int var_4;
  type_9 *pLVar13;
  long var_1;
  int var_13;
  int var_17;
  long var_26;
  
  var_26 = *(long *)(var_1 + 0x28);
  var_2(db->mutex);
  switch(var_12) {
  case 0:
    var_3 = (db->lookaside).pInit;
    if (var_3 == (type_9 *)0x0) {
      var_4 = 0;
    }
    else {
      var_4 = 0;
      do {
        var_3 = var_3->pNext;
        var_4 = var_4 + 1;
      } while (var_3 != (type_9 *)0x0);
    }
    var_3 = (db->lookaside).pFree;
    if (var_3 == (type_9 *)0x0) {
      var_5 = 0;
    }
    else {
      var_5 = 0;
      do {
        var_3 = var_3->pNext;
        var_5 = var_5 + 1;
      } while (var_3 != (type_9 *)0x0);
    }
    if (var_6 != (int *)0x0) {
      *var_6 = (db->lookaside).nSlot - var_4;
    }
    *pCurrent = ((db->lookaside).nSlot - var_4) - var_5;
    if ((var_7 != 0) &&
       (var_3 = (db->lookaside).pFree, var_7 = var_12, var_3 != (type_9 *)0x0)) {
      do {
        pLVar13 = var_3;
        var_3 = pLVar13->pNext;
      } while (var_3 != (type_9 *)0x0);
      pLVar13->pNext = (db->lookaside).pInit;
      (db->lookaside).pInit = (db->lookaside).pFree;
      (db->lookaside).pFree = (type_9 *)0x0;
    }
    break;
  case 1:
  case 0xb:
    var_8(db);
    if (db->nDb < 1) {
      var_13 = 0;
    }
    else {
      var_14 = 0;
      var_13 = 0;
      do {
        var_9 = db->aDb[var_14].pBt;
        if (var_9 != (type_6 *)0x0) {
          pPVar5 = var_9->pBt->pPager;
          uVar1 = pPVar5->nExtra;
          var_4 = pPVar5->pageSize;
          var_5 = (*sqlite3Config.pcache2.xPagecount)(pPVar5->pPCache->pCache);
          var_11 = var_10(pPVar5);
          var_4 = var_11 + ((type_8)uVar1 + var_4 + 0x70) * var_5 + pPVar5->pageSize;
          if (var_12 == 0xb) {
            var_4 = var_4 / var_9->pBt->nRef;
          }
          var_13 = var_13 + var_4;
        }
        var_14 = var_14 + 1;
      } while ((int)var_14 < db->nDb);
    }
    var_15(db);
    *pCurrent = var_13;
    *var_6 = 0;
    var_7 = 0;
    break;
  case 2:
    var_17 = 0;
    var_8(db);
    db->pnBytesFreed = &var_17;
    if (0 < db->nDb) {
      var_14 = 0;
      do {
        var_16 = db->aDb[var_14].pSchema;
        if (var_16 != (type_3 *)0x0) {
          var_4 = (*sqlite3Config.m.xRoundup)(0x20);
          var_17 = var_17 + ((var_16->trigHash).count + (var_16->tblHash).count +
                           (var_16->idxHash).count + (var_16->fkeyHash).count) * var_4;
          sVar10 = var_18((var_16->tblHash).ht);
          var_17 = var_17 + (int)sVar10;
          sVar10 = var_18((var_16->trigHash).ht);
          var_17 = var_17 + (int)sVar10;
          sVar10 = var_18((var_16->idxHash).ht);
          var_17 = var_17 + (int)sVar10;
          sVar10 = var_18((var_16->fkeyHash).ht);
          var_17 = var_17 + (int)sVar10;
          for (var_19 = (var_16->trigHash).first; var_19 != (type_4 *)0x0; var_19 = var_19->next)
          {
            var_20(db,(type_11 *)var_19->data);
          }
          for (var_19 = (var_16->tblHash).first; var_19 != (type_4 *)0x0; var_19 = var_19->next) {
            var_21(db,(type_12 *)var_19->data);
          }
        }
        var_14 = var_14 + 1;
      } while ((int)var_14 < db->nDb);
    }
    db->pnBytesFreed = (int *)0x0;
    var_15(db);
    *var_6 = 0;
    *pCurrent = var_17;
    var_7 = 0;
    break;
  case 3:
    var_17 = 0;
    db->pnBytesFreed = &var_17;
    for (var_22 = db->pVdbe; var_22 != (type_5 *)0x0; var_22 = var_22->pNext) {
      var_23(db,var_22);
      var_24(db,var_22);
    }
    db->pnBytesFreed = (int *)0x0;
    *var_6 = 0;
    *pCurrent = var_17;
    var_7 = 0;
    break;
  case 4:
  case 5:
  case 6:
    *pCurrent = 0;
    *var_6 = (db->lookaside).anStat[(long)var_12 + -4];
    if (var_7 != 0) {
      (db->lookaside).anStat[(long)var_12 + -4] = 0;
      var_7 = 0;
    }
    break;
  case 10:
    *var_6 = 0;
    uVar8 = 1;
    if (db->nDeferredImmCons < 1) {
      uVar8 = (type_8)(0 < db->nDeferredCons);
    }
    *pCurrent = uVar8;
    var_7 = 0;
    break;
  case 0xc:
    var_12 = 10;
  case 7:
  case 8:
  case 9:
    if (db->nDb < 1) {
      var_4 = 0;
    }
    else {
      var_14 = 0;
      var_4 = 0;
      do {
        var_9 = db->aDb[var_14].pBt;
        if (var_9 != (type_6 *)0x0) {
          pPVar5 = var_9->pBt->pPager;
          var_4 = var_4 + pPVar5->aStat[(long)var_12 + -7];
          if (var_7 != 0) {
            pPVar5->aStat[(long)var_12 + -7] = 0;
          }
        }
        var_14 = var_14 + 1;
      } while ((int)var_14 < db->nDb);
    }
    *var_6 = 0;
    *pCurrent = var_4;
    var_7 = 0;
    break;
  default:
    var_7 = 1;
  }
  var_25(db->mutex);
  if (var_26 != *(long *)(var_1 + 0x28)) {
                    /* WARNING: Subroutine does not return */
    var_27();
  }
  return var_7;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) 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: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (switch_statement condition: (parenthesized_expression (identifier)) body: (compound_statement (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (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: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (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: (identifier))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (break_statement)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (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)))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator 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: (type_identifier) 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)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier)) right: (number_literal))) right: (identifier))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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 (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (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))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (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)))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (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: (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: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))))) (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) (for_statement initializer: (assignment_expression left: (identifier) right: (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)))))) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (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)))))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (number_literal) right: (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)))))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (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)))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator 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: (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: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (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))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (return_statement (identifier)))))

int MASKED(long param_1,int param_2,uint *param_3,int *param_4,int param_5)

{
  ushort uVar1;
  long lVar2;
  undefined8 *puVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  uint uVar9;
  long *plVar10;
  long lVar11;
  long in_FS_OFFSET;
  uint local_4c;
  uint local_44;
  long local_40;
  
  local_40 = *(long *)(in_FS_OFFSET + 0x28);
  FUN_0012a8c7(*(undefined8 *)(param_1 + 0x18));
  switch(param_2) {
  case 0:
    plVar7 = *(long **)(param_1 + 400);
    if (plVar7 == (long *)0x0) {
      iVar6 = 0;
    }
    else {
      iVar6 = 0;
      do {
        plVar7 = (long *)*plVar7;
        iVar6 = iVar6 + 1;
      } while (plVar7 != (long *)0x0);
    }
    plVar7 = *(long **)(param_1 + 0x198);
    if (plVar7 == (long *)0x0) {
      iVar4 = 0;
    }
    else {
      iVar4 = 0;
      do {
        plVar7 = (long *)*plVar7;
        iVar4 = iVar4 + 1;
      } while (plVar7 != (long *)0x0);
    }
    if (param_4 != (int *)0x0) {
      *param_4 = *(int *)(param_1 + 0x180) - iVar6;
    }
    *param_3 = (*(int *)(param_1 + 0x180) - iVar6) - iVar4;
    if ((param_5 != 0) &&
       (plVar7 = *(long **)(param_1 + 0x198), param_5 = param_2,
       *(long **)(param_1 + 0x198) != (long *)0x0)) {
      do {
        plVar10 = plVar7;
        plVar7 = (long *)*plVar10;
      } while (plVar7 != (long *)0x0);
      *plVar10 = *(long *)(param_1 + 400);
      *(undefined8 *)(param_1 + 400) = *(undefined8 *)(param_1 + 0x198);
      *(undefined8 *)(param_1 + 0x198) = 0;
    }
    break;
  case 1:
  case 0xb:
    FUN_0013f226(param_1);
    if (*(int *)(param_1 + 0x28) < 1) {
      local_4c = 0;
    }
    else {
      lVar8 = 0;
      local_4c = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);
        if (lVar11 != 0) {
          lVar2 = **(long **)(lVar11 + 8);
          uVar1 = *(ushort *)(lVar2 + 0xb0);
          iVar6 = *(int *)(lVar2 + 0xbc);
          iVar4 = (*DAT_0022f728)(*(undefined8 *)(*(long *)(lVar2 + 0x118) + 0x40));
          iVar5 = FUN_0012a964(lVar2);
          iVar6 = iVar5 + ((uint)uVar1 + iVar6 + 0x70) * iVar4 + *(int *)(lVar2 + 0xbc);
          if (param_2 == 0xb) {
            iVar6 = iVar6 / *(int *)(*(long *)(lVar11 + 8) + 0x60);
          }
          local_4c = local_4c + iVar6;
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    FUN_0012cc4a(param_1);
    *param_3 = local_4c;
    *param_4 = 0;
    param_5 = 0;
    break;
  case 2:
    local_44 = 0;
    FUN_0013f226(param_1);
    *(uint **)(param_1 + 0x2b8) = &local_44;
    if (0 < *(int *)(param_1 + 0x28)) {
      lVar8 = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 0x18);
        if (lVar11 != 0) {
          iVar6 = (*DAT_0022f690)(0x20);
          local_44 = local_44 +
                     (*(int *)(lVar11 + 0x3c) + *(int *)(lVar11 + 0xc) + *(int *)(lVar11 + 0x24) +
                     *(int *)(lVar11 + 0x54)) * iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x18));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x48));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x30));
          local_44 = local_44 + iVar6;
          iVar6 = FUN_0012aa60(*(undefined8 *)(lVar11 + 0x60));
          local_44 = local_44 + iVar6;
          for (puVar3 = *(undefined8 **)(lVar11 + 0x40); puVar3 != (undefined8 *)0x0;
              puVar3 = (undefined8 *)*puVar3) {
            FUN_001453db(param_1,puVar3[2]);
          }
          for (puVar3 = *(undefined8 **)(lVar11 + 0x10); puVar3 != (undefined8 *)0x0;
              puVar3 = (undefined8 *)*puVar3) {
            FUN_0014471b(param_1,puVar3[2]);
          }
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    *(undefined8 *)(param_1 + 0x2b8) = 0;
    FUN_0012cc4a(param_1);
    *param_4 = 0;
    *param_3 = local_44;
    param_5 = 0;
    break;
  case 3:
    local_44 = 0;
    *(uint **)(param_1 + 0x2b8) = &local_44;
    for (lVar8 = *(long *)(param_1 + 8); lVar8 != 0; lVar8 = *(long *)(lVar8 + 0x10)) {
      FUN_00143e41(param_1,lVar8);
      FUN_00141394(param_1,lVar8);
    }
    *(undefined8 *)(param_1 + 0x2b8) = 0;
    *param_4 = 0;
    *param_3 = local_44;
    param_5 = 0;
    break;
  case 4:
  case 5:
  case 6:
    *param_3 = 0;
    lVar8 = param_1 + (long)param_2 * 4;
    *param_4 = *(int *)(lVar8 + 0x174);
    if (param_5 != 0) {
      *(undefined4 *)(lVar8 + 0x174) = 0;
      param_5 = 0;
    }
    break;
  case 10:
    *param_4 = 0;
    uVar9 = 1;
    if (*(long *)(param_1 + 0x2b0) < 1) {
      uVar9 = (uint)(0 < *(long *)(param_1 + 0x2a8));
    }
    *param_3 = uVar9;
    param_5 = 0;
    break;
  case 0xc:
    param_2 = 10;
  case 7:
  case 8:
  case 9:
    if (*(int *)(param_1 + 0x28) < 1) {
      uVar9 = 0;
    }
    else {
      lVar8 = 0;
      uVar9 = 0;
      do {
        lVar11 = *(long *)(lVar8 * 0x20 + *(long *)(param_1 + 0x20) + 8);
        if (lVar11 != 0) {
          lVar11 = (long)param_2 * 4 + **(long **)(lVar11 + 8);
          uVar9 = uVar9 + *(int *)(lVar11 + 0xd4);
          if (param_5 != 0) {
            *(undefined4 *)(lVar11 + 0xd4) = 0;
          }
        }
        lVar8 = lVar8 + 1;
      } while ((int)lVar8 < *(int *)(param_1 + 0x28));
    }
    *param_4 = 0;
    *param_3 = uVar9;
    param_5 = 0;
    break;
  default:
    param_5 = 1;
  }
  FUN_0012a8f6(*(undefined8 *)(param_1 + 0x18));
  if (local_40 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return param_5;
}

