
/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void __regparm3
windowAggStep(Parse *pParse,Window *pMWin,int csr,int bInverse,int reg,int regPartSize)

{
  ExprList *pEVar1;
  byte bVar2;
  Vdbe *p;
  FuncDef *pFVar3;
  int iVar4;
  int p2;
  int iVar5;
  Op *pOVar6;
  int iVar7;
  CollSeq *local_30;
  int local_2c;
  
  p = pParse->pVdbe;
  if (p == (Vdbe *)0x0) {
    p = sqlite3GetVdbe(pParse);
  }
  if (pMWin == (Window *)0x0) {
    return;
  }
LAB_0005e53b:
  do {
    pFVar3 = pMWin->pFunc;
    local_30 = (CollSeq *)pFVar3->funcFlags;
    pEVar1 = (pMWin->pOwner->x).pList;
    if (pEVar1 == (ExprList *)0x0) {
      iVar4 = 0;
      if (csr < 0) goto LAB_0005e563;
      if (((uint)local_30 & 0x20000) == 0) {
        local_2c = reg;
        iVar7 = 0;
      }
      else {
        local_2c = regPartSize;
        iVar7 = 1;
      }
    }
    else {
      iVar4 = pEVar1->nExpr;
      if (csr < 0) {
LAB_0005e563:
        local_2c = reg + pMWin->iArgCol;
        iVar7 = iVar4;
      }
      else {
        iVar7 = 0;
        if (iVar4 < 1) {
          if (((uint)local_30 & 0x20000) != 0) {
            if (iVar4 == 0) {
              local_2c = regPartSize;
              iVar7 = 1;
              goto LAB_0005e56e;
            }
            goto LAB_0005e893;
          }
        }
        else {
          do {
            iVar5 = reg + iVar7;
            p2 = pMWin->iArgCol + iVar7;
            iVar7 = iVar7 + 1;
            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);
          } while (iVar7 != iVar4);
          if (((uint)local_30 & 0x20000) != 0) {
LAB_0005e893:
            iVar7 = iVar4 + 1;
            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);
            pFVar3 = pMWin->pFunc;
            local_30 = (CollSeq *)pFVar3->funcFlags;
            local_2c = reg;
            goto LAB_0005e56e;
          }
          pFVar3 = pMWin->pFunc;
        }
        local_30 = (CollSeq *)pFVar3->funcFlags;
        local_2c = reg;
        iVar7 = iVar4;
      }
    }
LAB_0005e56e:
    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {
      if (pMWin->regApp != 0) {
        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);
        pMWin = pMWin->pNextWin;
        if (pMWin == (Window *)0x0) {
          return;
        }
        goto LAB_0005e53b;
      }
      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {
        iVar4 = 0;
        if (pMWin->pFilter != (Expr *)0x0) {
          if (csr < 1) {
            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);
            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;
          }
          else {
            if (pParse->nTempReg == '\0') {
              local_30 = (CollSeq *)(pParse->nMem + 1);
              pParse->nMem = (int)local_30;
            }
            else {
              bVar2 = pParse->nTempReg - 1;
              pParse->nTempReg = bVar2;
              local_30 = (CollSeq *)pParse->aTempReg[bVar2];
            }
            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);
            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);
            if (local_30 != (CollSeq *)0x0) {
              sqlite3ReleaseTempReg(pParse,(int)local_30);
            }
            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;
          }
        }
        if (((uint)local_30 & 0x20) != 0) {
          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);
          if (local_30 == (CollSeq *)0x0) {
            local_30 = pParse->db->pDfltColl;
          }
          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);
          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);
        }
        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);
        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);
        if (0 < p->nOp) {
          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;
        }
        if (iVar4 != 0) {
          iVar7 = p->nOp;
          goto LAB_0005e50e;
        }
      }
    }
    else {
      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);
      if (bInverse == 0) {
        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);
        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);
        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);
        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);
        iVar7 = DAT_0014c564;
      }
      else {
        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);
        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);
        iVar7 = p->nOp;
        iVar5 = iVar7 + -2;
        if (iVar7 + -2 < 0) {
          iVar5 = iVar7 + -1;
        }
        if (p->db->mallocFailed == '\0') {
          p->aOp[iVar5].p2 = iVar7;
          iVar7 = DAT_0014c564;
        }
      }
      DAT_0014c564 = iVar7;
      iVar7 = p->nOp;
LAB_0005e50e:
      if (iVar4 < 0) {
        iVar4 = iVar7 + -1;
      }
      pOVar6 = (Op *)&dummy_22864;
      if (p->db->mallocFailed == '\0') {
        pOVar6 = p->aOp + iVar4;
      }
      pOVar6->p2 = iVar7;
    }
    pMWin = pMWin->pNextWin;
    if (pMWin == (Window *)0x0) {
      return;
    }
  } while( true );
}



/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void __regparm3
FUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)

{
  int *piVar1;
  byte bVar2;
  int *piVar3;
  int iVar4;
  int iVar5;
  undefined1 *puVar6;
  int iVar7;
  int iVar8;
  uint local_30;
  int local_2c;
  
  piVar3 = *(int **)(param_1 + 8);
  if (piVar3 == (int *)0x0) {
    piVar3 = (int *)FUN_000498b0();
  }
  if (param_2 == 0) {
    return;
  }
LAB_0005e53b:
  do {
    iVar4 = *(int *)(param_2 + 0x20);
    local_30 = *(uint *)(iVar4 + 4);
    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);
    if (piVar1 == (int *)0x0) {
      iVar8 = 0;
      if (param_3 < 0) goto LAB_0005e563;
      if ((local_30 & 0x20000) == 0) {
        local_2c = param_5;
        iVar7 = 0;
      }
      else {
        local_2c = param_6;
        iVar7 = 1;
      }
    }
    else {
      iVar8 = *piVar1;
      if (param_3 < 0) {
LAB_0005e563:
        local_2c = param_5 + *(int *)(param_2 + 0x44);
        iVar7 = iVar8;
      }
      else {
        iVar7 = 0;
        if (iVar8 < 1) {
          if ((local_30 & 0x20000) != 0) {
            if (iVar8 == 0) {
              local_2c = param_6;
              iVar7 = 1;
              goto LAB_0005e56e;
            }
            goto LAB_0005e893;
          }
        }
        else {
          do {
            iVar4 = param_5 + iVar7;
            iVar5 = *(int *)(param_2 + 0x44) + iVar7;
            iVar7 = iVar7 + 1;
            FUN_000497a0(iVar5,iVar4);
          } while (iVar7 != iVar8);
          if ((local_30 & 0x20000) != 0) {
LAB_0005e893:
            iVar7 = iVar8 + 1;
            FUN_000497a0(iVar8 + param_5,0);
            iVar4 = *(int *)(param_2 + 0x20);
            local_30 = *(uint *)(iVar4 + 4);
            local_2c = param_5;
            goto LAB_0005e56e;
          }
          iVar4 = *(int *)(param_2 + 0x20);
        }
        local_30 = *(uint *)(iVar4 + 4);
        local_2c = param_5;
        iVar7 = iVar8;
      }
    }
LAB_0005e56e:
    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {
      iVar4 = FUN_000497a0(0,0);
      if (param_4 == 0) {
        FUN_000497a0(1,0);
        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);
        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);
        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);
        iVar8 = DAT_0014c564;
      }
      else {
        FUN_00049940(0,local_2c,1);
        FUN_000497a0(0,0);
        iVar8 = piVar3[0x1a];
        iVar7 = iVar8 + -2;
        if (iVar8 + -2 < 0) {
          iVar7 = iVar8 + -1;
        }
        if (*(char *)(*piVar3 + 0x4d) == '\0') {
          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;
          iVar8 = DAT_0014c564;
        }
      }
      DAT_0014c564 = iVar8;
      iVar8 = piVar3[0x1a];
LAB_0005e50e:
      if (iVar4 < 0) {
        iVar4 = iVar8 + -1;
      }
      puVar6 = &DAT_0014c55c;
      if (*(char *)(*piVar3 + 0x4d) == '\0') {
        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);
      }
      *(int *)(puVar6 + 8) = iVar8;
LAB_0005e530:
      param_2 = *(int *)(param_2 + 0x18);
      if (param_2 == 0) {
        return;
      }
      goto LAB_0005e53b;
    }
    if (*(int *)(param_2 + 0x34) == 0) {
      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&
         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {
        iVar4 = 0;
        if (*(int *)(param_2 + 0x1c) != 0) {
          if (param_3 < 1) {
            iVar4 = FUN_000497a0(0,1);
            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);
          }
          else {
            if (*(char *)(param_1 + 0x13) == '\0') {
              local_30 = *(int *)(param_1 + 0x2c) + 1;
              *(uint *)(param_1 + 0x2c) = local_30;
            }
            else {
              bVar2 = *(char *)(param_1 + 0x13) - 1;
              *(byte *)(param_1 + 0x13) = bVar2;
              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);
            }
            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);
            iVar4 = FUN_000497a0(0,1);
            if (local_30 != 0) {
              FUN_0002f640();
            }
            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);
          }
        }
        if ((local_30 & 0x20) != 0) {
          FUN_0005da30();
          FUN_000497a0(0,0);
          FUN_000370b0(0xfffffffe);
        }
        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));
        FUN_00030d60();
        if (0 < piVar3[0x1a]) {
          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;
        }
        if (iVar4 != 0) {
          iVar8 = piVar3[0x1a];
          goto LAB_0005e50e;
        }
      }
      goto LAB_0005e530;
    }
    FUN_000497a0(1,0);
    param_2 = *(int *)(param_2 + 0x18);
    if (param_2 == 0) {
      return;
    }
  } while( true );
}


PUSH EBP
PUSH EDI
MOV EDI,EDX
PUSH ESI
CALL 0x000f5a00
ADD ESI,0xecaaa
PUSH EBX
SUB ESP,0x2c
MOV EBP,dword ptr [EAX + 0x8]
MOV dword ptr [ESP + 0x18],EAX
MOV dword ptr [ESP + 0x8],ECX
MOV dword ptr [ESP + 0x14],ESI
TEST EBP,EBP
JNZ 0x0005e44e
CALL 0x000498b0
MOV EBP,EAX
TEST EDI,EDI
JZ 0x0005e6f8
CMP dword ptr [ESP + 0x40],0x1
SBB EAX,EAX
NOT EAX
ADD EAX,0x9a
MOV dword ptr [ESP + 0x1c],EAX
JMP 0x0005e53b
CMP byte ptr [EDI + 0xd],0x57
JZ 0x0005e57c
SUB ESP,0x8
MOV EDX,0x32
MOV EAX,EBP
PUSH 0x0
PUSH 0x0
MOV ESI,dword ptr [ESP + 0x20]
MOV ECX,ESI
CALL 0x000497a0
ADD ESP,0x10
MOV EBX,EAX
MOV EAX,dword ptr [ESP + 0x40]
TEST EAX,EAX
JNZ 0x0005e768
SUB ESP,0x8
MOV EAX,dword ptr [EDI + 0x34]
MOV EDX,0x53
PUSH 0x0
PUSH 0x1
LEA ECX,[EAX + 0x1]
MOV EAX,EBP
CALL 0x000497a0
POP ECX
POP EAX
PUSH 0x0
PUSH dword ptr [EDI + 0x34]
MOV ECX,ESI
MOV EDX,0x4f
MOV EAX,EBP
CALL 0x000497a0
MOV ECX,dword ptr [EDI + 0x34]
POP EAX
POP EDX
MOV EDX,0x66
LEA EAX,[ECX + 0x2]
PUSH EAX
MOV EAX,EBP
PUSH 0x2
CALL 0x000497a0
POP ESI
MOV ECX,dword ptr [EDI + 0x30]
MOV EDX,0x84
POP EAX
PUSH 0x0
MOV EAX,dword ptr [EDI + 0x34]
ADD EAX,0x2
PUSH EAX
MOV EAX,EBP
CALL 0x000497a0
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0x68]
TEST EBX,EBX
LEA EDX,[EAX + -0x1]
MOV ECX,dword ptr [EBP]
MOV ESI,dword ptr [ESP + 0x14]
CMOVS EBX,EDX
CMP byte ptr [ECX + 0x4d],0x0
LEA EDX,[ESI + 0x1688]
JNZ 0x0005e52d
MOV EDX,dword ptr [EBP + 0x64]
LEA ECX,[EBX + EBX*0x4]
LEA EDX,[EDX + ECX*0x4]
MOV dword ptr [EDX + 0x8],EAX
MOV EDI,dword ptr [EDI + 0x18]
TEST EDI,EDI
JZ 0x0005e6f8
MOV EAX,dword ptr [EDI + 0x20]
MOV EDX,dword ptr [EDI + 0x3c]
MOV ESI,dword ptr [EAX + 0x4]
MOV EDX,dword ptr [EDX + 0x14]
MOV ECX,EAX
MOV dword ptr [ESP + 0xc],ESI
TEST EDX,EDX
JZ 0x0005e698
MOV ESI,dword ptr [EDX]
MOV EDX,dword ptr [ESP + 0x8]
TEST EDX,EDX
JNS 0x0005e700
MOV ECX,dword ptr [ESP + 0x44]
ADD ECX,dword ptr [EDI + 0x44]
MOV dword ptr [ESP + 0x10],ECX
TEST dword ptr [ESP + 0xc],0x1000
JNZ 0x0005e470
MOV EBX,dword ptr [EDI + 0x34]
TEST EBX,EBX
JNZ 0x0005e6d0
MOV ECX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [EAX + 0x20]
LEA EDX,[ECX + 0xfffb9600]
CMP EAX,EDX
JZ 0x0005e530
LEA EDX,[ECX + 0xfffb9604]
CMP EAX,EDX
JZ 0x0005e530
MOV EAX,dword ptr [EDI + 0x1c]
TEST EAX,EAX
JZ 0x0005e632
MOV EAX,dword ptr [ESP + 0x8]
TEST EAX,EAX
JLE 0x0005e820
MOV EAX,dword ptr [ESP + 0x18]
MOVZX EAX,byte ptr [EAX + 0x13]
TEST AL,AL
JZ 0x0005e8d0
MOV EBX,dword ptr [ESP + 0x18]
SUB EAX,0x1
MOV byte ptr [EBX + 0x13],AL
MOVZX EAX,AL
MOV EAX,dword ptr [EBX + EAX*0x4 + 0x90]
MOV dword ptr [ESP + 0xc],EAX
SUB ESP,0x8
MOV EDX,0x5a
MOV EBX,dword ptr [ESP + 0x14]
PUSH EBX
MOV EAX,dword ptr [EDI + 0x44]
ADD EAX,ESI
PUSH EAX
MOV ECX,dword ptr [ESP + 0x18]
MOV EAX,EBP
CALL 0x000497a0
POP ECX
POP EAX
PUSH 0x1
PUSH 0x0
MOV ECX,EBX
MOV EDX,0x14
MOV EAX,EBP
MOV dword ptr [ESP + 0x1c],EBX
CALL 0x000497a0
ADD ESP,0x10
MOV EBX,EAX
MOV EAX,dword ptr [ESP + 0xc]
TEST EAX,EAX
JNZ 0x0005e878
MOV EAX,dword ptr [EDI + 0x20]
MOV EAX,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0xc],EAX
TEST byte ptr [ESP + 0xc],0x20
JNZ 0x0005e7d0
SUB ESP,0x8
PUSH dword ptr [EDI + 0x28]
MOV EAX,EBP
PUSH dword ptr [ESP + 0x1c]
MOV ECX,dword ptr [ESP + 0x50]
MOV EDX,dword ptr [ESP + 0x2c]
CALL 0x000497a0
MOV EDX,dword ptr [EDI + 0x20]
MOV EAX,EBP
MOV ECX,0xfffffff8
CALL 0x00030d60
MOV EAX,dword ptr [EBP + 0x68]
ADD ESP,0x10
TEST EAX,EAX
JLE 0x0005e681
MOV EDX,dword ptr [EBP + 0x64]
LEA EAX,[EAX + EAX*0x4]
MOV ECX,ESI
MOVZX ESI,CL
LEA EAX,[EDX + EAX*0x4]
MOV word ptr [EAX + -0x12],SI
TEST EBX,EBX
JZ 0x0005e530
MOV EAX,dword ptr [EBP + 0x68]
LEA EDX,[EAX + -0x1]
JMP 0x0005e50e
MOV ECX,dword ptr [ESP + 0x8]
XOR ESI,ESI
TEST ECX,ECX
JS 0x0005e563
MOV ESI,dword ptr [ESP + 0xc]
AND ESI,0x20000
JZ 0x0005e868
MOV ESI,dword ptr [ESP + 0x48]
MOV dword ptr [ESP + 0x10],ESI
MOV ESI,0x1
JMP 0x0005e56e
SUB ESP,0x8
LEA ECX,[EBX + 0x1]
SUB ECX,dword ptr [ESP + 0x48]
MOV EDX,0x53
PUSH 0x0
MOV EAX,EBP
PUSH 0x1
CALL 0x000497a0
MOV EDI,dword ptr [EDI + 0x18]
ADD ESP,0x10
TEST EDI,EDI
JNZ 0x0005e53b
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
XOR EBX,EBX
TEST ESI,ESI
JLE 0x0005e8e6
LEA ESI,[ESI]
SUB ESP,0x8
MOV EDX,0x5a
MOV EAX,dword ptr [ESP + 0x4c]
ADD EAX,EBX
PUSH EAX
MOV EAX,dword ptr [EDI + 0x44]
ADD EAX,EBX
ADD EBX,0x1
PUSH EAX
MOV ECX,dword ptr [ESP + 0x18]
MOV EAX,EBP
CALL 0x000497a0
ADD ESP,0x10
CMP EBX,ESI
JNZ 0x0005e710
TEST dword ptr [ESP + 0xc],0x20000
JNZ 0x0005e890
MOV ECX,dword ptr [EDI + 0x20]
MOV EBX,dword ptr [ECX + 0x4]
MOV EDX,dword ptr [ESP + 0x44]
MOV EAX,ECX
MOV dword ptr [ESP + 0xc],EBX
MOV dword ptr [ESP + 0x10],EDX
JMP 0x0005e56e
SUB ESP,0x4
MOV ECX,dword ptr [EDI + 0x30]
MOV EDX,0x18
MOV EAX,EBP
PUSH 0x1
PUSH dword ptr [ESP + 0x18]
PUSH 0x0
CALL 0x00049940
POP EAX
MOV ECX,dword ptr [EDI + 0x30]
MOV EAX,EBP
POP EDX
PUSH 0x0
MOV EDX,0x7b
PUSH 0x0
CALL 0x000497a0
MOV EAX,dword ptr [EBP + 0x68]
ADD ESP,0x10
MOV ESI,dword ptr [EBP]
MOV EDX,EAX
LEA ECX,[EAX + -0x1]
SUB EDX,0x2
CMOVS EDX,ECX
MOV ECX,dword ptr [ESP + 0x14]
CMP byte ptr [ESI + 0x4d],0x0
LEA ECX,[ECX + 0x1688]
JZ 0x0005e850
MOV dword ptr [ECX + 0x8],EAX
JMP 0x0005e506
MOV EAX,dword ptr [EDI + 0x3c]
MOV EAX,dword ptr [EAX + 0x14]
MOV EDX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [ESP + 0x18]
CALL 0x0005da30
MOV dword ptr [ESP + 0xc],EAX
TEST EAX,EAX
JZ 0x0005e90d
SUB ESP,0x8
XOR ECX,ECX
MOV EDX,0x52
MOV EAX,EBP
PUSH 0x0
PUSH 0x0
CALL 0x000497a0
MOV ECX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP],0xfffffffe
MOV EDX,EAX
MOV EAX,EBP
CALL 0x000370b0
ADD ESP,0x10
JMP 0x0005e63d
MOV EAX,dword ptr [ESP + 0x10]
SUB ESP,0x8
MOV EDX,0x14
PUSH 0x1
PUSH 0x0
LEA ECX,[EAX + ESI*0x1]
MOV EAX,EBP
CALL 0x000497a0
MOV EBX,EAX
MOV EAX,dword ptr [EDI + 0x20]
MOV EAX,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0x1c],EAX
ADD ESP,0x10
JMP 0x0005e632
LEA ECX,[EDX + EDX*0x4]
MOV EDX,dword ptr [EBP + 0x64]
LEA ECX,[EDX + ECX*0x4]
MOV dword ptr [ECX + 0x8],EAX
JMP 0x0005e506
MOV EBX,dword ptr [ESP + 0x44]
MOV dword ptr [ESP + 0x10],EBX
JMP 0x0005e56e
MOV EDX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0x18]
CALL 0x0002f640
JMP 0x0005e628
LEA EBX,[ESI + 0x1]
SUB ESP,0x8
MOV EDX,0x4f
MOV EAX,EBP
PUSH 0x0
ADD ESI,dword ptr [ESP + 0x50]
PUSH ESI
MOV ECX,dword ptr [ESP + 0x58]
CALL 0x000497a0
MOV EAX,dword ptr [EDI + 0x20]
MOV ESI,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0x1c],ESI
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x44]
MOV ESI,EBX
MOV dword ptr [ESP + 0x10],EDX
JMP 0x0005e56e
MOV EAX,dword ptr [ESP + 0x18]
MOV EDX,dword ptr [EAX + 0x2c]
LEA EDX,[EDX + 0x1]
MOV dword ptr [ESP + 0xc],EDX
MOV dword ptr [EAX + 0x2c],EDX
JMP 0x0005e5e1
TEST dword ptr [ESP + 0xc],0x20000
JZ 0x0005e74b
LEA EBX,[ESI + 0x1]
TEST ESI,ESI
JNZ 0x0005e893
MOV ESI,dword ptr [ESP + 0x48]
MOV dword ptr [ESP + 0x10],ESI
MOV ESI,0x1
JMP 0x0005e56e
MOV EAX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [EAX]
MOV EAX,dword ptr [EAX + 0x8]
MOV dword ptr [ESP + 0xc],EAX
JMP 0x0005e7ee
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nvoid __regparm3\nFUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)\n\n{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}\n\n" comment (function_definition "void __regparm3\nFUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)\n\n{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int param_6" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined1 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "piVar3 = *(int **)(param_1 + 8);" (assignment_expression "piVar3 = *(int **)(param_1 + 8)" identifier = (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    piVar3 = (int *)FUN_000498b0();\n  }" { (expression_statement "piVar3 = (int *)FUN_000498b0();" (assignment_expression "piVar3 = (int *)FUN_000498b0()" identifier = (cast_expression "(int *)FUN_000498b0()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000498b0()" identifier (argument_list "()" ( ))))) ;) })) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);" (assignment_expression "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14)" identifier = (pointer_expression "*(int **)(*(int *)(param_2 + 0x3c) + 0x14)" * (cast_expression "(int **)(*(int *)(param_2 + 0x3c) + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_2 + 0x3c) + 0x14)" ( (binary_expression "*(int *)(param_2 + 0x3c) + 0x14" (pointer_expression "*(int *)(param_2 + 0x3c)" * (cast_expression "(int *)(param_2 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x3c)" ( (binary_expression "param_2 + 0x3c" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" if (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 < 0) goto LAB_0005e563;" if (parenthesized_expression "(param_3 < 0)" ( (binary_expression "param_3 < 0" identifier < number_literal) )) (goto_statement "goto LAB_0005e563;" goto statement_identifier ;)) (if_statement "if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" if (parenthesized_expression "((local_30 & 0x20000) == 0)" ( (binary_expression "(local_30 & 0x20000) == 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        local_2c = param_5;\n        iVar7 = 0;\n      }" { (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) }) (else_clause "else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" else (compound_statement "{\n        local_2c = param_6;\n        iVar7 = 1;\n      }" { (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) }))) }) (else_clause "else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" else (compound_statement "{\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" { (expression_statement "iVar8 = *piVar1;" (assignment_expression "iVar8 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" if (parenthesized_expression "(param_3 < 0)" ( (binary_expression "param_3 < 0" identifier < number_literal) )) (compound_statement "{\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }" { (labeled_statement "LAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);" statement_identifier : (expression_statement "local_2c = param_5 + *(int *)(param_2 + 0x44);" (assignment_expression "local_2c = param_5 + *(int *)(param_2 + 0x44)" identifier = (binary_expression "param_5 + *(int *)(param_2 + 0x44)" identifier + (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))))) ;)) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" identifier = identifier) ;) }) (else_clause "else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" else (compound_statement "{\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" if (parenthesized_expression "(iVar8 < 1)" ( (binary_expression "iVar8 < 1" identifier < number_literal) )) (compound_statement "{\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }" { (if_statement "if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" if (parenthesized_expression "((local_30 & 0x20000) != 0)" ( (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" { (if_statement "if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" { (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0005e893;" goto statement_identifier ;) })) }) (else_clause "else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" else (compound_statement "{\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" { (do_statement "do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);" do (compound_statement "{\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          }" { (expression_statement "iVar4 = param_5 + iVar7;" (assignment_expression "iVar4 = param_5 + iVar7" identifier = (binary_expression "param_5 + iVar7" identifier + identifier)) ;) (expression_statement "iVar5 = *(int *)(param_2 + 0x44) + iVar7;" (assignment_expression "iVar5 = *(int *)(param_2 + 0x44) + iVar7" identifier = (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))) + identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000497a0(iVar5,iVar4);" (call_expression "FUN_000497a0(iVar5,iVar4)" identifier (argument_list "(iVar5,iVar4)" ( identifier , identifier ))) ;) }) while (parenthesized_expression "(iVar7 != iVar8)" ( (binary_expression "iVar7 != iVar8" identifier != identifier) )) ;) (if_statement "if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" if (parenthesized_expression "((local_30 & 0x20000) != 0)" ( (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" { (labeled_statement "LAB_0005e893:\n            iVar7 = iVar8 + 1;" statement_identifier : (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;)) (expression_statement "FUN_000497a0(iVar8 + param_5,0);" (call_expression "FUN_000497a0(iVar8 + param_5,0)" identifier (argument_list "(iVar8 + param_5,0)" ( (binary_expression "iVar8 + param_5" identifier + identifier) , number_literal ))) ;) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) }))) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" identifier = identifier) ;) }))) }))) (labeled_statement "LAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" statement_identifier : (if_statement "if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" if (parenthesized_expression "(((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W'))" ( (binary_expression "((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')" (parenthesized_expression "((local_30 & 0x1000) != 0)" ( (binary_expression "(local_30 & 0x1000) != 0" (parenthesized_expression "(local_30 & 0x1000)" ( (binary_expression "local_30 & 0x1000" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "(*(char *)(param_2 + 0xd) != 'W')" ( (binary_expression "*(char *)(param_2 + 0xd) != 'W'" (pointer_expression "*(char *)(param_2 + 0xd)" * (cast_expression "(char *)(param_2 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xd)" ( (binary_expression "param_2 + 0xd" identifier + number_literal) )))) != (char_literal "'W'" ' character ')) ))) )) (compound_statement "{\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" { (expression_statement "iVar4 = FUN_000497a0(0,0);" (assignment_expression "iVar4 = FUN_000497a0(0,0)" identifier = (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal )))) ;) (if_statement "if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }" { (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" identifier (argument_list "(1,0)" ( number_literal , number_literal ))) ;) (expression_statement "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);" (call_expression "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0)" identifier (argument_list "(*(undefined4 *)(param_2 + 0x34),0)" ( (pointer_expression "*(undefined4 *)(param_2 + 0x34)" * (cast_expression "(undefined4 *)(param_2 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) , number_literal ))) ;) (expression_statement "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);" (call_expression "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2)" identifier (argument_list "(2,*(int *)(param_2 + 0x34) + 2)" ( number_literal , (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) + number_literal) ))) ;) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0)" identifier (argument_list "(*(int *)(param_2 + 0x34) + 2,0)" ( (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) + number_literal) , number_literal ))) ;) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" else (compound_statement "{\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" { (expression_statement "FUN_00049940(0,local_2c,1);" (call_expression "FUN_00049940(0,local_2c,1)" identifier (argument_list "(0,local_2c,1)" ( number_literal , identifier , number_literal ))) ;) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal ))) ;) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (expression_statement "iVar7 = iVar8 + -2;" (assignment_expression "iVar7 = iVar8 + -2" identifier = (binary_expression "iVar8 + -2" identifier + number_literal)) ;) (if_statement "if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }" if (parenthesized_expression "(iVar8 + -2 < 0)" ( (binary_expression "iVar8 + -2 < 0" (binary_expression "iVar8 + -2" identifier + number_literal) < number_literal) )) (compound_statement "{\n          iVar7 = iVar8 + -1;\n        }" { (expression_statement "iVar7 = iVar8 + -1;" (assignment_expression "iVar7 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) })) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" if (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" ( (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" * (cast_expression "(char *)(*piVar3 + 0x4d)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar3 + 0x4d)" ( (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" * identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" { (expression_statement "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;" (assignment_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8" (pointer_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" * (cast_expression "(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + iVar7 * 0x14 + 8)" ( (binary_expression "piVar3[0x19] + iVar7 * 0x14 + 8" (binary_expression "piVar3[0x19] + iVar7 * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "iVar7 * 0x14" identifier * number_literal)) + number_literal) )))) = identifier) ;) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" identifier = identifier) ;) })) }))) (expression_statement "DAT_0014c564 = iVar8;" (assignment_expression "DAT_0014c564 = iVar8" identifier = identifier) ;) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (labeled_statement "LAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" statement_identifier : (if_statement "if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n        iVar4 = iVar8 + -1;\n      }" { (expression_statement "iVar4 = iVar8 + -1;" (assignment_expression "iVar4 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) }))) (expression_statement "puVar6 = &DAT_0014c55c;" (assignment_expression "puVar6 = &DAT_0014c55c" identifier = (pointer_expression "&DAT_0014c55c" & identifier)) ;) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" if (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" ( (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" * (cast_expression "(char *)(*piVar3 + 0x4d)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar3 + 0x4d)" ( (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" * identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" { (expression_statement "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);" (assignment_expression "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" identifier = (cast_expression "(undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + iVar4 * 0x14)" ( (binary_expression "piVar3[0x19] + iVar4 * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) )))) ;) })) (expression_statement "*(int *)(puVar6 + 8) = iVar8;" (assignment_expression "*(int *)(puVar6 + 8) = iVar8" (pointer_expression "*(int *)(puVar6 + 8)" * (cast_expression "(int *)(puVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar6 + 8)" ( (binary_expression "puVar6 + 8" identifier + number_literal) )))) = identifier) ;) (labeled_statement "LAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);" statement_identifier : (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" identifier = (pointer_expression "*(int *)(param_2 + 0x18)" * (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;)) (if_statement "if (param_2 == 0) {\n        return;\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0005e53b;" goto statement_identifier ;) }))) (if_statement "if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x34) == 0)" ( (binary_expression "*(int *)(param_2 + 0x34) == 0" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" { (if_statement "if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" if (parenthesized_expression "((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8))" ( (binary_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4)" ( (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d4" (pointer_expression "*(undefined **)(iVar4 + 0x20)" * (cast_expression "(undefined **)(iVar4 + 0x20)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) )))) != (pointer_expression "&DAT_001044d4" & identifier)) )) && (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" ( (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d8" (pointer_expression "*(undefined **)(iVar4 + 0x20)" * (cast_expression "(undefined **)(iVar4 + 0x20)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) )))) != (pointer_expression "&DAT_001044d8" & identifier)) ))) )) (compound_statement "{\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" if (parenthesized_expression "(*(int *)(param_2 + 0x1c) != 0)" ( (binary_expression "*(int *)(param_2 + 0x1c) != 0" (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" { (if_statement "if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" { (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" identifier = (call_expression "FUN_000497a0(0,1)" identifier (argument_list "(0,1)" ( number_literal , number_literal )))) ;) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" * (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" ( (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" else (compound_statement "{\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" { (if_statement "if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" if (parenthesized_expression "(*(char *)(param_1 + 0x13) == '\0')" ( (binary_expression "*(char *)(param_1 + 0x13) == '\0'" (pointer_expression "*(char *)(param_1 + 0x13)" * (cast_expression "(char *)(param_1 + 0x13)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }" { (expression_statement "local_30 = *(int *)(param_1 + 0x2c) + 1;" (assignment_expression "local_30 = *(int *)(param_1 + 0x2c) + 1" identifier = (binary_expression "*(int *)(param_1 + 0x2c) + 1" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x2c) = local_30;" (assignment_expression "*(uint *)(param_1 + 0x2c) = local_30" (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" else (compound_statement "{\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" { (expression_statement "bVar2 = *(char *)(param_1 + 0x13) - 1;" (assignment_expression "bVar2 = *(char *)(param_1 + 0x13) - 1" identifier = (binary_expression "*(char *)(param_1 + 0x13) - 1" (pointer_expression "*(char *)(param_1 + 0x13)" * (cast_expression "(char *)(param_1 + 0x13)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) - number_literal)) ;) (expression_statement "*(byte *)(param_1 + 0x13) = bVar2;" (assignment_expression "*(byte *)(param_1 + 0x13) = bVar2" (pointer_expression "*(byte *)(param_1 + 0x13)" * (cast_expression "(byte *)(param_1 + 0x13)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) = identifier) ;) (expression_statement "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);" (assignment_expression "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" identifier = (pointer_expression "*(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" * (cast_expression "(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x90 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x90 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x90" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) ))))) ;) }))) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30)" identifier (argument_list "(*(int *)(param_2 + 0x44) + iVar7,local_30)" ( (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))) + identifier) , identifier ))) ;) (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" identifier = (call_expression "FUN_000497a0(0,1)" identifier (argument_list "(0,1)" ( number_literal , number_literal )))) ;) (if_statement "if (local_30 != 0) {\n              FUN_0002f640();\n            }" if (parenthesized_expression "(local_30 != 0)" ( (binary_expression "local_30 != 0" identifier != number_literal) )) (compound_statement "{\n              FUN_0002f640();\n            }" { (expression_statement "FUN_0002f640();" (call_expression "FUN_0002f640()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" * (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" ( (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) + number_literal) ))))) ;) }))) })) (if_statement "if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" if (parenthesized_expression "((local_30 & 0x20) != 0)" ( (binary_expression "(local_30 & 0x20) != 0" (parenthesized_expression "(local_30 & 0x20)" ( (binary_expression "local_30 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" { (expression_statement "FUN_0005da30();" (call_expression "FUN_0005da30()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal ))) ;) (expression_statement "FUN_000370b0(0xfffffffe);" (call_expression "FUN_000370b0(0xfffffffe)" identifier (argument_list "(0xfffffffe)" ( number_literal ))) ;) })) (expression_statement "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));" (call_expression "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28))" identifier (argument_list "(local_2c,*(undefined4 *)(param_2 + 0x28))" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_00030d60();" (call_expression "FUN_00030d60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" if (parenthesized_expression "(0 < piVar3[0x1a])" ( (binary_expression "0 < piVar3[0x1a]" number_literal < (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) )) (compound_statement "{\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" { (expression_statement "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;" (assignment_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff" (pointer_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" * (cast_expression "(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" ( (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12" (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x1a]" identifier [ number_literal ]) * number_literal)) + number_literal) )))) = (binary_expression "(ushort)iVar7 & 0xff" (cast_expression "(ushort)iVar7" ( (type_descriptor "ushort" type_identifier) ) identifier) & number_literal)) ;) })) (if_statement "if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" { (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_0005e50e;" goto statement_identifier ;) })) })) (goto_statement "goto LAB_0005e530;" goto statement_identifier ;) })) (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" identifier (argument_list "(1,0)" ( number_literal , number_literal ))) ;) (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" identifier = (pointer_expression "*(int *)(param_2 + 0x18)" * (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n      return;\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nvoid __regparm3\nwindowAggStep(Parse *pParse,Window *pMWin,int csr,int bInverse,int reg,int regPartSize)\n\n{\n  ExprList *pEVar1;\n  byte bVar2;\n  Vdbe *p;\n  FuncDef *pFVar3;\n  int iVar4;\n  int p2;\n  int iVar5;\n  Op *pOVar6;\n  int iVar7;\n  CollSeq *local_30;\n  int local_2c;\n  \n  p = pParse->pVdbe;\n  if (p == (Vdbe *)0x0) {\n    p = sqlite3GetVdbe(pParse);\n  }\n  if (pMWin == (Window *)0x0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  } while( true );\n}\n\n" comment (function_definition "void __regparm3\nwindowAggStep(Parse *pParse,Window *pMWin,int csr,int bInverse,int reg,int regPartSize)\n\n{\n  ExprList *pEVar1;\n  byte bVar2;\n  Vdbe *p;\n  FuncDef *pFVar3;\n  int iVar4;\n  int p2;\n  int iVar5;\n  Op *pOVar6;\n  int iVar7;\n  CollSeq *local_30;\n  int local_2c;\n  \n  p = pParse->pVdbe;\n  if (p == (Vdbe *)0x0) {\n    p = sqlite3GetVdbe(pParse);\n  }\n  if (pMWin == (Window *)0x0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "windowAggStep(Parse *pParse,Window *pMWin,int csr,int bInverse,int reg,int regPartSize)" identifier (parameter_list "(Parse *pParse,Window *pMWin,int csr,int bInverse,int reg,int regPartSize)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "Window *pMWin" type_identifier (pointer_declarator "*pMWin" * identifier)) , (parameter_declaration "int csr" primitive_type identifier) , (parameter_declaration "int bInverse" primitive_type identifier) , (parameter_declaration "int reg" primitive_type identifier) , (parameter_declaration "int regPartSize" primitive_type identifier) ))) (compound_statement "{\n  ExprList *pEVar1;\n  byte bVar2;\n  Vdbe *p;\n  FuncDef *pFVar3;\n  int iVar4;\n  int p2;\n  int iVar5;\n  Op *pOVar6;\n  int iVar7;\n  CollSeq *local_30;\n  int local_2c;\n  \n  p = pParse->pVdbe;\n  if (p == (Vdbe *)0x0) {\n    p = sqlite3GetVdbe(pParse);\n  }\n  if (pMWin == (Window *)0x0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  } while( true );\n}" { (declaration "ExprList *pEVar1;" type_identifier (pointer_declarator "*pEVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "Vdbe *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "FuncDef *pFVar3;" type_identifier (pointer_declarator "*pFVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int p2;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "Op *pOVar6;" type_identifier (pointer_declarator "*pOVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "CollSeq *local_30;" type_identifier (pointer_declarator "*local_30" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "p = pParse->pVdbe;" (assignment_expression "p = pParse->pVdbe" identifier = (field_expression "pParse->pVdbe" identifier -> field_identifier)) ;) (if_statement "if (p == (Vdbe *)0x0) {\n    p = sqlite3GetVdbe(pParse);\n  }" if (parenthesized_expression "(p == (Vdbe *)0x0)" ( (binary_expression "p == (Vdbe *)0x0" identifier == (cast_expression "(Vdbe *)0x0" ( (type_descriptor "Vdbe *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p = sqlite3GetVdbe(pParse);\n  }" { (expression_statement "p = sqlite3GetVdbe(pParse);" (assignment_expression "p = sqlite3GetVdbe(pParse)" identifier = (call_expression "sqlite3GetVdbe(pParse)" identifier (argument_list "(pParse)" ( identifier )))) ;) })) (if_statement "if (pMWin == (Window *)0x0) {\n    return;\n  }" if (parenthesized_expression "(pMWin == (Window *)0x0)" ( (binary_expression "pMWin == (Window *)0x0" identifier == (cast_expression "(Window *)0x0" ( (type_descriptor "Window *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0005e53b:\n  do {\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    pFVar3 = pMWin->pFunc;\n    local_30 = (CollSeq *)pFVar3->funcFlags;\n    pEVar1 = (pMWin->pOwner->x).pList;\n    if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }\nLAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }\n    pMWin = pMWin->pNextWin;\n    if (pMWin == (Window *)0x0) {\n      return;\n    }\n  }" { (expression_statement "pFVar3 = pMWin->pFunc;" (assignment_expression "pFVar3 = pMWin->pFunc" identifier = (field_expression "pMWin->pFunc" identifier -> field_identifier)) ;) (expression_statement "local_30 = (CollSeq *)pFVar3->funcFlags;" (assignment_expression "local_30 = (CollSeq *)pFVar3->funcFlags" identifier = (cast_expression "(CollSeq *)pFVar3->funcFlags" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pFVar3->funcFlags" identifier -> field_identifier))) ;) (expression_statement "pEVar1 = (pMWin->pOwner->x).pList;" (assignment_expression "pEVar1 = (pMWin->pOwner->x).pList" identifier = (field_expression "(pMWin->pOwner->x).pList" (parenthesized_expression "(pMWin->pOwner->x)" ( (field_expression "pMWin->pOwner->x" (field_expression "pMWin->pOwner" identifier -> field_identifier) -> field_identifier) )) . field_identifier)) ;) (if_statement "if (pEVar1 == (ExprList *)0x0) {\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }" if (parenthesized_expression "(pEVar1 == (ExprList *)0x0)" ( (binary_expression "pEVar1 == (ExprList *)0x0" identifier == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar4 = 0;\n      if (csr < 0) goto LAB_0005e563;\n      if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (if_statement "if (csr < 0) goto LAB_0005e563;" if (parenthesized_expression "(csr < 0)" ( (binary_expression "csr < 0" identifier < number_literal) )) (goto_statement "goto LAB_0005e563;" goto statement_identifier ;)) (if_statement "if (((uint)local_30 & 0x20000) == 0) {\n        local_2c = reg;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }" if (parenthesized_expression "(((uint)local_30 & 0x20000) == 0)" ( (binary_expression "((uint)local_30 & 0x20000) == 0" (parenthesized_expression "((uint)local_30 & 0x20000)" ( (binary_expression "(uint)local_30 & 0x20000" (cast_expression "(uint)local_30" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        local_2c = reg;\n        iVar7 = 0;\n      }" { (expression_statement "local_2c = reg;" (assignment_expression "local_2c = reg" identifier = identifier) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) }) (else_clause "else {\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }" else (compound_statement "{\n        local_2c = regPartSize;\n        iVar7 = 1;\n      }" { (expression_statement "local_2c = regPartSize;" (assignment_expression "local_2c = regPartSize" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) }))) }) (else_clause "else {\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }" else (compound_statement "{\n      iVar4 = pEVar1->nExpr;\n      if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }\n    }" { (expression_statement "iVar4 = pEVar1->nExpr;" (assignment_expression "iVar4 = pEVar1->nExpr" identifier = (field_expression "pEVar1->nExpr" identifier -> field_identifier)) ;) (if_statement "if (csr < 0) {\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }" if (parenthesized_expression "(csr < 0)" ( (binary_expression "csr < 0" identifier < number_literal) )) (compound_statement "{\nLAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;\n        iVar7 = iVar4;\n      }" { (labeled_statement "LAB_0005e563:\n        local_2c = reg + pMWin->iArgCol;" statement_identifier : (expression_statement "local_2c = reg + pMWin->iArgCol;" (assignment_expression "local_2c = reg + pMWin->iArgCol" identifier = (binary_expression "reg + pMWin->iArgCol" identifier + (field_expression "pMWin->iArgCol" identifier -> field_identifier))) ;)) (expression_statement "iVar7 = iVar4;" (assignment_expression "iVar7 = iVar4" identifier = identifier) ;) }) (else_clause "else {\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }" else (compound_statement "{\n        iVar7 = 0;\n        if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }\n        local_30 = (CollSeq *)pFVar3->funcFlags;\n        local_2c = reg;\n        iVar7 = iVar4;\n      }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (iVar4 < 1) {\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }" if (parenthesized_expression "(iVar4 < 1)" ( (binary_expression "iVar4 < 1" identifier < number_literal) )) (compound_statement "{\n          if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }" { (if_statement "if (((uint)local_30 & 0x20000) != 0) {\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" if (parenthesized_expression "(((uint)local_30 & 0x20000) != 0)" ( (binary_expression "((uint)local_30 & 0x20000) != 0" (parenthesized_expression "((uint)local_30 & 0x20000)" ( (binary_expression "(uint)local_30 & 0x20000" (cast_expression "(uint)local_30" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n            if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" { (if_statement "if (iVar4 == 0) {\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n              local_2c = regPartSize;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" { (expression_statement "local_2c = regPartSize;" (assignment_expression "local_2c = regPartSize" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0005e893;" goto statement_identifier ;) })) }) (else_clause "else {\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }" else (compound_statement "{\n          do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);\n          if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }\n          pFVar3 = pMWin->pFunc;\n        }" { (do_statement "do {\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          } while (iVar7 != iVar4);" do (compound_statement "{\n            iVar5 = reg + iVar7;\n            p2 = pMWin->iArgCol + iVar7;\n            iVar7 = iVar7 + 1;\n            sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);\n          }" { (expression_statement "iVar5 = reg + iVar7;" (assignment_expression "iVar5 = reg + iVar7" identifier = (binary_expression "reg + iVar7" identifier + identifier)) ;) (expression_statement "p2 = pMWin->iArgCol + iVar7;" (assignment_expression "p2 = pMWin->iArgCol + iVar7" identifier = (binary_expression "pMWin->iArgCol + iVar7" (field_expression "pMWin->iArgCol" identifier -> field_identifier) + identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5);" (call_expression "sqlite3VdbeAddOp3(p,0x5a,csr,p2,iVar5)" identifier (argument_list "(p,0x5a,csr,p2,iVar5)" ( identifier , number_literal , identifier , identifier , identifier ))) ;) }) while (parenthesized_expression "(iVar7 != iVar4)" ( (binary_expression "iVar7 != iVar4" identifier != identifier) )) ;) (if_statement "if (((uint)local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }" if (parenthesized_expression "(((uint)local_30 & 0x20000) != 0)" ( (binary_expression "((uint)local_30 & 0x20000) != 0" (parenthesized_expression "((uint)local_30 & 0x20000)" ( (binary_expression "(uint)local_30 & 0x20000" (cast_expression "(uint)local_30" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0005e893:\n            iVar7 = iVar4 + 1;\n            sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);\n            pFVar3 = pMWin->pFunc;\n            local_30 = (CollSeq *)pFVar3->funcFlags;\n            local_2c = reg;\n            goto LAB_0005e56e;\n          }" { (labeled_statement "LAB_0005e893:\n            iVar7 = iVar4 + 1;" statement_identifier : (expression_statement "iVar7 = iVar4 + 1;" (assignment_expression "iVar7 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;)) (expression_statement "sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0);" (call_expression "sqlite3VdbeAddOp3(p,0x4f,regPartSize,iVar4 + reg,0)" identifier (argument_list "(p,0x4f,regPartSize,iVar4 + reg,0)" ( identifier , number_literal , identifier , (binary_expression "iVar4 + reg" identifier + identifier) , number_literal ))) ;) (expression_statement "pFVar3 = pMWin->pFunc;" (assignment_expression "pFVar3 = pMWin->pFunc" identifier = (field_expression "pMWin->pFunc" identifier -> field_identifier)) ;) (expression_statement "local_30 = (CollSeq *)pFVar3->funcFlags;" (assignment_expression "local_30 = (CollSeq *)pFVar3->funcFlags" identifier = (cast_expression "(CollSeq *)pFVar3->funcFlags" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pFVar3->funcFlags" identifier -> field_identifier))) ;) (expression_statement "local_2c = reg;" (assignment_expression "local_2c = reg" identifier = identifier) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (expression_statement "pFVar3 = pMWin->pFunc;" (assignment_expression "pFVar3 = pMWin->pFunc" identifier = (field_expression "pMWin->pFunc" identifier -> field_identifier)) ;) }))) (expression_statement "local_30 = (CollSeq *)pFVar3->funcFlags;" (assignment_expression "local_30 = (CollSeq *)pFVar3->funcFlags" identifier = (cast_expression "(CollSeq *)pFVar3->funcFlags" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pFVar3->funcFlags" identifier -> field_identifier))) ;) (expression_statement "local_2c = reg;" (assignment_expression "local_2c = reg" identifier = identifier) ;) (expression_statement "iVar7 = iVar4;" (assignment_expression "iVar7 = iVar4" identifier = identifier) ;) }))) }))) (labeled_statement "LAB_0005e56e:\n    if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }" statement_identifier : (if_statement "if ((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')) {\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }\n    else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }" if (parenthesized_expression "((((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W'))" ( (binary_expression "(((uint)local_30 & 0x1000) == 0) || (pMWin->eStart == 'W')" (parenthesized_expression "(((uint)local_30 & 0x1000) == 0)" ( (binary_expression "((uint)local_30 & 0x1000) == 0" (parenthesized_expression "((uint)local_30 & 0x1000)" ( (binary_expression "(uint)local_30 & 0x1000" (cast_expression "(uint)local_30" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "(pMWin->eStart == 'W')" ( (binary_expression "pMWin->eStart == 'W'" (field_expression "pMWin->eStart" identifier -> field_identifier) == (char_literal "'W'" ' character ')) ))) )) (compound_statement "{\n      if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }\n      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }\n    }" { (if_statement "if (pMWin->regApp != 0) {\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }" if (parenthesized_expression "(pMWin->regApp != 0)" ( (binary_expression "pMWin->regApp != 0" (field_expression "pMWin->regApp" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);\n        pMWin = pMWin->pNextWin;\n        if (pMWin == (Window *)0x0) {\n          return;\n        }\n        goto LAB_0005e53b;\n      }" { (expression_statement "sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0);" (call_expression "sqlite3VdbeAddOp3(p,0x53,(pMWin->regApp + 1) - bInverse,1,0)" identifier (argument_list "(p,0x53,(pMWin->regApp + 1) - bInverse,1,0)" ( identifier , number_literal , (binary_expression "(pMWin->regApp + 1) - bInverse" (parenthesized_expression "(pMWin->regApp + 1)" ( (binary_expression "pMWin->regApp + 1" (field_expression "pMWin->regApp" identifier -> field_identifier) + number_literal) )) - identifier) , number_literal , number_literal ))) ;) (expression_statement "pMWin = pMWin->pNextWin;" (assignment_expression "pMWin = pMWin->pNextWin" identifier = (field_expression "pMWin->pNextWin" identifier -> field_identifier)) ;) (if_statement "if (pMWin == (Window *)0x0) {\n          return;\n        }" if (parenthesized_expression "(pMWin == (Window *)0x0)" ( (binary_expression "pMWin == (Window *)0x0" identifier == (cast_expression "(Window *)0x0" ( (type_descriptor "Window *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0005e53b;" goto statement_identifier ;) })) (if_statement "if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }" if (parenthesized_expression "((pFVar3->zName != "lag") && (pFVar3->zName != "lead"))" ( (binary_expression "(pFVar3->zName != "lag") && (pFVar3->zName != "lead")" (parenthesized_expression "(pFVar3->zName != "lag")" ( (binary_expression "pFVar3->zName != "lag"" (field_expression "pFVar3->zName" identifier -> field_identifier) != (string_literal ""lag"" " string_content ")) )) && (parenthesized_expression "(pFVar3->zName != "lead")" ( (binary_expression "pFVar3->zName != "lead"" (field_expression "pFVar3->zName" identifier -> field_identifier) != (string_literal ""lead"" " string_content ")) ))) )) (compound_statement "{\n        iVar4 = 0;\n        if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }\n        if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }\n        sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);\n        sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);\n        if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }\n      }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (if_statement "if (pMWin->pFilter != (Expr *)0x0) {\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }" if (parenthesized_expression "(pMWin->pFilter != (Expr *)0x0)" ( (binary_expression "pMWin->pFilter != (Expr *)0x0" (field_expression "pMWin->pFilter" identifier -> field_identifier) != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n        }" { (if_statement "if (csr < 1) {\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }\n          else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }" if (parenthesized_expression "(csr < 1)" ( (binary_expression "csr < 1" identifier < number_literal) )) (compound_statement "{\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }" { (expression_statement "iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1);" (assignment_expression "iVar4 = sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1)" identifier = (call_expression "sqlite3VdbeAddOp3(p,0x14,local_2c + iVar7,0,1)" identifier (argument_list "(p,0x14,local_2c + iVar7,0,1)" ( identifier , number_literal , (binary_expression "local_2c + iVar7" identifier + identifier) , number_literal , number_literal )))) ;) (expression_statement "local_30 = (CollSeq *)pMWin->pFunc->funcFlags;" (assignment_expression "local_30 = (CollSeq *)pMWin->pFunc->funcFlags" identifier = (cast_expression "(CollSeq *)pMWin->pFunc->funcFlags" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pMWin->pFunc->funcFlags" (field_expression "pMWin->pFunc" identifier -> field_identifier) -> field_identifier))) ;) }) (else_clause "else {\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }" else (compound_statement "{\n            if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }\n            sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);\n            iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);\n            if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }\n            local_30 = (CollSeq *)pMWin->pFunc->funcFlags;\n          }" { (if_statement "if (pParse->nTempReg == '\0') {\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }\n            else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }" if (parenthesized_expression "(pParse->nTempReg == '\0')" ( (binary_expression "pParse->nTempReg == '\0'" (field_expression "pParse->nTempReg" identifier -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              local_30 = (CollSeq *)(pParse->nMem + 1);\n              pParse->nMem = (int)local_30;\n            }" { (expression_statement "local_30 = (CollSeq *)(pParse->nMem + 1);" (assignment_expression "local_30 = (CollSeq *)(pParse->nMem + 1)" identifier = (cast_expression "(CollSeq *)(pParse->nMem + 1)" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pParse->nMem + 1)" ( (binary_expression "pParse->nMem + 1" (field_expression "pParse->nMem" identifier -> field_identifier) + number_literal) )))) ;) (expression_statement "pParse->nMem = (int)local_30;" (assignment_expression "pParse->nMem = (int)local_30" (field_expression "pParse->nMem" identifier -> field_identifier) = (cast_expression "(int)local_30" ( (type_descriptor "int" primitive_type) ) identifier)) ;) }) (else_clause "else {\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }" else (compound_statement "{\n              bVar2 = pParse->nTempReg - 1;\n              pParse->nTempReg = bVar2;\n              local_30 = (CollSeq *)pParse->aTempReg[bVar2];\n            }" { (expression_statement "bVar2 = pParse->nTempReg - 1;" (assignment_expression "bVar2 = pParse->nTempReg - 1" identifier = (binary_expression "pParse->nTempReg - 1" (field_expression "pParse->nTempReg" identifier -> field_identifier) - number_literal)) ;) (expression_statement "pParse->nTempReg = bVar2;" (assignment_expression "pParse->nTempReg = bVar2" (field_expression "pParse->nTempReg" identifier -> field_identifier) = identifier) ;) (expression_statement "local_30 = (CollSeq *)pParse->aTempReg[bVar2];" (assignment_expression "local_30 = (CollSeq *)pParse->aTempReg[bVar2]" identifier = (cast_expression "(CollSeq *)pParse->aTempReg[bVar2]" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "pParse->aTempReg[bVar2]" (field_expression "pParse->aTempReg" identifier -> field_identifier) [ identifier ]))) ;) }))) (expression_statement "sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30);" (call_expression "sqlite3VdbeAddOp3(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30)" identifier (argument_list "(p,0x5a,csr,pMWin->iArgCol + iVar7,(int)local_30)" ( identifier , number_literal , identifier , (binary_expression "pMWin->iArgCol + iVar7" (field_expression "pMWin->iArgCol" identifier -> field_identifier) + identifier) , (cast_expression "(int)local_30" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) (expression_statement "iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1);" (assignment_expression "iVar4 = sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1)" identifier = (call_expression "sqlite3VdbeAddOp3(p,0x14,(int)local_30,0,1)" identifier (argument_list "(p,0x14,(int)local_30,0,1)" ( identifier , number_literal , (cast_expression "(int)local_30" ( (type_descriptor "int" primitive_type) ) identifier) , number_literal , number_literal )))) ;) (if_statement "if (local_30 != (CollSeq *)0x0) {\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }" if (parenthesized_expression "(local_30 != (CollSeq *)0x0)" ( (binary_expression "local_30 != (CollSeq *)0x0" identifier != (cast_expression "(CollSeq *)0x0" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              sqlite3ReleaseTempReg(pParse,(int)local_30);\n            }" { (expression_statement "sqlite3ReleaseTempReg(pParse,(int)local_30);" (call_expression "sqlite3ReleaseTempReg(pParse,(int)local_30)" identifier (argument_list "(pParse,(int)local_30)" ( identifier , (cast_expression "(int)local_30" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) })) (expression_statement "local_30 = (CollSeq *)pMWin->pFunc->funcFlags;" (assignment_expression "local_30 = (CollSeq *)pMWin->pFunc->funcFlags" identifier = (cast_expression "(CollSeq *)pMWin->pFunc->funcFlags" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pMWin->pFunc->funcFlags" (field_expression "pMWin->pFunc" identifier -> field_identifier) -> field_identifier))) ;) }))) })) (if_statement "if (((uint)local_30 & 0x20) != 0) {\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }" if (parenthesized_expression "(((uint)local_30 & 0x20) != 0)" ( (binary_expression "((uint)local_30 & 0x20) != 0" (parenthesized_expression "((uint)local_30 & 0x20)" ( (binary_expression "(uint)local_30 & 0x20" (cast_expression "(uint)local_30" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);\n          if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }\n          iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);\n          sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);\n        }" { (expression_statement "local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr);" (assignment_expression "local_30 = sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr)" identifier = (call_expression "sqlite3ExprCollSeq(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr)" identifier (argument_list "(pParse,((pMWin->pOwner->x).pList)->a[0].pExpr)" ( identifier , (field_expression "((pMWin->pOwner->x).pList)->a[0].pExpr" (subscript_expression "((pMWin->pOwner->x).pList)->a[0]" (field_expression "((pMWin->pOwner->x).pList)->a" (parenthesized_expression "((pMWin->pOwner->x).pList)" ( (field_expression "(pMWin->pOwner->x).pList" (parenthesized_expression "(pMWin->pOwner->x)" ( (field_expression "pMWin->pOwner->x" (field_expression "pMWin->pOwner" identifier -> field_identifier) -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ]) . field_identifier) )))) ;) (if_statement "if (local_30 == (CollSeq *)0x0) {\n            local_30 = pParse->db->pDfltColl;\n          }" if (parenthesized_expression "(local_30 == (CollSeq *)0x0)" ( (binary_expression "local_30 == (CollSeq *)0x0" identifier == (cast_expression "(CollSeq *)0x0" ( (type_descriptor "CollSeq *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            local_30 = pParse->db->pDfltColl;\n          }" { (expression_statement "local_30 = pParse->db->pDfltColl;" (assignment_expression "local_30 = pParse->db->pDfltColl" identifier = (field_expression "pParse->db->pDfltColl" (field_expression "pParse->db" identifier -> field_identifier) -> field_identifier)) ;) })) (expression_statement "iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0);" (assignment_expression "iVar5 = sqlite3VdbeAddOp3(p,0x52,0,0,0)" identifier = (call_expression "sqlite3VdbeAddOp3(p,0x52,0,0,0)" identifier (argument_list "(p,0x52,0,0,0)" ( identifier , number_literal , number_literal , number_literal , number_literal )))) ;) (expression_statement "sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2);" (call_expression "sqlite3VdbeChangeP4(p,iVar5,(char *)local_30,-2)" identifier (argument_list "(p,iVar5,(char *)local_30,-2)" ( identifier , identifier , (cast_expression "(char *)local_30" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal ))) ;) })) (expression_statement "sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum);" (call_expression "sqlite3VdbeAddOp3(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum)" identifier (argument_list "(p,~-(uint)(bInverse == 0) + 0x9a,bInverse,local_2c,pMWin->regAccum)" ( identifier , (binary_expression "~-(uint)(bInverse == 0) + 0x9a" (unary_expression "~-(uint)(bInverse == 0)" ~ (unary_expression "-(uint)(bInverse == 0)" - (call_expression "(uint)(bInverse == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bInverse == 0)" ( (binary_expression "bInverse == 0" identifier == number_literal) ))))) + number_literal) , identifier , identifier , (field_expression "pMWin->regAccum" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3VdbeAppendP4(p,pMWin->pFunc,-8);" (call_expression "sqlite3VdbeAppendP4(p,pMWin->pFunc,-8)" identifier (argument_list "(p,pMWin->pFunc,-8)" ( identifier , (field_expression "pMWin->pFunc" identifier -> field_identifier) , number_literal ))) ;) (if_statement "if (0 < p->nOp) {\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }" if (parenthesized_expression "(0 < p->nOp)" ( (binary_expression "0 < p->nOp" number_literal < (field_expression "p->nOp" identifier -> field_identifier)) )) (compound_statement "{\n          p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;\n        }" { (expression_statement "p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff;" (assignment_expression "p->aOp[p->nOp + -1].p5 = (ushort)iVar7 & 0xff" (field_expression "p->aOp[p->nOp + -1].p5" (subscript_expression "p->aOp[p->nOp + -1]" (field_expression "p->aOp" identifier -> field_identifier) [ (binary_expression "p->nOp + -1" (field_expression "p->nOp" identifier -> field_identifier) + number_literal) ]) . field_identifier) = (binary_expression "(ushort)iVar7 & 0xff" (cast_expression "(ushort)iVar7" ( (type_descriptor "ushort" type_identifier) ) identifier) & number_literal)) ;) })) (if_statement "if (iVar4 != 0) {\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar7 = p->nOp;\n          goto LAB_0005e50e;\n        }" { (expression_statement "iVar7 = p->nOp;" (assignment_expression "iVar7 = p->nOp" identifier = (field_expression "p->nOp" identifier -> field_identifier)) ;) (goto_statement "goto LAB_0005e50e;" goto statement_identifier ;) })) })) }) (else_clause "else {\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }" else (compound_statement "{\n      iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);\n      if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar7;\n      iVar7 = p->nOp;\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }\n      pOVar6 = (Op *)&dummy_22864;\n      if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }\n      pOVar6->p2 = iVar7;\n    }" { (expression_statement "iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0);" (assignment_expression "iVar4 = sqlite3VdbeAddOp3(p,0x32,local_2c,0,0)" identifier = (call_expression "sqlite3VdbeAddOp3(p,0x32,local_2c,0,0)" identifier (argument_list "(p,0x32,local_2c,0,0)" ( identifier , number_literal , identifier , number_literal , number_literal )))) ;) (if_statement "if (bInverse == 0) {\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }\n      else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }" if (parenthesized_expression "(bInverse == 0)" ( (binary_expression "bInverse == 0" identifier == number_literal) )) (compound_statement "{\n        sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);\n        sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);\n        sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);\n        sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);\n        iVar7 = DAT_0014c564;\n      }" { (expression_statement "sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0);" (call_expression "sqlite3VdbeAddOp3(p,0x53,pMWin->regApp + 1,1,0)" identifier (argument_list "(p,0x53,pMWin->regApp + 1,1,0)" ( identifier , number_literal , (binary_expression "pMWin->regApp + 1" (field_expression "pMWin->regApp" identifier -> field_identifier) + number_literal) , number_literal , number_literal ))) ;) (expression_statement "sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0);" (call_expression "sqlite3VdbeAddOp3(p,0x4f,local_2c,pMWin->regApp,0)" identifier (argument_list "(p,0x4f,local_2c,pMWin->regApp,0)" ( identifier , number_literal , identifier , (field_expression "pMWin->regApp" identifier -> field_identifier) , number_literal ))) ;) (expression_statement "sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2);" (call_expression "sqlite3VdbeAddOp3(p,0x66,pMWin->regApp,2,pMWin->regApp + 2)" identifier (argument_list "(p,0x66,pMWin->regApp,2,pMWin->regApp + 2)" ( identifier , number_literal , (field_expression "pMWin->regApp" identifier -> field_identifier) , number_literal , (binary_expression "pMWin->regApp + 2" (field_expression "pMWin->regApp" identifier -> field_identifier) + number_literal) ))) ;) (expression_statement "sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0);" (call_expression "sqlite3VdbeAddOp3(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0)" identifier (argument_list "(p,0x84,pMWin->csrApp,pMWin->regApp + 2,0)" ( identifier , number_literal , (field_expression "pMWin->csrApp" identifier -> field_identifier) , (binary_expression "pMWin->regApp + 2" (field_expression "pMWin->regApp" identifier -> field_identifier) + number_literal) , number_literal ))) ;) (expression_statement "iVar7 = DAT_0014c564;" (assignment_expression "iVar7 = DAT_0014c564" identifier = identifier) ;) }) (else_clause "else {\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }" else (compound_statement "{\n        sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);\n        sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);\n        iVar7 = p->nOp;\n        iVar5 = iVar7 + -2;\n        if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }\n        if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }\n      }" { (expression_statement "sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1);" (call_expression "sqlite3VdbeAddOp4Int(p,0x18,pMWin->csrApp,0,local_2c,1)" identifier (argument_list "(p,0x18,pMWin->csrApp,0,local_2c,1)" ( identifier , number_literal , (field_expression "pMWin->csrApp" identifier -> field_identifier) , number_literal , identifier , number_literal ))) ;) (expression_statement "sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0);" (call_expression "sqlite3VdbeAddOp3(p,0x7b,pMWin->csrApp,0,0)" identifier (argument_list "(p,0x7b,pMWin->csrApp,0,0)" ( identifier , number_literal , (field_expression "pMWin->csrApp" identifier -> field_identifier) , number_literal , number_literal ))) ;) (expression_statement "iVar7 = p->nOp;" (assignment_expression "iVar7 = p->nOp" identifier = (field_expression "p->nOp" identifier -> field_identifier)) ;) (expression_statement "iVar5 = iVar7 + -2;" (assignment_expression "iVar5 = iVar7 + -2" identifier = (binary_expression "iVar7 + -2" identifier + number_literal)) ;) (if_statement "if (iVar7 + -2 < 0) {\n          iVar5 = iVar7 + -1;\n        }" if (parenthesized_expression "(iVar7 + -2 < 0)" ( (binary_expression "iVar7 + -2 < 0" (binary_expression "iVar7 + -2" identifier + number_literal) < number_literal) )) (compound_statement "{\n          iVar5 = iVar7 + -1;\n        }" { (expression_statement "iVar5 = iVar7 + -1;" (assignment_expression "iVar5 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) })) (if_statement "if (p->db->mallocFailed == '\0') {\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }" if (parenthesized_expression "(p->db->mallocFailed == '\0')" ( (binary_expression "p->db->mallocFailed == '\0'" (field_expression "p->db->mallocFailed" (field_expression "p->db" identifier -> field_identifier) -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          p->aOp[iVar5].p2 = iVar7;\n          iVar7 = DAT_0014c564;\n        }" { (expression_statement "p->aOp[iVar5].p2 = iVar7;" (assignment_expression "p->aOp[iVar5].p2 = iVar7" (field_expression "p->aOp[iVar5].p2" (subscript_expression "p->aOp[iVar5]" (field_expression "p->aOp" identifier -> field_identifier) [ identifier ]) . field_identifier) = identifier) ;) (expression_statement "iVar7 = DAT_0014c564;" (assignment_expression "iVar7 = DAT_0014c564" identifier = identifier) ;) })) }))) (expression_statement "DAT_0014c564 = iVar7;" (assignment_expression "DAT_0014c564 = iVar7" identifier = identifier) ;) (expression_statement "iVar7 = p->nOp;" (assignment_expression "iVar7 = p->nOp" identifier = (field_expression "p->nOp" identifier -> field_identifier)) ;) (labeled_statement "LAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }" statement_identifier : (if_statement "if (iVar4 < 0) {\n        iVar4 = iVar7 + -1;\n      }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n        iVar4 = iVar7 + -1;\n      }" { (expression_statement "iVar4 = iVar7 + -1;" (assignment_expression "iVar4 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) }))) (expression_statement "pOVar6 = (Op *)&dummy_22864;" (assignment_expression "pOVar6 = (Op *)&dummy_22864" identifier = (cast_expression "(Op *)&dummy_22864" ( (type_descriptor "Op *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&dummy_22864" & identifier))) ;) (if_statement "if (p->db->mallocFailed == '\0') {\n        pOVar6 = p->aOp + iVar4;\n      }" if (parenthesized_expression "(p->db->mallocFailed == '\0')" ( (binary_expression "p->db->mallocFailed == '\0'" (field_expression "p->db->mallocFailed" (field_expression "p->db" identifier -> field_identifier) -> field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        pOVar6 = p->aOp + iVar4;\n      }" { (expression_statement "pOVar6 = p->aOp + iVar4;" (assignment_expression "pOVar6 = p->aOp + iVar4" identifier = (binary_expression "p->aOp + iVar4" (field_expression "p->aOp" identifier -> field_identifier) + identifier)) ;) })) (expression_statement "pOVar6->p2 = iVar7;" (assignment_expression "pOVar6->p2 = iVar7" (field_expression "pOVar6->p2" identifier -> field_identifier) = identifier) ;) })))) (expression_statement "pMWin = pMWin->pNextWin;" (assignment_expression "pMWin = pMWin->pNextWin" identifier = (field_expression "pMWin->pNextWin" identifier -> field_identifier)) ;) (if_statement "if (pMWin == (Window *)0x0) {\n      return;\n    }" if (parenthesized_expression "(pMWin == (Window *)0x0)" ( (binary_expression "pMWin == (Window *)0x0" identifier == (cast_expression "(Window *)0x0" ( (type_descriptor "Window *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "void __regparm3\nFUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)\n\n{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}\n\n" (function_definition "void __regparm3\nFUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)\n\n{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" identifier (parameter_list "(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "int param_6" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined1 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "piVar3 = *(int **)(param_1 + 8);" (assignment_expression "piVar3 = *(int **)(param_1 + 8)" identifier = (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    piVar3 = (int *)FUN_000498b0();\n  }" { (expression_statement "piVar3 = (int *)FUN_000498b0();" (assignment_expression "piVar3 = (int *)FUN_000498b0()" identifier = (cast_expression "(int *)FUN_000498b0()" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000498b0()" identifier (argument_list "()" ( ))))) ;) })) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (labeled_statement "LAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" statement_identifier : (do_statement "do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" do (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);" (assignment_expression "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14)" identifier = (pointer_expression "*(int **)(*(int *)(param_2 + 0x3c) + 0x14)" * (cast_expression "(int **)(*(int *)(param_2 + 0x3c) + 0x14)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_2 + 0x3c) + 0x14)" ( (binary_expression "*(int *)(param_2 + 0x3c) + 0x14" (pointer_expression "*(int *)(param_2 + 0x3c)" * (cast_expression "(int *)(param_2 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x3c)" ( (binary_expression "param_2 + 0x3c" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" if (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 < 0) goto LAB_0005e563;" if (parenthesized_expression "(param_3 < 0)" ( (binary_expression "param_3 < 0" identifier < number_literal) )) (goto_statement "goto LAB_0005e563;" goto statement_identifier ;)) (if_statement "if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" if (parenthesized_expression "((local_30 & 0x20000) == 0)" ( (binary_expression "(local_30 & 0x20000) == 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        local_2c = param_5;\n        iVar7 = 0;\n      }" { (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) }) (else_clause "else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" else (compound_statement "{\n        local_2c = param_6;\n        iVar7 = 1;\n      }" { (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) }))) }) (else_clause "else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" else (compound_statement "{\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" { (expression_statement "iVar8 = *piVar1;" (assignment_expression "iVar8 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" if (parenthesized_expression "(param_3 < 0)" ( (binary_expression "param_3 < 0" identifier < number_literal) )) (compound_statement "{\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }" { (labeled_statement "LAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);" statement_identifier : (expression_statement "local_2c = param_5 + *(int *)(param_2 + 0x44);" (assignment_expression "local_2c = param_5 + *(int *)(param_2 + 0x44)" identifier = (binary_expression "param_5 + *(int *)(param_2 + 0x44)" identifier + (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))))) ;)) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" identifier = identifier) ;) }) (else_clause "else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" else (compound_statement "{\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" if (parenthesized_expression "(iVar8 < 1)" ( (binary_expression "iVar8 < 1" identifier < number_literal) )) (compound_statement "{\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }" { (if_statement "if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" if (parenthesized_expression "((local_30 & 0x20000) != 0)" ( (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" { (if_statement "if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (compound_statement "{\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" { (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" identifier = identifier) ;) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (goto_statement "goto LAB_0005e893;" goto statement_identifier ;) })) }) (else_clause "else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" else (compound_statement "{\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" { (do_statement "do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);" do (compound_statement "{\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          }" { (expression_statement "iVar4 = param_5 + iVar7;" (assignment_expression "iVar4 = param_5 + iVar7" identifier = (binary_expression "param_5 + iVar7" identifier + identifier)) ;) (expression_statement "iVar5 = *(int *)(param_2 + 0x44) + iVar7;" (assignment_expression "iVar5 = *(int *)(param_2 + 0x44) + iVar7" identifier = (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))) + identifier)) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "FUN_000497a0(iVar5,iVar4);" (call_expression "FUN_000497a0(iVar5,iVar4)" identifier (argument_list "(iVar5,iVar4)" ( identifier , identifier ))) ;) }) while (parenthesized_expression "(iVar7 != iVar8)" ( (binary_expression "iVar7 != iVar8" identifier != identifier) )) ;) (if_statement "if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" if (parenthesized_expression "((local_30 & 0x20000) != 0)" ( (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" ( (binary_expression "local_30 & 0x20000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" { (labeled_statement "LAB_0005e893:\n            iVar7 = iVar8 + 1;" statement_identifier : (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;)) (expression_statement "FUN_000497a0(iVar8 + param_5,0);" (call_expression "FUN_000497a0(iVar8 + param_5,0)" identifier (argument_list "(iVar8 + param_5,0)" ( (binary_expression "iVar8 + param_5" identifier + identifier) , number_literal ))) ;) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (goto_statement "goto LAB_0005e56e;" goto statement_identifier ;) })) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" identifier = (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) ))))) ;) }))) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" identifier = (pointer_expression "*(uint *)(iVar4 + 4)" * (cast_expression "(uint *)(iVar4 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 4)" ( (binary_expression "iVar4 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" identifier = identifier) ;) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" identifier = identifier) ;) }))) }))) (labeled_statement "LAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" statement_identifier : (if_statement "if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" if (parenthesized_expression "(((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W'))" ( (binary_expression "((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')" (parenthesized_expression "((local_30 & 0x1000) != 0)" ( (binary_expression "(local_30 & 0x1000) != 0" (parenthesized_expression "(local_30 & 0x1000)" ( (binary_expression "local_30 & 0x1000" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "(*(char *)(param_2 + 0xd) != 'W')" ( (binary_expression "*(char *)(param_2 + 0xd) != 'W'" (pointer_expression "*(char *)(param_2 + 0xd)" * (cast_expression "(char *)(param_2 + 0xd)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xd)" ( (binary_expression "param_2 + 0xd" identifier + number_literal) )))) != (char_literal "'W'" ' character ')) ))) )) (compound_statement "{\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" { (expression_statement "iVar4 = FUN_000497a0(0,0);" (assignment_expression "iVar4 = FUN_000497a0(0,0)" identifier = (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal )))) ;) (if_statement "if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }" { (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" identifier (argument_list "(1,0)" ( number_literal , number_literal ))) ;) (expression_statement "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);" (call_expression "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0)" identifier (argument_list "(*(undefined4 *)(param_2 + 0x34),0)" ( (pointer_expression "*(undefined4 *)(param_2 + 0x34)" * (cast_expression "(undefined4 *)(param_2 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) , number_literal ))) ;) (expression_statement "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);" (call_expression "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2)" identifier (argument_list "(2,*(int *)(param_2 + 0x34) + 2)" ( number_literal , (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) + number_literal) ))) ;) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0)" identifier (argument_list "(*(int *)(param_2 + 0x34) + 2,0)" ( (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) + number_literal) , number_literal ))) ;) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" identifier = identifier) ;) }) (else_clause "else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" else (compound_statement "{\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" { (expression_statement "FUN_00049940(0,local_2c,1);" (call_expression "FUN_00049940(0,local_2c,1)" identifier (argument_list "(0,local_2c,1)" ( number_literal , identifier , number_literal ))) ;) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal ))) ;) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (expression_statement "iVar7 = iVar8 + -2;" (assignment_expression "iVar7 = iVar8 + -2" identifier = (binary_expression "iVar8 + -2" identifier + number_literal)) ;) (if_statement "if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }" if (parenthesized_expression "(iVar8 + -2 < 0)" ( (binary_expression "iVar8 + -2 < 0" (binary_expression "iVar8 + -2" identifier + number_literal) < number_literal) )) (compound_statement "{\n          iVar7 = iVar8 + -1;\n        }" { (expression_statement "iVar7 = iVar8 + -1;" (assignment_expression "iVar7 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) })) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" if (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" ( (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" * (cast_expression "(char *)(*piVar3 + 0x4d)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar3 + 0x4d)" ( (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" * identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" { (expression_statement "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;" (assignment_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8" (pointer_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" * (cast_expression "(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + iVar7 * 0x14 + 8)" ( (binary_expression "piVar3[0x19] + iVar7 * 0x14 + 8" (binary_expression "piVar3[0x19] + iVar7 * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "iVar7 * 0x14" identifier * number_literal)) + number_literal) )))) = identifier) ;) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" identifier = identifier) ;) })) }))) (expression_statement "DAT_0014c564 = iVar8;" (assignment_expression "DAT_0014c564 = iVar8" identifier = identifier) ;) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (labeled_statement "LAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" statement_identifier : (if_statement "if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" if (parenthesized_expression "(iVar4 < 0)" ( (binary_expression "iVar4 < 0" identifier < number_literal) )) (compound_statement "{\n        iVar4 = iVar8 + -1;\n      }" { (expression_statement "iVar4 = iVar8 + -1;" (assignment_expression "iVar4 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) }))) (expression_statement "puVar6 = &DAT_0014c55c;" (assignment_expression "puVar6 = &DAT_0014c55c" identifier = (pointer_expression "&DAT_0014c55c" & identifier)) ;) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" if (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" ( (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" * (cast_expression "(char *)(*piVar3 + 0x4d)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar3 + 0x4d)" ( (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" * identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" { (expression_statement "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);" (assignment_expression "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" identifier = (cast_expression "(undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + iVar4 * 0x14)" ( (binary_expression "piVar3[0x19] + iVar4 * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) )))) ;) })) (expression_statement "*(int *)(puVar6 + 8) = iVar8;" (assignment_expression "*(int *)(puVar6 + 8) = iVar8" (pointer_expression "*(int *)(puVar6 + 8)" * (cast_expression "(int *)(puVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar6 + 8)" ( (binary_expression "puVar6 + 8" identifier + number_literal) )))) = identifier) ;) (labeled_statement "LAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);" statement_identifier : (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" identifier = (pointer_expression "*(int *)(param_2 + 0x18)" * (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;)) (if_statement "if (param_2 == 0) {\n        return;\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (goto_statement "goto LAB_0005e53b;" goto statement_identifier ;) }))) (if_statement "if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x34) == 0)" ( (binary_expression "*(int *)(param_2 + 0x34) == 0" (pointer_expression "*(int *)(param_2 + 0x34)" * (cast_expression "(int *)(param_2 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x34)" ( (binary_expression "param_2 + 0x34" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" { (if_statement "if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" if (parenthesized_expression "((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8))" ( (binary_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4)" ( (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d4" (pointer_expression "*(undefined **)(iVar4 + 0x20)" * (cast_expression "(undefined **)(iVar4 + 0x20)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) )))) != (pointer_expression "&DAT_001044d4" & identifier)) )) && (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" ( (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d8" (pointer_expression "*(undefined **)(iVar4 + 0x20)" * (cast_expression "(undefined **)(iVar4 + 0x20)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar4 + 0x20)" ( (binary_expression "iVar4 + 0x20" identifier + number_literal) )))) != (pointer_expression "&DAT_001044d8" & identifier)) ))) )) (compound_statement "{\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" { (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" if (parenthesized_expression "(*(int *)(param_2 + 0x1c) != 0)" ( (binary_expression "*(int *)(param_2 + 0x1c) != 0" (pointer_expression "*(int *)(param_2 + 0x1c)" * (cast_expression "(int *)(param_2 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" { (if_statement "if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" { (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" identifier = (call_expression "FUN_000497a0(0,1)" identifier (argument_list "(0,1)" ( number_literal , number_literal )))) ;) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" * (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" ( (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" else (compound_statement "{\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" { (if_statement "if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" if (parenthesized_expression "(*(char *)(param_1 + 0x13) == '\0')" ( (binary_expression "*(char *)(param_1 + 0x13) == '\0'" (pointer_expression "*(char *)(param_1 + 0x13)" * (cast_expression "(char *)(param_1 + 0x13)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }" { (expression_statement "local_30 = *(int *)(param_1 + 0x2c) + 1;" (assignment_expression "local_30 = *(int *)(param_1 + 0x2c) + 1" identifier = (binary_expression "*(int *)(param_1 + 0x2c) + 1" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x2c) = local_30;" (assignment_expression "*(uint *)(param_1 + 0x2c) = local_30" (pointer_expression "*(uint *)(param_1 + 0x2c)" * (cast_expression "(uint *)(param_1 + 0x2c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" else (compound_statement "{\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" { (expression_statement "bVar2 = *(char *)(param_1 + 0x13) - 1;" (assignment_expression "bVar2 = *(char *)(param_1 + 0x13) - 1" identifier = (binary_expression "*(char *)(param_1 + 0x13) - 1" (pointer_expression "*(char *)(param_1 + 0x13)" * (cast_expression "(char *)(param_1 + 0x13)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) - number_literal)) ;) (expression_statement "*(byte *)(param_1 + 0x13) = bVar2;" (assignment_expression "*(byte *)(param_1 + 0x13) = bVar2" (pointer_expression "*(byte *)(param_1 + 0x13)" * (cast_expression "(byte *)(param_1 + 0x13)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x13)" ( (binary_expression "param_1 + 0x13" identifier + number_literal) )))) = identifier) ;) (expression_statement "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);" (assignment_expression "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" identifier = (pointer_expression "*(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" * (cast_expression "(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x90 + (uint)bVar2 * 4)" ( (binary_expression "param_1 + 0x90 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x90" identifier + number_literal) + (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) ))))) ;) }))) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30)" identifier (argument_list "(*(int *)(param_2 + 0x44) + iVar7,local_30)" ( (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" * (cast_expression "(int *)(param_2 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x44)" ( (binary_expression "param_2 + 0x44" identifier + number_literal) )))) + identifier) , identifier ))) ;) (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" identifier = (call_expression "FUN_000497a0(0,1)" identifier (argument_list "(0,1)" ( number_literal , number_literal )))) ;) (if_statement "if (local_30 != 0) {\n              FUN_0002f640();\n            }" if (parenthesized_expression "(local_30 != 0)" ( (binary_expression "local_30 != 0" identifier != number_literal) )) (compound_statement "{\n              FUN_0002f640();\n            }" { (expression_statement "FUN_0002f640();" (call_expression "FUN_0002f640()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" * (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" ( (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" * (cast_expression "(int *)(param_2 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x20)" ( (binary_expression "param_2 + 0x20" identifier + number_literal) )))) + number_literal) ))))) ;) }))) })) (if_statement "if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" if (parenthesized_expression "((local_30 & 0x20) != 0)" ( (binary_expression "(local_30 & 0x20) != 0" (parenthesized_expression "(local_30 & 0x20)" ( (binary_expression "local_30 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" { (expression_statement "FUN_0005da30();" (call_expression "FUN_0005da30()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" identifier (argument_list "(0,0)" ( number_literal , number_literal ))) ;) (expression_statement "FUN_000370b0(0xfffffffe);" (call_expression "FUN_000370b0(0xfffffffe)" identifier (argument_list "(0xfffffffe)" ( number_literal ))) ;) })) (expression_statement "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));" (call_expression "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28))" identifier (argument_list "(local_2c,*(undefined4 *)(param_2 + 0x28))" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_00030d60();" (call_expression "FUN_00030d60()" identifier (argument_list "()" ( ))) ;) (if_statement "if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" if (parenthesized_expression "(0 < piVar3[0x1a])" ( (binary_expression "0 < piVar3[0x1a]" number_literal < (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) )) (compound_statement "{\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" { (expression_statement "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;" (assignment_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff" (pointer_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" * (cast_expression "(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" ( (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12" (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x19]" identifier [ number_literal ]) + (binary_expression "piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x1a]" identifier [ number_literal ]) * number_literal)) + number_literal) )))) = (binary_expression "(ushort)iVar7 & 0xff" (cast_expression "(ushort)iVar7" ( (type_descriptor "ushort" type_identifier) ) identifier) & number_literal)) ;) })) (if_statement "if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" { (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" identifier = (subscript_expression "piVar3[0x1a]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_0005e50e;" goto statement_identifier ;) })) })) (goto_statement "goto LAB_0005e530;" goto statement_identifier ;) })) (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" identifier (argument_list "(1,0)" ( number_literal , number_literal ))) ;) (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" identifier = (pointer_expression "*(int *)(param_2 + 0x18)" * (cast_expression "(int *)(param_2 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (if_statement "if (param_2 == 0) {\n      return;\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (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 * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_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 IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + 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 = IDENT) ;) (goto_statement goto statement_identifier ;) })) (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 = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , (binary_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 ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT , IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (goto_statement goto statement_identifier ;) }))) (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 { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (pointer_expression & IDENT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (pointer_expression & IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = 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 { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) ))))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) })) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( LIT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) }) while (parenthesized_expression ( BOOL )) ;)) })))
(function_definition "void __regparm3\nFUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)\n\n{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0005e420(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" (identifier "FUN_0005e420") (parameter_list "(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "int param_6" (primitive_type "int") (identifier "param_6")) () ")"))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  int *piVar3;\n  int iVar4;\n  int iVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  uint local_30;\n  int local_2c;\n  \n  piVar3 = *(int **)(param_1 + 8);\n  if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }\n  if (param_2 == 0) {\n    return;\n  }\nLAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined1 *puVar6;" (type_identifier "undefined1") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "uint local_30;" (type_identifier "uint") (identifier "local_30") (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "piVar3 = *(int **)(param_1 + 8);" (assignment_expression "piVar3 = *(int **)(param_1 + 8)" (identifier "piVar3") (= "=") (pointer_expression "*(int **)(param_1 + 8)" (* "*") (cast_expression "(int **)(param_1 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (piVar3 == (int *)0x0) {\n    piVar3 = (int *)FUN_000498b0();\n  }" (if "if") (parenthesized_expression "(piVar3 == (int *)0x0)" (( "(") (binary_expression "piVar3 == (int *)0x0" (identifier "piVar3") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    piVar3 = (int *)FUN_000498b0();\n  }" ({ "{") (expression_statement "piVar3 = (int *)FUN_000498b0();" (assignment_expression "piVar3 = (int *)FUN_000498b0()" (identifier "piVar3") (= "=") (cast_expression "(int *)FUN_000498b0()" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000498b0()" (identifier "FUN_000498b0") (argument_list "()" (( "(") () ")"))))) (; ";")) (} "}"))) (if_statement "if (param_2 == 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_0005e53b:\n  do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" (statement_identifier "LAB_0005e53b") (: ":") (do_statement "do {\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  } while( true );" (do "do") (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x20);\n    local_30 = *(uint *)(iVar4 + 4);\n    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);\n    if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }\nLAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }\n    if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }\n    FUN_000497a0(1,0);\n    param_2 = *(int *)(param_2 + 0x18);\n    if (param_2 == 0) {\n      return;\n    }\n  }" ({ "{") (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" (identifier "local_30") (= "=") (pointer_expression "*(uint *)(iVar4 + 4)" (* "*") (cast_expression "(uint *)(iVar4 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);" (assignment_expression "piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(*(int *)(param_2 + 0x3c) + 0x14)" (* "*") (cast_expression "(int **)(*(int *)(param_2 + 0x3c) + 0x14)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x3c) + 0x14)" (( "(") (binary_expression "*(int *)(param_2 + 0x3c) + 0x14" (pointer_expression "*(int *)(param_2 + 0x3c)" (* "*") (cast_expression "(int *)(param_2 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x3c)" (( "(") (binary_expression "param_2 + 0x3c" (identifier "param_2") (+ "+") (number_literal "0x3c")) () ")")))) (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if (piVar1 == (int *)0x0) {\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" (if "if") (parenthesized_expression "(piVar1 == (int *)0x0)" (( "(") (binary_expression "piVar1 == (int *)0x0" (identifier "piVar1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar8 = 0;\n      if (param_3 < 0) goto LAB_0005e563;\n      if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }\n    }" ({ "{") (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_3 < 0) goto LAB_0005e563;" (if "if") (parenthesized_expression "(param_3 < 0)" (( "(") (binary_expression "param_3 < 0" (identifier "param_3") (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_0005e563;" (goto "goto") (statement_identifier "LAB_0005e563") (; ";"))) (if_statement "if ((local_30 & 0x20000) == 0) {\n        local_2c = param_5;\n        iVar7 = 0;\n      }\n      else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" (if "if") (parenthesized_expression "((local_30 & 0x20000) == 0)" (( "(") (binary_expression "(local_30 & 0x20000) == 0" (parenthesized_expression "(local_30 & 0x20000)" (( "(") (binary_expression "local_30 & 0x20000" (identifier "local_30") (& "&") (number_literal "0x20000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        local_2c = param_5;\n        iVar7 = 0;\n      }" ({ "{") (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" (identifier "local_2c") (= "=") (identifier "param_5")) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n        local_2c = param_6;\n        iVar7 = 1;\n      }" (else "else") (compound_statement "{\n        local_2c = param_6;\n        iVar7 = 1;\n      }" ({ "{") (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" (identifier "local_2c") (= "=") (identifier "param_6")) (; ";")) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" (else "else") (compound_statement "{\n      iVar8 = *piVar1;\n      if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }\n    }" ({ "{") (expression_statement "iVar8 = *piVar1;" (assignment_expression "iVar8 = *piVar1" (identifier "iVar8") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (if_statement "if (param_3 < 0) {\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }\n      else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" (if "if") (parenthesized_expression "(param_3 < 0)" (( "(") (binary_expression "param_3 < 0" (identifier "param_3") (< "<") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);\n        iVar7 = iVar8;\n      }" ({ "{") (labeled_statement "LAB_0005e563:\n        local_2c = param_5 + *(int *)(param_2 + 0x44);" (statement_identifier "LAB_0005e563") (: ":") (expression_statement "local_2c = param_5 + *(int *)(param_2 + 0x44);" (assignment_expression "local_2c = param_5 + *(int *)(param_2 + 0x44)" (identifier "local_2c") (= "=") (binary_expression "param_5 + *(int *)(param_2 + 0x44)" (identifier "param_5") (+ "+") (pointer_expression "*(int *)(param_2 + 0x44)" (* "*") (cast_expression "(int *)(param_2 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x44)" (( "(") (binary_expression "param_2 + 0x44" (identifier "param_2") (+ "+") (number_literal "0x44")) () ")")))))) (; ";"))) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" (identifier "iVar7") (= "=") (identifier "iVar8")) (; ";")) (} "}")) (else_clause "else {\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" (else "else") (compound_statement "{\n        iVar7 = 0;\n        if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }\n        local_30 = *(uint *)(iVar4 + 4);\n        local_2c = param_5;\n        iVar7 = iVar8;\n      }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar8 < 1) {\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }\n        else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" (if "if") (parenthesized_expression "(iVar8 < 1)" (( "(") (binary_expression "iVar8 < 1" (identifier "iVar8") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n          if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }\n        }" ({ "{") (if_statement "if ((local_30 & 0x20000) != 0) {\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" (if "if") (parenthesized_expression "((local_30 & 0x20000) != 0)" (( "(") (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" (( "(") (binary_expression "local_30 & 0x20000" (identifier "local_30") (& "&") (number_literal "0x20000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }\n            goto LAB_0005e893;\n          }" ({ "{") (if_statement "if (iVar8 == 0) {\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" (if "if") (parenthesized_expression "(iVar8 == 0)" (( "(") (binary_expression "iVar8 == 0" (identifier "iVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              local_2c = param_6;\n              iVar7 = 1;\n              goto LAB_0005e56e;\n            }" ({ "{") (expression_statement "local_2c = param_6;" (assignment_expression "local_2c = param_6" (identifier "local_2c") (= "=") (identifier "param_6")) (; ";")) (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_0005e56e;" (goto "goto") (statement_identifier "LAB_0005e56e") (; ";")) (} "}"))) (goto_statement "goto LAB_0005e893;" (goto "goto") (statement_identifier "LAB_0005e893") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" (else "else") (compound_statement "{\n          do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);\n          if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }\n          iVar4 = *(int *)(param_2 + 0x20);\n        }" ({ "{") (do_statement "do {\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          } while (iVar7 != iVar8);" (do "do") (compound_statement "{\n            iVar4 = param_5 + iVar7;\n            iVar5 = *(int *)(param_2 + 0x44) + iVar7;\n            iVar7 = iVar7 + 1;\n            FUN_000497a0(iVar5,iVar4);\n          }" ({ "{") (expression_statement "iVar4 = param_5 + iVar7;" (assignment_expression "iVar4 = param_5 + iVar7" (identifier "iVar4") (= "=") (binary_expression "param_5 + iVar7" (identifier "param_5") (+ "+") (identifier "iVar7"))) (; ";")) (expression_statement "iVar5 = *(int *)(param_2 + 0x44) + iVar7;" (assignment_expression "iVar5 = *(int *)(param_2 + 0x44) + iVar7" (identifier "iVar5") (= "=") (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" (* "*") (cast_expression "(int *)(param_2 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x44)" (( "(") (binary_expression "param_2 + 0x44" (identifier "param_2") (+ "+") (number_literal "0x44")) () ")")))) (+ "+") (identifier "iVar7"))) (; ";")) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_000497a0(iVar5,iVar4);" (call_expression "FUN_000497a0(iVar5,iVar4)" (identifier "FUN_000497a0") (argument_list "(iVar5,iVar4)" (( "(") (identifier "iVar5") (, ",") (identifier "iVar4") () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != iVar8)" (( "(") (binary_expression "iVar7 != iVar8" (identifier "iVar7") (!= "!=") (identifier "iVar8")) () ")")) (; ";")) (if_statement "if ((local_30 & 0x20000) != 0) {\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" (if "if") (parenthesized_expression "((local_30 & 0x20000) != 0)" (( "(") (binary_expression "(local_30 & 0x20000) != 0" (parenthesized_expression "(local_30 & 0x20000)" (( "(") (binary_expression "local_30 & 0x20000" (identifier "local_30") (& "&") (number_literal "0x20000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0005e893:\n            iVar7 = iVar8 + 1;\n            FUN_000497a0(iVar8 + param_5,0);\n            iVar4 = *(int *)(param_2 + 0x20);\n            local_30 = *(uint *)(iVar4 + 4);\n            local_2c = param_5;\n            goto LAB_0005e56e;\n          }" ({ "{") (labeled_statement "LAB_0005e893:\n            iVar7 = iVar8 + 1;" (statement_identifier "LAB_0005e893") (: ":") (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "FUN_000497a0(iVar8 + param_5,0);" (call_expression "FUN_000497a0(iVar8 + param_5,0)" (identifier "FUN_000497a0") (argument_list "(iVar8 + param_5,0)" (( "(") (binary_expression "iVar8 + param_5" (identifier "iVar8") (+ "+") (identifier "param_5")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" (identifier "local_30") (= "=") (pointer_expression "*(uint *)(iVar4 + 4)" (* "*") (cast_expression "(uint *)(iVar4 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" (identifier "local_2c") (= "=") (identifier "param_5")) (; ";")) (goto_statement "goto LAB_0005e56e;" (goto "goto") (statement_identifier "LAB_0005e56e") (; ";")) (} "}"))) (expression_statement "iVar4 = *(int *)(param_2 + 0x20);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x20)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (} "}")))) (expression_statement "local_30 = *(uint *)(iVar4 + 4);" (assignment_expression "local_30 = *(uint *)(iVar4 + 4)" (identifier "local_30") (= "=") (pointer_expression "*(uint *)(iVar4 + 4)" (* "*") (cast_expression "(uint *)(iVar4 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 4)" (( "(") (binary_expression "iVar4 + 4" (identifier "iVar4") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "local_2c = param_5;" (assignment_expression "local_2c = param_5" (identifier "local_2c") (= "=") (identifier "param_5")) (; ";")) (expression_statement "iVar7 = iVar8;" (assignment_expression "iVar7 = iVar8" (identifier "iVar7") (= "=") (identifier "iVar8")) (; ";")) (} "}")))) (} "}")))) (labeled_statement "LAB_0005e56e:\n    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" (statement_identifier "LAB_0005e56e") (: ":") (if_statement "if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" (if "if") (parenthesized_expression "(((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W'))" (( "(") (binary_expression "((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')" (parenthesized_expression "((local_30 & 0x1000) != 0)" (( "(") (binary_expression "(local_30 & 0x1000) != 0" (parenthesized_expression "(local_30 & 0x1000)" (( "(") (binary_expression "local_30 & 0x1000" (identifier "local_30") (& "&") (number_literal "0x1000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(char *)(param_2 + 0xd) != 'W')" (( "(") (binary_expression "*(char *)(param_2 + 0xd) != 'W'" (pointer_expression "*(char *)(param_2 + 0xd)" (* "*") (cast_expression "(char *)(param_2 + 0xd)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xd)" (( "(") (binary_expression "param_2 + 0xd" (identifier "param_2") (+ "+") (number_literal "0xd")) () ")")))) (!= "!=") (char_literal "'W'" (' "'") (character "W") (' "'"))) () ")"))) () ")")) (compound_statement "{\n      iVar4 = FUN_000497a0(0,0);\n      if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }\n      DAT_0014c564 = iVar8;\n      iVar8 = piVar3[0x1a];\nLAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }\n      puVar6 = &DAT_0014c55c;\n      if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }\n      *(int *)(puVar6 + 8) = iVar8;\nLAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);\n      if (param_2 == 0) {\n        return;\n      }\n      goto LAB_0005e53b;\n    }" ({ "{") (expression_statement "iVar4 = FUN_000497a0(0,0);" (assignment_expression "iVar4 = FUN_000497a0(0,0)" (identifier "iVar4") (= "=") (call_expression "FUN_000497a0(0,0)" (identifier "FUN_000497a0") (argument_list "(0,0)" (( "(") (number_literal "0") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (param_4 == 0) {\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }\n      else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_000497a0(1,0);\n        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);\n        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);\n        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);\n        iVar8 = DAT_0014c564;\n      }" ({ "{") (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" (identifier "FUN_000497a0") (argument_list "(1,0)" (( "(") (number_literal "1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);" (call_expression "FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0)" (identifier "FUN_000497a0") (argument_list "(*(undefined4 *)(param_2 + 0x34),0)" (( "(") (pointer_expression "*(undefined4 *)(param_2 + 0x34)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x34)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")")))) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);" (call_expression "FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2)" (identifier "FUN_000497a0") (argument_list "(2,*(int *)(param_2 + 0x34) + 2)" (( "(") (number_literal "2") (, ",") (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" (* "*") (cast_expression "(int *)(param_2 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")")))) (+ "+") (number_literal "2")) () ")"))) (; ";")) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0)" (identifier "FUN_000497a0") (argument_list "(*(int *)(param_2 + 0x34) + 2,0)" (( "(") (binary_expression "*(int *)(param_2 + 0x34) + 2" (pointer_expression "*(int *)(param_2 + 0x34)" (* "*") (cast_expression "(int *)(param_2 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")")))) (+ "+") (number_literal "2")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" (identifier "iVar8") (= "=") (identifier "DAT_0014c564")) (; ";")) (} "}")) (else_clause "else {\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" (else "else") (compound_statement "{\n        FUN_00049940(0,local_2c,1);\n        FUN_000497a0(0,0);\n        iVar8 = piVar3[0x1a];\n        iVar7 = iVar8 + -2;\n        if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }\n        if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }\n      }" ({ "{") (expression_statement "FUN_00049940(0,local_2c,1);" (call_expression "FUN_00049940(0,local_2c,1)" (identifier "FUN_00049940") (argument_list "(0,local_2c,1)" (( "(") (number_literal "0") (, ",") (identifier "local_2c") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" (identifier "FUN_000497a0") (argument_list "(0,0)" (( "(") (number_literal "0") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" (identifier "iVar8") (= "=") (subscript_expression "piVar3[0x1a]" (identifier "piVar3") ([ "[") (number_literal "0x1a") (] "]"))) (; ";")) (expression_statement "iVar7 = iVar8 + -2;" (assignment_expression "iVar7 = iVar8 + -2" (identifier "iVar7") (= "=") (binary_expression "iVar8 + -2" (identifier "iVar8") (+ "+") (number_literal "-2"))) (; ";")) (if_statement "if (iVar8 + -2 < 0) {\n          iVar7 = iVar8 + -1;\n        }" (if "if") (parenthesized_expression "(iVar8 + -2 < 0)" (( "(") (binary_expression "iVar8 + -2 < 0" (binary_expression "iVar8 + -2" (identifier "iVar8") (+ "+") (number_literal "-2")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          iVar7 = iVar8 + -1;\n        }" ({ "{") (expression_statement "iVar7 = iVar8 + -1;" (assignment_expression "iVar7 = iVar8 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar8 + -1" (identifier "iVar8") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" (if "if") (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" (( "(") (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" (* "*") (cast_expression "(char *)(*piVar3 + 0x4d)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar3 + 0x4d)" (( "(") (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (+ "+") (number_literal "0x4d")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;\n          iVar8 = DAT_0014c564;\n        }" ({ "{") (expression_statement "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;" (assignment_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8" (pointer_expression "*(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" (* "*") (cast_expression "(int *)(piVar3[0x19] + iVar7 * 0x14 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3[0x19] + iVar7 * 0x14 + 8)" (( "(") (binary_expression "piVar3[0x19] + iVar7 * 0x14 + 8" (binary_expression "piVar3[0x19] + iVar7 * 0x14" (subscript_expression "piVar3[0x19]" (identifier "piVar3") ([ "[") (number_literal "0x19") (] "]")) (+ "+") (binary_expression "iVar7 * 0x14" (identifier "iVar7") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "iVar8")) (; ";")) (expression_statement "iVar8 = DAT_0014c564;" (assignment_expression "iVar8 = DAT_0014c564" (identifier "iVar8") (= "=") (identifier "DAT_0014c564")) (; ";")) (} "}"))) (} "}")))) (expression_statement "DAT_0014c564 = iVar8;" (assignment_expression "DAT_0014c564 = iVar8" (identifier "DAT_0014c564") (= "=") (identifier "iVar8")) (; ";")) (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" (identifier "iVar8") (= "=") (subscript_expression "piVar3[0x1a]" (identifier "piVar3") ([ "[") (number_literal "0x1a") (] "]"))) (; ";")) (labeled_statement "LAB_0005e50e:\n      if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" (statement_identifier "LAB_0005e50e") (: ":") (if_statement "if (iVar4 < 0) {\n        iVar4 = iVar8 + -1;\n      }" (if "if") (parenthesized_expression "(iVar4 < 0)" (( "(") (binary_expression "iVar4 < 0" (identifier "iVar4") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n        iVar4 = iVar8 + -1;\n      }" ({ "{") (expression_statement "iVar4 = iVar8 + -1;" (assignment_expression "iVar4 = iVar8 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar8 + -1" (identifier "iVar8") (+ "+") (number_literal "-1"))) (; ";")) (} "}")))) (expression_statement "puVar6 = &DAT_0014c55c;" (assignment_expression "puVar6 = &DAT_0014c55c" (identifier "puVar6") (= "=") (pointer_expression "&DAT_0014c55c" (& "&") (identifier "DAT_0014c55c"))) (; ";")) (if_statement "if (*(char *)(*piVar3 + 0x4d) == '\0') {\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" (if "if") (parenthesized_expression "(*(char *)(*piVar3 + 0x4d) == '\0')" (( "(") (binary_expression "*(char *)(*piVar3 + 0x4d) == '\0'" (pointer_expression "*(char *)(*piVar3 + 0x4d)" (* "*") (cast_expression "(char *)(*piVar3 + 0x4d)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar3 + 0x4d)" (( "(") (binary_expression "*piVar3 + 0x4d" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (+ "+") (number_literal "0x4d")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);\n      }" ({ "{") (expression_statement "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);" (assignment_expression "puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" (identifier "puVar6") (= "=") (cast_expression "(undefined1 *)(piVar3[0x19] + iVar4 * 0x14)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3[0x19] + iVar4 * 0x14)" (( "(") (binary_expression "piVar3[0x19] + iVar4 * 0x14" (subscript_expression "piVar3[0x19]" (identifier "piVar3") ([ "[") (number_literal "0x19") (] "]")) (+ "+") (binary_expression "iVar4 * 0x14" (identifier "iVar4") (* "*") (number_literal "0x14"))) () ")")))) (; ";")) (} "}"))) (expression_statement "*(int *)(puVar6 + 8) = iVar8;" (assignment_expression "*(int *)(puVar6 + 8) = iVar8" (pointer_expression "*(int *)(puVar6 + 8)" (* "*") (cast_expression "(int *)(puVar6 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar6 + 8)" (( "(") (binary_expression "puVar6 + 8" (identifier "puVar6") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "iVar8")) (; ";")) (labeled_statement "LAB_0005e530:\n      param_2 = *(int *)(param_2 + 0x18);" (statement_identifier "LAB_0005e530") (: ":") (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(param_2 + 0x18)" (* "*") (cast_expression "(int *)(param_2 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";"))) (if_statement "if (param_2 == 0) {\n        return;\n      }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (goto_statement "goto LAB_0005e53b;" (goto "goto") (statement_identifier "LAB_0005e53b") (; ";")) (} "}")))) (if_statement "if (*(int *)(param_2 + 0x34) == 0) {\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x34) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x34) == 0" (pointer_expression "*(int *)(param_2 + 0x34)" (* "*") (cast_expression "(int *)(param_2 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x34)" (( "(") (binary_expression "param_2 + 0x34" (identifier "param_2") (+ "+") (number_literal "0x34")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }\n      goto LAB_0005e530;\n    }" ({ "{") (if_statement "if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" (if "if") (parenthesized_expression "((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8))" (( "(") (binary_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&\n         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d4)" (( "(") (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d4" (pointer_expression "*(undefined **)(iVar4 + 0x20)" (* "*") (cast_expression "(undefined **)(iVar4 + 0x20)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x20)" (( "(") (binary_expression "iVar4 + 0x20" (identifier "iVar4") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (pointer_expression "&DAT_001044d4" (& "&") (identifier "DAT_001044d4"))) () ")")) (&& "&&") (parenthesized_expression "(*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)" (( "(") (binary_expression "*(undefined **)(iVar4 + 0x20) != &DAT_001044d8" (pointer_expression "*(undefined **)(iVar4 + 0x20)" (* "*") (cast_expression "(undefined **)(iVar4 + 0x20)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar4 + 0x20)" (( "(") (binary_expression "iVar4 + 0x20" (identifier "iVar4") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (pointer_expression "&DAT_001044d8" (& "&") (identifier "DAT_001044d8"))) () ")"))) () ")")) (compound_statement "{\n        iVar4 = 0;\n        if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }\n        if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }\n        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));\n        FUN_00030d60();\n        if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }\n        if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }\n      }" ({ "{") (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(param_2 + 0x1c) != 0) {\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x1c) != 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x1c) != 0" (pointer_expression "*(int *)(param_2 + 0x1c)" (* "*") (cast_expression "(int *)(param_2 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n        }" ({ "{") (if_statement "if (param_3 < 1) {\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }\n          else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" (if "if") (parenthesized_expression "(param_3 < 1)" (( "(") (binary_expression "param_3 < 1" (identifier "param_3") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n            iVar4 = FUN_000497a0(0,1);\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" ({ "{") (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" (identifier "iVar4") (= "=") (call_expression "FUN_000497a0(0,1)" (identifier "FUN_000497a0") (argument_list "(0,1)" (( "(") (number_literal "0") (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" (identifier "local_30") (= "=") (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" (else "else") (compound_statement "{\n            if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }\n            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);\n            iVar4 = FUN_000497a0(0,1);\n            if (local_30 != 0) {\n              FUN_0002f640();\n            }\n            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);\n          }" ({ "{") (if_statement "if (*(char *)(param_1 + 0x13) == '\0') {\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }\n            else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" (if "if") (parenthesized_expression "(*(char *)(param_1 + 0x13) == '\0')" (( "(") (binary_expression "*(char *)(param_1 + 0x13) == '\0'" (pointer_expression "*(char *)(param_1 + 0x13)" (* "*") (cast_expression "(char *)(param_1 + 0x13)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x13)" (( "(") (binary_expression "param_1 + 0x13" (identifier "param_1") (+ "+") (number_literal "0x13")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              local_30 = *(int *)(param_1 + 0x2c) + 1;\n              *(uint *)(param_1 + 0x2c) = local_30;\n            }" ({ "{") (expression_statement "local_30 = *(int *)(param_1 + 0x2c) + 1;" (assignment_expression "local_30 = *(int *)(param_1 + 0x2c) + 1" (identifier "local_30") (= "=") (binary_expression "*(int *)(param_1 + 0x2c) + 1" (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x2c) = local_30;" (assignment_expression "*(uint *)(param_1 + 0x2c) = local_30" (pointer_expression "*(uint *)(param_1 + 0x2c)" (* "*") (cast_expression "(uint *)(param_1 + 0x2c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (= "=") (identifier "local_30")) (; ";")) (} "}")) (else_clause "else {\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" (else "else") (compound_statement "{\n              bVar2 = *(char *)(param_1 + 0x13) - 1;\n              *(byte *)(param_1 + 0x13) = bVar2;\n              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);\n            }" ({ "{") (expression_statement "bVar2 = *(char *)(param_1 + 0x13) - 1;" (assignment_expression "bVar2 = *(char *)(param_1 + 0x13) - 1" (identifier "bVar2") (= "=") (binary_expression "*(char *)(param_1 + 0x13) - 1" (pointer_expression "*(char *)(param_1 + 0x13)" (* "*") (cast_expression "(char *)(param_1 + 0x13)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x13)" (( "(") (binary_expression "param_1 + 0x13" (identifier "param_1") (+ "+") (number_literal "0x13")) () ")")))) (- "-") (number_literal "1"))) (; ";")) (expression_statement "*(byte *)(param_1 + 0x13) = bVar2;" (assignment_expression "*(byte *)(param_1 + 0x13) = bVar2" (pointer_expression "*(byte *)(param_1 + 0x13)" (* "*") (cast_expression "(byte *)(param_1 + 0x13)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x13)" (( "(") (binary_expression "param_1 + 0x13" (identifier "param_1") (+ "+") (number_literal "0x13")) () ")")))) (= "=") (identifier "bVar2")) (; ";")) (expression_statement "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);" (assignment_expression "local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" (identifier "local_30") (= "=") (pointer_expression "*(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" (* "*") (cast_expression "(int *)(param_1 + 0x90 + (uint)bVar2 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x90 + (uint)bVar2 * 4)" (( "(") (binary_expression "param_1 + 0x90 + (uint)bVar2 * 4" (binary_expression "param_1 + 0x90" (identifier "param_1") (+ "+") (number_literal "0x90")) (+ "+") (binary_expression "(uint)bVar2 * 4" (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")))) (expression_statement "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);" (call_expression "FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30)" (identifier "FUN_000497a0") (argument_list "(*(int *)(param_2 + 0x44) + iVar7,local_30)" (( "(") (binary_expression "*(int *)(param_2 + 0x44) + iVar7" (pointer_expression "*(int *)(param_2 + 0x44)" (* "*") (cast_expression "(int *)(param_2 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x44)" (( "(") (binary_expression "param_2 + 0x44" (identifier "param_2") (+ "+") (number_literal "0x44")) () ")")))) (+ "+") (identifier "iVar7")) (, ",") (identifier "local_30") () ")"))) (; ";")) (expression_statement "iVar4 = FUN_000497a0(0,1);" (assignment_expression "iVar4 = FUN_000497a0(0,1)" (identifier "iVar4") (= "=") (call_expression "FUN_000497a0(0,1)" (identifier "FUN_000497a0") (argument_list "(0,1)" (( "(") (number_literal "0") (, ",") (number_literal "1") () ")")))) (; ";")) (if_statement "if (local_30 != 0) {\n              FUN_0002f640();\n            }" (if "if") (parenthesized_expression "(local_30 != 0)" (( "(") (binary_expression "local_30 != 0" (identifier "local_30") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              FUN_0002f640();\n            }" ({ "{") (expression_statement "FUN_0002f640();" (call_expression "FUN_0002f640()" (identifier "FUN_0002f640") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);" (assignment_expression "local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4)" (identifier "local_30") (= "=") (pointer_expression "*(uint *)(*(int *)(param_2 + 0x20) + 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_2 + 0x20) + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 0x20) + 4)" (( "(") (binary_expression "*(int *)(param_2 + 0x20) + 4" (pointer_expression "*(int *)(param_2 + 0x20)" (* "*") (cast_expression "(int *)(param_2 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x20)" (( "(") (binary_expression "param_2 + 0x20" (identifier "param_2") (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (} "}"))) (if_statement "if ((local_30 & 0x20) != 0) {\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" (if "if") (parenthesized_expression "((local_30 & 0x20) != 0)" (( "(") (binary_expression "(local_30 & 0x20) != 0" (parenthesized_expression "(local_30 & 0x20)" (( "(") (binary_expression "local_30 & 0x20" (identifier "local_30") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_0005da30();\n          FUN_000497a0(0,0);\n          FUN_000370b0(0xfffffffe);\n        }" ({ "{") (expression_statement "FUN_0005da30();" (call_expression "FUN_0005da30()" (identifier "FUN_0005da30") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_000497a0(0,0);" (call_expression "FUN_000497a0(0,0)" (identifier "FUN_000497a0") (argument_list "(0,0)" (( "(") (number_literal "0") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "FUN_000370b0(0xfffffffe);" (call_expression "FUN_000370b0(0xfffffffe)" (identifier "FUN_000370b0") (argument_list "(0xfffffffe)" (( "(") (number_literal "0xfffffffe") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));" (call_expression "FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28))" (identifier "FUN_000497a0") (argument_list "(local_2c,*(undefined4 *)(param_2 + 0x28))" (( "(") (identifier "local_2c") (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_00030d60();" (call_expression "FUN_00030d60()" (identifier "FUN_00030d60") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (0 < piVar3[0x1a]) {\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" (if "if") (parenthesized_expression "(0 < piVar3[0x1a])" (( "(") (binary_expression "0 < piVar3[0x1a]" (number_literal "0") (< "<") (subscript_expression "piVar3[0x1a]" (identifier "piVar3") ([ "[") (number_literal "0x1a") (] "]"))) () ")")) (compound_statement "{\n          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;\n        }" ({ "{") (expression_statement "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;" (assignment_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff" (pointer_expression "*(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" (* "*") (cast_expression "(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12)" (( "(") (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12" (binary_expression "piVar3[0x19] + piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x19]" (identifier "piVar3") ([ "[") (number_literal "0x19") (] "]")) (+ "+") (binary_expression "piVar3[0x1a] * 0x14" (subscript_expression "piVar3[0x1a]" (identifier "piVar3") ([ "[") (number_literal "0x1a") (] "]")) (* "*") (number_literal "0x14"))) (+ "+") (number_literal "-0x12")) () ")")))) (= "=") (binary_expression "(ushort)iVar7 & 0xff" (cast_expression "(ushort)iVar7" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (identifier "iVar7")) (& "&") (number_literal "0xff"))) (; ";")) (} "}"))) (if_statement "if (iVar4 != 0) {\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          iVar8 = piVar3[0x1a];\n          goto LAB_0005e50e;\n        }" ({ "{") (expression_statement "iVar8 = piVar3[0x1a];" (assignment_expression "iVar8 = piVar3[0x1a]" (identifier "iVar8") (= "=") (subscript_expression "piVar3[0x1a]" (identifier "piVar3") ([ "[") (number_literal "0x1a") (] "]"))) (; ";")) (goto_statement "goto LAB_0005e50e;" (goto "goto") (statement_identifier "LAB_0005e50e") (; ";")) (} "}"))) (} "}"))) (goto_statement "goto LAB_0005e530;" (goto "goto") (statement_identifier "LAB_0005e530") (; ";")) (} "}"))) (expression_statement "FUN_000497a0(1,0);" (call_expression "FUN_000497a0(1,0)" (identifier "FUN_000497a0") (argument_list "(1,0)" (( "(") (number_literal "1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "param_2 = *(int *)(param_2 + 0x18);" (assignment_expression "param_2 = *(int *)(param_2 + 0x18)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(param_2 + 0x18)" (* "*") (cast_expression "(int *)(param_2 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (param_2 == 0) {\n      return;\n    }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";"))) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void __regparm3
function_1(type_1 *pParse,type_2 *var_3,int var_5,int var_10,int var_6,int regPartSize)

{
  type_3 *var_4;
  type_4 bVar2;
  type_5 *var_1;
  type_6 *pFVar3;
  int var_7;
  int p2;
  int iVar5;
  type_7 *pOVar6;
  int var_8;
  type_8 *var_12;
  int var_11;
  
  var_1 = pParse->pVdbe;
  if (var_1 == (type_5 *)0x0) {
    var_1 = var_2(pParse);
  }
  if (var_3 == (type_2 *)0x0) {
    return;
  }
LAB_0005e53b:
  do {
    pFVar3 = var_3->pFunc;
    var_12 = (type_8 *)pFVar3->funcFlags;
    var_4 = (var_3->pOwner->x).pList;
    if (var_4 == (type_3 *)0x0) {
      var_7 = 0;
      if (var_5 < 0) goto LAB_0005e563;
      if (((type_9)var_12 & 0x20000) == 0) {
        var_11 = var_6;
        var_8 = 0;
      }
      else {
        var_11 = regPartSize;
        var_8 = 1;
      }
    }
    else {
      var_7 = var_4->nExpr;
      if (var_5 < 0) {
LAB_0005e563:
        var_11 = var_6 + var_3->iArgCol;
        var_8 = var_7;
      }
      else {
        var_8 = 0;
        if (var_7 < 1) {
          if (((type_9)var_12 & 0x20000) != 0) {
            if (var_7 == 0) {
              var_11 = regPartSize;
              var_8 = 1;
              goto LAB_0005e56e;
            }
            goto LAB_0005e893;
          }
        }
        else {
          do {
            iVar5 = var_6 + var_8;
            p2 = var_3->iArgCol + var_8;
            var_8 = var_8 + 1;
            var_9(var_1,0x5a,var_5,p2,iVar5);
          } while (var_8 != var_7);
          if (((type_9)var_12 & 0x20000) != 0) {
LAB_0005e893:
            var_8 = var_7 + 1;
            var_9(var_1,0x4f,regPartSize,var_7 + var_6,0);
            pFVar3 = var_3->pFunc;
            var_12 = (type_8 *)pFVar3->funcFlags;
            var_11 = var_6;
            goto LAB_0005e56e;
          }
          pFVar3 = var_3->pFunc;
        }
        var_12 = (type_8 *)pFVar3->funcFlags;
        var_11 = var_6;
        var_8 = var_7;
      }
    }
LAB_0005e56e:
    if ((((type_9)var_12 & 0x1000) == 0) || (var_3->eStart == 'W')) {
      if (var_3->regApp != 0) {
        var_9(var_1,0x53,(var_3->regApp + 1) - var_10,1,0);
        var_3 = var_3->pNextWin;
        if (var_3 == (type_2 *)0x0) {
          return;
        }
        goto LAB_0005e53b;
      }
      if ((pFVar3->zName != "lag") && (pFVar3->zName != "lead")) {
        var_7 = 0;
        if (var_3->pFilter != (type_10 *)0x0) {
          if (var_5 < 1) {
            var_7 = var_9(var_1,0x14,var_11 + var_8,0,1);
            var_12 = (type_8 *)var_3->pFunc->funcFlags;
          }
          else {
            if (pParse->nTempReg == '\0') {
              var_12 = (type_8 *)(pParse->nMem + 1);
              pParse->nMem = (int)var_12;
            }
            else {
              bVar2 = pParse->nTempReg - 1;
              pParse->nTempReg = bVar2;
              var_12 = (type_8 *)pParse->aTempReg[bVar2];
            }
            var_9(var_1,0x5a,var_5,var_3->iArgCol + var_8,(int)var_12);
            var_7 = var_9(var_1,0x14,(int)var_12,0,1);
            if (var_12 != (type_8 *)0x0) {
              var_13(pParse,(int)var_12);
            }
            var_12 = (type_8 *)var_3->pFunc->funcFlags;
          }
        }
        if (((type_9)var_12 & 0x20) != 0) {
          var_12 = var_14(pParse,((var_3->pOwner->x).pList)->a[0].pExpr);
          if (var_12 == (type_8 *)0x0) {
            var_12 = pParse->db->pDfltColl;
          }
          iVar5 = var_9(var_1,0x52,0,0,0);
          var_15(var_1,iVar5,(char *)var_12,-2);
        }
        var_9(var_1,~-(type_9)(var_10 == 0) + 0x9a,var_10,var_11,var_3->regAccum);
        var_16(var_1,var_3->pFunc,-8);
        if (0 < var_1->nOp) {
          var_1->aOp[var_1->nOp + -1].p5 = (type_11)var_8 & 0xff;
        }
        if (var_7 != 0) {
          var_8 = var_1->nOp;
          goto LAB_0005e50e;
        }
      }
    }
    else {
      var_7 = var_9(var_1,0x32,var_11,0,0);
      if (var_10 == 0) {
        var_9(var_1,0x53,var_3->regApp + 1,1,0);
        var_9(var_1,0x4f,var_11,var_3->regApp,0);
        var_9(var_1,0x66,var_3->regApp,2,var_3->regApp + 2);
        var_9(var_1,0x84,var_3->csrApp,var_3->regApp + 2,0);
        var_8 = DAT_0014c564;
      }
      else {
        var_17(var_1,0x18,var_3->csrApp,0,var_11,1);
        var_9(var_1,0x7b,var_3->csrApp,0,0);
        var_8 = var_1->nOp;
        iVar5 = var_8 + -2;
        if (var_8 + -2 < 0) {
          iVar5 = var_8 + -1;
        }
        if (var_1->db->mallocFailed == '\0') {
          var_1->aOp[iVar5].p2 = var_8;
          var_8 = DAT_0014c564;
        }
      }
      DAT_0014c564 = var_8;
      var_8 = var_1->nOp;
LAB_0005e50e:
      if (var_7 < 0) {
        var_7 = var_8 + -1;
      }
      pOVar6 = (type_7 *)&dummy_22864;
      if (var_1->db->mallocFailed == '\0') {
        pOVar6 = var_1->aOp + var_7;
      }
      pOVar6->p2 = var_8;
    }
    var_3 = var_3->pNextWin;
    if (var_3 == (type_2 *)0x0) {
      return;
    }
  } while( true );
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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 declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (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: (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: (identifier))) (goto_statement label: (statement_identifier)))) (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: (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: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (character)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (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))))) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (labeled_statement label: (statement_identifier) (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: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (goto_statement label: (statement_identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) right: (parenthesized_expression (binary_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)))))) consequence: (compound_statement (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (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: (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)))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (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: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (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: (identifier))) (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: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (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: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (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: (subscript_expression argument: (identifier) index: (number_literal)))) (goto_statement label: (statement_identifier)))))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal) (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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement)))) condition: (parenthesized_expression (true)))))))

/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */

void __regparm3
MASKED(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6)

{
  int *piVar1;
  byte bVar2;
  int *piVar3;
  int iVar4;
  int iVar5;
  undefined1 *puVar6;
  int iVar7;
  int iVar8;
  uint local_30;
  int local_2c;
  
  piVar3 = *(int **)(param_1 + 8);
  if (piVar3 == (int *)0x0) {
    piVar3 = (int *)FUN_000498b0();
  }
  if (param_2 == 0) {
    return;
  }
LAB_0005e53b:
  do {
    iVar4 = *(int *)(param_2 + 0x20);
    local_30 = *(uint *)(iVar4 + 4);
    piVar1 = *(int **)(*(int *)(param_2 + 0x3c) + 0x14);
    if (piVar1 == (int *)0x0) {
      iVar8 = 0;
      if (param_3 < 0) goto LAB_0005e563;
      if ((local_30 & 0x20000) == 0) {
        local_2c = param_5;
        iVar7 = 0;
      }
      else {
        local_2c = param_6;
        iVar7 = 1;
      }
    }
    else {
      iVar8 = *piVar1;
      if (param_3 < 0) {
LAB_0005e563:
        local_2c = param_5 + *(int *)(param_2 + 0x44);
        iVar7 = iVar8;
      }
      else {
        iVar7 = 0;
        if (iVar8 < 1) {
          if ((local_30 & 0x20000) != 0) {
            if (iVar8 == 0) {
              local_2c = param_6;
              iVar7 = 1;
              goto LAB_0005e56e;
            }
            goto LAB_0005e893;
          }
        }
        else {
          do {
            iVar4 = param_5 + iVar7;
            iVar5 = *(int *)(param_2 + 0x44) + iVar7;
            iVar7 = iVar7 + 1;
            FUN_000497a0(iVar5,iVar4);
          } while (iVar7 != iVar8);
          if ((local_30 & 0x20000) != 0) {
LAB_0005e893:
            iVar7 = iVar8 + 1;
            FUN_000497a0(iVar8 + param_5,0);
            iVar4 = *(int *)(param_2 + 0x20);
            local_30 = *(uint *)(iVar4 + 4);
            local_2c = param_5;
            goto LAB_0005e56e;
          }
          iVar4 = *(int *)(param_2 + 0x20);
        }
        local_30 = *(uint *)(iVar4 + 4);
        local_2c = param_5;
        iVar7 = iVar8;
      }
    }
LAB_0005e56e:
    if (((local_30 & 0x1000) != 0) && (*(char *)(param_2 + 0xd) != 'W')) {
      iVar4 = FUN_000497a0(0,0);
      if (param_4 == 0) {
        FUN_000497a0(1,0);
        FUN_000497a0(*(undefined4 *)(param_2 + 0x34),0);
        FUN_000497a0(2,*(int *)(param_2 + 0x34) + 2);
        FUN_000497a0(*(int *)(param_2 + 0x34) + 2,0);
        iVar8 = DAT_0014c564;
      }
      else {
        FUN_00049940(0,local_2c,1);
        FUN_000497a0(0,0);
        iVar8 = piVar3[0x1a];
        iVar7 = iVar8 + -2;
        if (iVar8 + -2 < 0) {
          iVar7 = iVar8 + -1;
        }
        if (*(char *)(*piVar3 + 0x4d) == '\0') {
          *(int *)(piVar3[0x19] + iVar7 * 0x14 + 8) = iVar8;
          iVar8 = DAT_0014c564;
        }
      }
      DAT_0014c564 = iVar8;
      iVar8 = piVar3[0x1a];
LAB_0005e50e:
      if (iVar4 < 0) {
        iVar4 = iVar8 + -1;
      }
      puVar6 = &DAT_0014c55c;
      if (*(char *)(*piVar3 + 0x4d) == '\0') {
        puVar6 = (undefined1 *)(piVar3[0x19] + iVar4 * 0x14);
      }
      *(int *)(puVar6 + 8) = iVar8;
LAB_0005e530:
      param_2 = *(int *)(param_2 + 0x18);
      if (param_2 == 0) {
        return;
      }
      goto LAB_0005e53b;
    }
    if (*(int *)(param_2 + 0x34) == 0) {
      if ((*(undefined **)(iVar4 + 0x20) != &DAT_001044d4) &&
         (*(undefined **)(iVar4 + 0x20) != &DAT_001044d8)) {
        iVar4 = 0;
        if (*(int *)(param_2 + 0x1c) != 0) {
          if (param_3 < 1) {
            iVar4 = FUN_000497a0(0,1);
            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);
          }
          else {
            if (*(char *)(param_1 + 0x13) == '\0') {
              local_30 = *(int *)(param_1 + 0x2c) + 1;
              *(uint *)(param_1 + 0x2c) = local_30;
            }
            else {
              bVar2 = *(char *)(param_1 + 0x13) - 1;
              *(byte *)(param_1 + 0x13) = bVar2;
              local_30 = *(int *)(param_1 + 0x90 + (uint)bVar2 * 4);
            }
            FUN_000497a0(*(int *)(param_2 + 0x44) + iVar7,local_30);
            iVar4 = FUN_000497a0(0,1);
            if (local_30 != 0) {
              FUN_0002f640();
            }
            local_30 = *(uint *)(*(int *)(param_2 + 0x20) + 4);
          }
        }
        if ((local_30 & 0x20) != 0) {
          FUN_0005da30();
          FUN_000497a0(0,0);
          FUN_000370b0(0xfffffffe);
        }
        FUN_000497a0(local_2c,*(undefined4 *)(param_2 + 0x28));
        FUN_00030d60();
        if (0 < piVar3[0x1a]) {
          *(ushort *)(piVar3[0x19] + piVar3[0x1a] * 0x14 + -0x12) = (ushort)iVar7 & 0xff;
        }
        if (iVar4 != 0) {
          iVar8 = piVar3[0x1a];
          goto LAB_0005e50e;
        }
      }
      goto LAB_0005e530;
    }
    FUN_000497a0(1,0);
    param_2 = *(int *)(param_2 + 0x18);
    if (param_2 == 0) {
      return;
    }
  } while( true );
}

