
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::TEMPNAMEPLACEHOLDERVALUE(std::wistream&, wchar_t*) */

wistream * std::operator>>(wistream *param_1,wchar_t *param_2)

{
  long *plVar1;
  int *piVar2;
  char cVar3;
  int iVar4;
  wchar_t wVar5;
  ctype *pcVar6;
  long lVar7;
  _Ios_Iostate _Var8;
  wchar_t *pwVar9;
  long lVar10;
  long lVar11;
  long local_50;
  sentry local_41;
  locale local_40 [16];
  
  wistream::sentry::sentry(&local_41,param_1,false);
  lVar7 = *(long *)param_1;
  if (local_41 != (sentry)0x0) {
    lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);
    if (lVar10 < 1) {
      lVar10 = 0x7fffffffffffffff;
    }
    locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));
                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */
    pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);
    locale::~locale(local_40);
    plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);
    if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {
      wVar5 = *(wchar_t *)plVar1[2];
    }
    else {
                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */
      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
    lVar10 = lVar10 + -1;
    lVar11 = 0;
    while (pwVar9 = param_2, lVar11 != lVar10) {
      while( true ) {
        param_2 = pwVar9;
        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;
                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */
        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);
        local_50 = lVar11;
        if (cVar3 != '\0') goto LAB_0029b955;
        param_2 = pwVar9 + 1;
        *pwVar9 = wVar5;
        lVar11 = lVar11 + 1;
        piVar2 = (int *)plVar1[2];
        if (piVar2 < (int *)plVar1[3]) {
          iVar4 = *piVar2;
          plVar1[2] = (long)(piVar2 + 1);
        }
        else {
                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */
          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar4 == -1) {
          lVar7 = *(long *)param_1;
          *param_2 = L'\0';
          _Var8 = _S_eofbit;
          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;
          goto LAB_0029b97d;
        }
        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;
        wVar5 = *(wchar_t *)plVar1[2];
        pwVar9 = param_2;
        if (lVar11 == lVar10) goto LAB_0029b94c;
      }
      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
LAB_0029b94c:
    pwVar9 = param_2;
    local_50 = lVar10;
    if (wVar5 == L'\xffffffff') {
LAB_0029ba00:
      lVar7 = *(long *)param_1;
      *param_2 = L'\0';
      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;
      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;
      goto LAB_0029b97d;
    }
LAB_0029b955:
    lVar7 = *(long *)param_1;
    *pwVar9 = L'\0';
    *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;
    if (local_50 != 0) {
      return param_1;
    }
  }
  _Var8 = _S_failbit;
LAB_0029b97d:
  wios::clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),
              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));
  return param_1;
}



long * FUN_0029b840(long *param_1,int *param_2)

{
  long *plVar1;
  char cVar2;
  int iVar3;
  long *plVar4;
  uint uVar5;
  long lVar6;
  int *piVar7;
  long lVar8;
  long lVar9;
  long local_50;
  char local_41;
  undefined1 local_40 [16];
  
  FUN_00299dd0(&local_41,param_1,0);
  lVar6 = *param_1;
  if (local_41 != '\0') {
    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);
    if (lVar8 < 1) {
      lVar8 = 0x7fffffffffffffff;
    }
    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);
                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */
    plVar4 = (long *)FUN_002c36e0(local_40);
    FUN_00279260(local_40);
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((int *)plVar1[2] < (int *)plVar1[3]) {
      iVar3 = *(int *)plVar1[2];
    }
    else {
                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */
      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
    lVar8 = lVar8 + -1;
    lVar9 = 0;
    while (piVar7 = param_2, lVar9 != lVar8) {
      while( true ) {
        param_2 = piVar7;
        if (iVar3 == -1) goto LAB_0029ba00;
                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */
        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);
        local_50 = lVar9;
        if (cVar2 != '\0') goto LAB_0029b955;
        param_2 = piVar7 + 1;
        *piVar7 = iVar3;
        lVar9 = lVar9 + 1;
        piVar7 = (int *)plVar1[2];
        if (piVar7 < (int *)plVar1[3]) {
          iVar3 = *piVar7;
          plVar1[2] = (long)(piVar7 + 1);
        }
        else {
                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */
          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar3 == -1) {
          lVar6 = *param_1;
          *param_2 = 0;
          uVar5 = 2;
          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
          goto LAB_0029b97d;
        }
        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;
        iVar3 = *(int *)plVar1[2];
        piVar7 = param_2;
        if (lVar9 == lVar8) goto LAB_0029b94c;
      }
      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
LAB_0029b94c:
    piVar7 = param_2;
    local_50 = lVar8;
    if (iVar3 == -1) {
LAB_0029ba00:
      lVar6 = *param_1;
      *param_2 = 0;
      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;
      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
      goto LAB_0029b97d;
    }
LAB_0029b955:
    lVar6 = *param_1;
    *piVar7 = 0;
    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
    if (local_50 != 0) {
      return param_1;
    }
  }
  uVar5 = 4;
LAB_0029b97d:
  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;
  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));
  return param_1;
}


PUSH R15
MOV R15,RDI
XOR EDX,EDX
PUSH R14
PUSH R13
PUSH R12
MOV R12,RSI
MOV RSI,R15
PUSH RBP
PUSH RBX
SUB RSP,0x28
LEA RDI,[RSP + 0x17]
CALL 0x00299dd0
CMP byte ptr [RSP + 0x17],0x0
MOV RAX,qword ptr [R15]
JZ 0x0029b978
MOV RSI,qword ptr [RAX + -0x18]
LEA RBX,[RSP + 0x18]
MOV RAX,0x7fffffffffffffff
MOV RDI,RBX
ADD RSI,R15
MOV R13,qword ptr [RSI + 0x10]
TEST R13,R13
CMOVLE R13,RAX
ADD RSI,0xd0
CALL 0x00278b20
MOV RDI,RBX
CALL 0x002c36e0
MOV RDI,RBX
MOV R14,RAX
CALL 0x00279260
MOV RAX,qword ptr [R15]
MOV RAX,qword ptr [RAX + -0x18]
MOV RBX,qword ptr [R15 + RAX*0x1 + 0xe8]
MOV RAX,qword ptr [RBX + 0x10]
CMP qword ptr [RBX + 0x18],RAX
JBE 0x0029b9f0
MOV EBP,dword ptr [RAX]
LEA RAX,[R13 + -0x1]
XOR R13D,R13D
MOV qword ptr [RSP + 0x8],RAX
CMP R13,qword ptr [RSP + 0x8]
JZ 0x0029b94c
CMP EBP,-0x1
JZ 0x0029ba00
MOV RAX,qword ptr [R14]
MOV EDX,EBP
MOV ESI,0x2000
MOV RDI,R14
CALL qword ptr [RAX + 0x10]
TEST AL,AL
JNZ 0x0029ba30
ADD R12,0x4
MOV dword ptr [R12 + -0x4],EBP
ADD R13,0x1
MOV RDX,qword ptr [RBX + 0x10]
CMP RDX,qword ptr [RBX + 0x18]
JNC 0x0029b9a0
MOV EAX,dword ptr [RDX]
ADD RDX,0x4
MOV qword ptr [RBX + 0x10],RDX
CMP EAX,-0x1
JZ 0x0029b9b2
MOV RAX,qword ptr [RBX + 0x10]
CMP RAX,qword ptr [RBX + 0x18]
JNC 0x0029b9d8
MOV EBP,dword ptr [RAX]
CMP R13,qword ptr [RSP + 0x8]
JNZ 0x0029b8e6
CMP EBP,-0x1
JZ 0x0029ba00
MOV RAX,qword ptr [R15]
CMP qword ptr [RSP + 0x8],0x0
MOV dword ptr [R12],0x0
MOV RDX,qword ptr [RAX + -0x18]
MOV qword ptr [R15 + RDX*0x1 + 0x10],0x0
JNZ 0x0029b98c
NOP dword ptr [RAX]
MOV ESI,0x4
MOV RDI,qword ptr [RAX + -0x18]
ADD RDI,R15
OR ESI,dword ptr [RDI + 0x20]
CALL 0x0029d320
ADD RSP,0x28
MOV RAX,R15
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x50]
CMP EAX,-0x1
JNZ 0x0029b935
MOV RAX,qword ptr [R15]
MOV dword ptr [R12],0x0
MOV ESI,0x2
MOV RDX,qword ptr [RAX + -0x18]
MOV qword ptr [R15 + RDX*0x1 + 0x10],0x0
JMP 0x0029b97d
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x48]
MOV EBP,EAX
JMP 0x0029b8df
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x48]
MOV EBP,EAX
JMP 0x0029b8d3
MOV RAX,qword ptr [R15]
CMP R13,0x1
MOV dword ptr [R12],0x0
SBB ESI,ESI
MOV RDX,qword ptr [RAX + -0x18]
AND ESI,0x4
ADD ESI,0x2
MOV qword ptr [R15 + RDX*0x1 + 0x10],0x0
JMP 0x0029b97d
MOV qword ptr [RSP + 0x8],R13
JMP 0x0029b955
(translation_unit "long * FUN_0029b840(long *param_1,int *param_2)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_0029b840(long *param_1,int *param_2)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0029b840(long *param_1,int *param_2)" * (function_declarator "FUN_0029b840(long *param_1,int *param_2)" identifier (parameter_list "(long *param_1,int *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_41;" primitive_type identifier ;) (declaration "undefined1 local_40 [16];" type_identifier (array_declarator "local_40 [16]" identifier [ number_literal ]) ;) (expression_statement "FUN_00299dd0(&local_41,param_1,0);" (call_expression "FUN_00299dd0(&local_41,param_1,0)" identifier (argument_list "(&local_41,param_1,0)" ( (pointer_expression "&local_41" & identifier) , identifier , number_literal ))) ;) (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_41 != '\0')" ( (binary_expression "local_41 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" { (expression_statement "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);" (assignment_expression "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" identifier = (pointer_expression "*(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }" if (parenthesized_expression "(lVar8 < 1)" ( (binary_expression "lVar8 < 1" identifier < number_literal) )) (compound_statement "{\n      lVar8 = 0x7fffffffffffffff;\n    }" { (expression_statement "lVar8 = 0x7fffffffffffffff;" (assignment_expression "lVar8 = 0x7fffffffffffffff" identifier = number_literal) ;) })) (expression_statement "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);" (call_expression "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" identifier (argument_list "(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" ( identifier , (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) ))) ;) comment (expression_statement "plVar4 = (long *)FUN_002c36e0(local_40);" (assignment_expression "plVar4 = (long *)FUN_002c36e0(local_40)" identifier = (cast_expression "(long *)FUN_002c36e0(local_40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002c36e0(local_40)" identifier (argument_list "(local_40)" ( identifier ))))) ;) (expression_statement "FUN_00279260(local_40);" (call_expression "FUN_00279260(local_40)" identifier (argument_list "(local_40)" ( identifier ))) ;) (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" if (parenthesized_expression "((int *)plVar1[2] < (int *)plVar1[3])" ( (binary_expression "(int *)plVar1[2] < (int *)plVar1[3]" (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])) < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n      iVar3 = *(int *)plVar1[2];\n    }" { (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" identifier = (pointer_expression "*(int *)plVar1[2]" * (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" else (compound_statement "{\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { comment (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (while_statement "while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" while (parenthesized_expression "(piVar7 = param_2, lVar9 != lVar8)" ( (comma_expression "piVar7 = param_2, lVar9 != lVar8" (assignment_expression "piVar7 = param_2" identifier = identifier) , (binary_expression "lVar9 != lVar8" identifier != identifier)) )) (compound_statement "{\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { (while_statement "while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" { (expression_statement "param_2 = piVar7;" (assignment_expression "param_2 = piVar7" identifier = identifier) ;) (if_statement "if (iVar3 == -1) goto LAB_0029ba00;" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0029ba00;" goto statement_identifier ;)) comment (expression_statement "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);" (assignment_expression "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" identifier = (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" ( (pointer_expression "**(code **)(*plVar4 + 0x10)" * (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x2000,iVar3)" ( identifier , number_literal , identifier )))) ;) (expression_statement "local_50 = lVar9;" (assignment_expression "local_50 = lVar9" identifier = identifier) ;) (if_statement "if (cVar2 != '\0') goto LAB_0029b955;" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0029b955;" goto statement_identifier ;)) (expression_statement "param_2 = piVar7 + 1;" (assignment_expression "param_2 = piVar7 + 1" identifier = (binary_expression "piVar7 + 1" identifier + number_literal)) ;) (expression_statement "*piVar7 = iVar3;" (assignment_expression "*piVar7 = iVar3" (pointer_expression "*piVar7" * identifier) = identifier) ;) (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (expression_statement "piVar7 = (int *)plVar1[2];" (assignment_expression "piVar7 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar7 < (int *)plVar1[3])" ( (binary_expression "piVar7 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }" { (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar7 + 1);" (assignment_expression "plVar1[2] = (long)(piVar7 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar7 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar7 + 1)" ( (binary_expression "piVar7 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { comment (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" { (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (if_statement "if ((int *)plVar1[3] <= (int *)plVar1[2]) break;" if (parenthesized_expression "((int *)plVar1[3] <= (int *)plVar1[2])" ( (binary_expression "(int *)plVar1[3] <= (int *)plVar1[2]" (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" identifier = (pointer_expression "*(int *)plVar1[2]" * (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" identifier = identifier) ;) (if_statement "if (lVar9 == lVar8) goto LAB_0029b94c;" if (parenthesized_expression "(lVar9 == lVar8)" ( (binary_expression "lVar9 == lVar8" identifier == identifier) )) (goto_statement "goto LAB_0029b94c;" goto statement_identifier ;)) })) (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) })) (labeled_statement "LAB_0029b94c:\n    piVar7 = param_2;" statement_identifier : (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" identifier = identifier) ;)) (expression_statement "local_50 = lVar8;" (assignment_expression "local_50 = lVar8" identifier = identifier) ;) (if_statement "if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" { (labeled_statement "LAB_0029ba00:\n      lVar6 = *param_1;" statement_identifier : (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;" (assignment_expression "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(lVar9 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(lVar9 == 0) & 4)" ( (binary_expression "-(uint)(lVar9 == 0) & 4" (unary_expression "-(uint)(lVar9 == 0)" - (call_expression "(uint)(lVar9 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )))) & number_literal) )) + number_literal)) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (labeled_statement "LAB_0029b955:\n    lVar6 = *param_1;" statement_identifier : (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "*piVar7 = 0;" (assignment_expression "*piVar7 = 0" (pointer_expression "*piVar7" * identifier) = number_literal) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (if_statement "if (local_50 != 0) {\n      return param_1;\n    }" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) })) })) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" identifier = number_literal) ;) (labeled_statement "LAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" statement_identifier : (expression_statement "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" (assignment_expression "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(lVar6 + -0x18) + (long)param_1" (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;)) (expression_statement "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));" (call_expression "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" identifier (argument_list "(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" ( identifier , (binary_expression "uVar5 | *(uint *)(lVar6 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar6 + 0x20)" * (cast_expression "(uint *)(lVar6 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x20)" ( (binary_expression "lVar6 + 0x20" identifier + number_literal) ))))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::wistream& std::TEMPNAMEPLACEHOLDERVALUE(std::wistream&, wchar_t*) */\n\nwistream * std::operator>>(wistream *param_1,wchar_t *param_2)\n\n{\n  long *plVar1;\n  int *piVar2;\n  char cVar3;\n  int iVar4;\n  wchar_t wVar5;\n  ctype *pcVar6;\n  long lVar7;\n  _Ios_Iostate _Var8;\n  wchar_t *pwVar9;\n  long lVar10;\n  long lVar11;\n  long local_50;\n  sentry local_41;\n  locale local_40 [16];\n  \n  wistream::sentry::sentry(&local_41,param_1,false);\n  lVar7 = *(long *)param_1;\n  if (local_41 != (sentry)0x0) {\n    lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);\n    if (lVar10 < 1) {\n      lVar10 = 0x7fffffffffffffff;\n    }\n    locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);\n    locale::~locale(local_40);\n    plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);\n    if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {\n      wVar5 = *(wchar_t *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar10 = lVar10 + -1;\n    lVar11 = 0;\n    while (pwVar9 = param_2, lVar11 != lVar10) {\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    pwVar9 = param_2;\n    local_50 = lVar10;\n    if (wVar5 == L'\xffffffff') {\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar7 = *(long *)param_1;\n    *pwVar9 = L'\0';\n    *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  _Var8 = _S_failbit;\nLAB_0029b97d:\n  wios::clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));\n  return param_1;\n}\n\n" comment comment (ERROR "wistream * std::operator>>(wistream *param_1,wchar_t *param_2)" (binary_expression "wistream * std::operator>>(wistream *param_1,wchar_t *param_2)" (binary_expression "wistream * std" identifier * identifier) (ERROR "::operator" : : identifier) >> (parenthesized_expression "(wistream *param_1,wchar_t *param_2)" ( (comma_expression "wistream *param_1,wchar_t *param_2" (binary_expression "wistream *param_1" identifier * identifier) , (binary_expression "wchar_t *param_2" identifier * identifier)) )))) (compound_statement "{\n  long *plVar1;\n  int *piVar2;\n  char cVar3;\n  int iVar4;\n  wchar_t wVar5;\n  ctype *pcVar6;\n  long lVar7;\n  _Ios_Iostate _Var8;\n  wchar_t *pwVar9;\n  long lVar10;\n  long lVar11;\n  long local_50;\n  sentry local_41;\n  locale local_40 [16];\n  \n  wistream::sentry::sentry(&local_41,param_1,false);\n  lVar7 = *(long *)param_1;\n  if (local_41 != (sentry)0x0) {\n    lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);\n    if (lVar10 < 1) {\n      lVar10 = 0x7fffffffffffffff;\n    }\n    locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);\n    locale::~locale(local_40);\n    plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);\n    if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {\n      wVar5 = *(wchar_t *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar10 = lVar10 + -1;\n    lVar11 = 0;\n    while (pwVar9 = param_2, lVar11 != lVar10) {\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    pwVar9 = param_2;\n    local_50 = lVar10;\n    if (wVar5 == L'\xffffffff') {\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar7 = *(long *)param_1;\n    *pwVar9 = L'\0';\n    *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  _Var8 = _S_failbit;\nLAB_0029b97d:\n  wios::clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "wchar_t wVar5;" type_identifier identifier ;) (declaration "ctype *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "_Ios_Iostate _Var8;" type_identifier identifier ;) (declaration "wchar_t *pwVar9;" type_identifier (pointer_declarator "*pwVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar11;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "sentry local_41;" type_identifier identifier ;) (declaration "locale local_40 [16];" type_identifier (array_declarator "local_40 [16]" identifier [ number_literal ]) ;) (labeled_statement "wistream::sentry::sentry(&local_41,param_1,false);" statement_identifier : (ERROR ":" :) (labeled_statement "sentry::sentry(&local_41,param_1,false);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(&local_41,param_1,false);" (call_expression "sentry(&local_41,param_1,false)" identifier (argument_list "(&local_41,param_1,false)" ( (pointer_expression "&local_41" & identifier) , identifier , false ))) ;))) (expression_statement "lVar7 = *(long *)param_1;" (assignment_expression "lVar7 = *(long *)param_1" identifier = (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (local_41 != (sentry)0x0) {\n    lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);\n    if (lVar10 < 1) {\n      lVar10 = 0x7fffffffffffffff;\n    }\n    locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);\n    locale::~locale(local_40);\n    plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);\n    if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {\n      wVar5 = *(wchar_t *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar10 = lVar10 + -1;\n    lVar11 = 0;\n    while (pwVar9 = param_2, lVar11 != lVar10) {\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    pwVar9 = param_2;\n    local_50 = lVar10;\n    if (wVar5 == L'\xffffffff') {\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar7 = *(long *)param_1;\n    *pwVar9 = L'\0';\n    *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_41 != (sentry)0x0)" ( (binary_expression "local_41 != (sentry)0x0" identifier != (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);\n    if (lVar10 < 1) {\n      lVar10 = 0x7fffffffffffffff;\n    }\n    locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));\n                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */\n    pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);\n    locale::~locale(local_40);\n    plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);\n    if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {\n      wVar5 = *(wchar_t *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar10 = lVar10 + -1;\n    lVar11 = 0;\n    while (pwVar9 = param_2, lVar11 != lVar10) {\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    pwVar9 = param_2;\n    local_50 = lVar10;\n    if (wVar5 == L'\xffffffff') {\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar7 = *(long *)param_1;\n    *pwVar9 = L'\0';\n    *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" { (expression_statement "lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10);" (assignment_expression "lVar10 = *(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" identifier = (pointer_expression "*(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" * (cast_expression "(long *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18) + 0x10" (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar10 < 1) {\n      lVar10 = 0x7fffffffffffffff;\n    }" if (parenthesized_expression "(lVar10 < 1)" ( (binary_expression "lVar10 < 1" identifier < number_literal) )) (compound_statement "{\n      lVar10 = 0x7fffffffffffffff;\n    }" { (expression_statement "lVar10 = 0x7fffffffffffffff;" (assignment_expression "lVar10 = 0x7fffffffffffffff" identifier = number_literal) ;) })) (labeled_statement "locale::locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));" statement_identifier : (ERROR ":" :) (expression_statement "locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0));" (call_expression "locale(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0))" identifier (argument_list "(local_40,(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0))" ( identifier , (cast_expression "(locale *)(param_1 + *(long *)(lVar7 + -0x18) + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18) + 0xd0)" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18) + 0xd0" (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) + number_literal) ))) ))) ;)) comment (expression_statement "pcVar6 = use_facet<std::ctype<wchar_t>>(local_40);" (binary_expression "pcVar6 = use_facet<std::ctype<wchar_t>>(local_40)" (assignment_expression "pcVar6 = use_facet<std" identifier = (binary_expression "use_facet<std" identifier < identifier)) (ERROR "::ctype" : : identifier) < (binary_expression "wchar_t>>(local_40)" identifier >> (parenthesized_expression "(local_40)" ( identifier )))) ;) (labeled_statement "locale::~locale(local_40);" statement_identifier : (ERROR ":" :) (expression_statement "~locale(local_40);" (unary_expression "~locale(local_40)" ~ (call_expression "locale(local_40)" identifier (argument_list "(local_40)" ( identifier )))) ;)) (expression_statement "plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8)" * (cast_expression "(long **)(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8)" ( (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18) + 0xe8" (binary_expression "param_1 + *(long *)(*(long *)param_1 + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)param_1 + -0x18)" * (cast_expression "(long *)(*(long *)param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)param_1 + -0x18)" ( (binary_expression "*(long *)param_1 + -0x18" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]) {\n      wVar5 = *(wchar_t *)plVar1[2];\n    }\n    else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" if (parenthesized_expression "((wchar_t *)plVar1[2] < (wchar_t *)plVar1[3])" ( (binary_expression "(wchar_t *)plVar1[2] < (wchar_t *)plVar1[3]" (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])) < (cast_expression "(wchar_t *)plVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n      wVar5 = *(wchar_t *)plVar1[2];\n    }" { (expression_statement "wVar5 = *(wchar_t *)plVar1[2];" (assignment_expression "wVar5 = *(wchar_t *)plVar1[2]" identifier = (pointer_expression "*(wchar_t *)plVar1[2]" * (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" else (compound_statement "{\n                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { comment (expression_statement "wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (expression_statement "lVar10 = lVar10 + -1;" (assignment_expression "lVar10 = lVar10 + -1" identifier = (binary_expression "lVar10 + -1" identifier + number_literal)) ;) (expression_statement "lVar11 = 0;" (assignment_expression "lVar11 = 0" identifier = number_literal) ;) (while_statement "while (pwVar9 = param_2, lVar11 != lVar10) {\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" while (parenthesized_expression "(pwVar9 = param_2, lVar11 != lVar10)" ( (comma_expression "pwVar9 = param_2, lVar11 != lVar10" (assignment_expression "pwVar9 = param_2" identifier = identifier) , (binary_expression "lVar11 != lVar10" identifier != identifier)) )) (compound_statement "{\n      while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }\n      wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { (while_statement "while( true ) {\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        param_2 = pwVar9;\n        if (wVar5 == L'\xffffffff') goto LAB_0029ba00;\n                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */\n        cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);\n        local_50 = lVar11;\n        if (cVar3 != '\0') goto LAB_0029b955;\n        param_2 = pwVar9 + 1;\n        *pwVar9 = wVar5;\n        lVar11 = lVar11 + 1;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;\n        wVar5 = *(wchar_t *)plVar1[2];\n        pwVar9 = param_2;\n        if (lVar11 == lVar10) goto LAB_0029b94c;\n      }" { (expression_statement "param_2 = pwVar9;" (assignment_expression "param_2 = pwVar9" identifier = identifier) ;) (if_statement "if (wVar5 == L'\xffffffff') goto LAB_0029ba00;" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_0029ba00;" goto statement_identifier ;)) comment (expression_statement "cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5);" (assignment_expression "cVar3 = (**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5)" identifier = (call_expression "(**(code **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,wVar5)" (parenthesized_expression "(**(code **)(*(long *)pcVar6 + 0x10))" ( (pointer_expression "**(code **)(*(long *)pcVar6 + 0x10)" * (pointer_expression "*(code **)(*(long *)pcVar6 + 0x10)" * (cast_expression "(code **)(*(long *)pcVar6 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar6 + 0x10)" ( (binary_expression "*(long *)pcVar6 + 0x10" (pointer_expression "*(long *)pcVar6" * (cast_expression "(long *)pcVar6" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pcVar6,0x2000,wVar5)" ( identifier , number_literal , identifier )))) ;) (expression_statement "local_50 = lVar11;" (assignment_expression "local_50 = lVar11" identifier = identifier) ;) (if_statement "if (cVar3 != '\0') goto LAB_0029b955;" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0029b955;" goto statement_identifier ;)) (expression_statement "param_2 = pwVar9 + 1;" (assignment_expression "param_2 = pwVar9 + 1" identifier = (binary_expression "pwVar9 + 1" identifier + number_literal)) ;) (expression_statement "*pwVar9 = wVar5;" (assignment_expression "*pwVar9 = wVar5" (pointer_expression "*pwVar9" * identifier) = identifier) ;) (expression_statement "lVar11 = lVar11 + 1;" (assignment_expression "lVar11 = lVar11 + 1" identifier = (binary_expression "lVar11 + 1" identifier + number_literal)) ;) (expression_statement "piVar2 = (int *)plVar1[2];" (assignment_expression "piVar2 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar2 < (int *)plVar1[3])" ( (binary_expression "piVar2 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }" { (expression_statement "iVar4 = *piVar2;" (assignment_expression "iVar4 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar2 + 1);" (assignment_expression "plVar1[2] = (long)(piVar2 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar2 + 1)" ( (binary_expression "piVar2 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { comment (expression_statement "iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar4 == -1) {\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar7 = *(long *)param_1;\n          *param_2 = L'\0';\n          _Var8 = _S_eofbit;\n          *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" { (expression_statement "lVar7 = *(long *)param_1;" (assignment_expression "lVar7 = *(long *)param_1" identifier = (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*param_2 = L'\0';" (assignment_expression "*param_2 = L'\0'" (pointer_expression "*param_2" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "_Var8 = _S_eofbit;" (assignment_expression "_Var8 = _S_eofbit" identifier = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18) + 0x10" (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (if_statement "if ((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]) break;" if (parenthesized_expression "((wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2])" ( (binary_expression "(wchar_t *)plVar1[3] <= (wchar_t *)plVar1[2]" (cast_expression "(wchar_t *)plVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) )) (break_statement "break;" break ;)) (expression_statement "wVar5 = *(wchar_t *)plVar1[2];" (assignment_expression "wVar5 = *(wchar_t *)plVar1[2]" identifier = (pointer_expression "*(wchar_t *)plVar1[2]" * (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) (expression_statement "pwVar9 = param_2;" (assignment_expression "pwVar9 = param_2" identifier = identifier) ;) (if_statement "if (lVar11 == lVar10) goto LAB_0029b94c;" if (parenthesized_expression "(lVar11 == lVar10)" ( (binary_expression "lVar11 == lVar10" identifier == identifier) )) (goto_statement "goto LAB_0029b94c;" goto statement_identifier ;)) })) (expression_statement "wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "wVar5 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) })) (labeled_statement "LAB_0029b94c:\n    pwVar9 = param_2;" statement_identifier : (expression_statement "pwVar9 = param_2;" (assignment_expression "pwVar9 = param_2" identifier = identifier) ;)) (expression_statement "local_50 = lVar10;" (assignment_expression "local_50 = lVar10" identifier = identifier) ;) (if_statement "if (wVar5 == L'\xffffffff') {\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\nLAB_0029ba00:\n      lVar7 = *(long *)param_1;\n      *param_2 = L'\0';\n      _Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;\n      *(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" { (labeled_statement "LAB_0029ba00:\n      lVar7 = *(long *)param_1;" statement_identifier : (expression_statement "lVar7 = *(long *)param_1;" (assignment_expression "lVar7 = *(long *)param_1" identifier = (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier))) ;)) (expression_statement "*param_2 = L'\0';" (assignment_expression "*param_2 = L'\0'" (pointer_expression "*param_2" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "_Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit;" (assignment_expression "_Var8 = (-(uint)(lVar11 == 0) & 4) + _S_eofbit" identifier = (binary_expression "(-(uint)(lVar11 == 0) & 4) + _S_eofbit" (parenthesized_expression "(-(uint)(lVar11 == 0) & 4)" ( (binary_expression "-(uint)(lVar11 == 0) & 4" (unary_expression "-(uint)(lVar11 == 0)" - (call_expression "(uint)(lVar11 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(lVar11 == 0)" ( (binary_expression "lVar11 == 0" identifier == number_literal) )))) & number_literal) )) + identifier)) ;) (expression_statement "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18) + 0x10" (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (labeled_statement "LAB_0029b955:\n    lVar7 = *(long *)param_1;" statement_identifier : (expression_statement "lVar7 = *(long *)param_1;" (assignment_expression "lVar7 = *(long *)param_1" identifier = (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier))) ;)) (expression_statement "*pwVar9 = L'\0';" (assignment_expression "*pwVar9 = L'\0'" (pointer_expression "*pwVar9" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18) + 0x10)" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18) + 0x10" (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (if_statement "if (local_50 != 0) {\n      return param_1;\n    }" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) })) })) (expression_statement "_Var8 = _S_failbit;" (assignment_expression "_Var8 = _S_failbit" identifier = identifier) ;) (labeled_statement "LAB_0029b97d:\n  wios::clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));" statement_identifier : (labeled_statement "wios::clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20));" (call_expression "clear((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20))" identifier (argument_list "((wios *)(param_1 + *(long *)(lVar7 + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20))" ( (cast_expression "(wios *)(param_1 + *(long *)(lVar7 + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18))" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) ))) , (binary_expression "_Var8 | *(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20)" identifier | (pointer_expression "*(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20)" * (cast_expression "(_Ios_Iostate *)((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20)" ( (binary_expression "(wios *)(param_1 + *(long *)(lVar7 + -0x18)) + 0x20" (cast_expression "(wios *)(param_1 + *(long *)(lVar7 + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + *(long *)(lVar7 + -0x18))" ( (binary_expression "param_1 + *(long *)(lVar7 + -0x18)" identifier + (pointer_expression "*(long *)(lVar7 + -0x18)" * (cast_expression "(long *)(lVar7 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + -0x18)" ( (binary_expression "lVar7 + -0x18" identifier + number_literal) ))))) ))) + number_literal) ))))) ))) ;))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "long * FUN_0029b840(long *param_1,int *param_2)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_0029b840(long *param_1,int *param_2)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0029b840(long *param_1,int *param_2)" * (function_declarator "FUN_0029b840(long *param_1,int *param_2)" identifier (parameter_list "(long *param_1,int *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_41;" primitive_type identifier ;) (declaration "undefined1 local_40 [16];" type_identifier (array_declarator "local_40 [16]" identifier [ number_literal ]) ;) (expression_statement "FUN_00299dd0(&local_41,param_1,0);" (call_expression "FUN_00299dd0(&local_41,param_1,0)" identifier (argument_list "(&local_41,param_1,0)" ( (pointer_expression "&local_41" & identifier) , identifier , number_literal ))) ;) (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_41 != '\0')" ( (binary_expression "local_41 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" { (expression_statement "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);" (assignment_expression "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" identifier = (pointer_expression "*(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }" if (parenthesized_expression "(lVar8 < 1)" ( (binary_expression "lVar8 < 1" identifier < number_literal) )) (compound_statement "{\n      lVar8 = 0x7fffffffffffffff;\n    }" { (expression_statement "lVar8 = 0x7fffffffffffffff;" (assignment_expression "lVar8 = 0x7fffffffffffffff" identifier = number_literal) ;) })) (expression_statement "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);" (call_expression "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" identifier (argument_list "(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" ( identifier , (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) ))) ;) (expression_statement "plVar4 = (long *)FUN_002c36e0(local_40);" (assignment_expression "plVar4 = (long *)FUN_002c36e0(local_40)" identifier = (cast_expression "(long *)FUN_002c36e0(local_40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002c36e0(local_40)" identifier (argument_list "(local_40)" ( identifier ))))) ;) (expression_statement "FUN_00279260(local_40);" (call_expression "FUN_00279260(local_40)" identifier (argument_list "(local_40)" ( identifier ))) ;) (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" if (parenthesized_expression "((int *)plVar1[2] < (int *)plVar1[3])" ( (binary_expression "(int *)plVar1[2] < (int *)plVar1[3]" (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])) < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n      iVar3 = *(int *)plVar1[2];\n    }" { (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" identifier = (pointer_expression "*(int *)plVar1[2]" * (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" else (compound_statement "{\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (while_statement "while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" while (parenthesized_expression "(piVar7 = param_2, lVar9 != lVar8)" ( (comma_expression "piVar7 = param_2, lVar9 != lVar8" (assignment_expression "piVar7 = param_2" identifier = identifier) , (binary_expression "lVar9 != lVar8" identifier != identifier)) )) (compound_statement "{\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" { (while_statement "while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" { (expression_statement "param_2 = piVar7;" (assignment_expression "param_2 = piVar7" identifier = identifier) ;) (if_statement "if (iVar3 == -1) goto LAB_0029ba00;" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (goto_statement "goto LAB_0029ba00;" goto statement_identifier ;)) (expression_statement "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);" (assignment_expression "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" identifier = (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" ( (pointer_expression "**(code **)(*plVar4 + 0x10)" * (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x2000,iVar3)" ( identifier , number_literal , identifier )))) ;) (expression_statement "local_50 = lVar9;" (assignment_expression "local_50 = lVar9" identifier = identifier) ;) (if_statement "if (cVar2 != '\0') goto LAB_0029b955;" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0029b955;" goto statement_identifier ;)) (expression_statement "param_2 = piVar7 + 1;" (assignment_expression "param_2 = piVar7 + 1" identifier = (binary_expression "piVar7 + 1" identifier + number_literal)) ;) (expression_statement "*piVar7 = iVar3;" (assignment_expression "*piVar7 = iVar3" (pointer_expression "*piVar7" * identifier) = identifier) ;) (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (expression_statement "piVar7 = (int *)plVar1[2];" (assignment_expression "piVar7 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar7 < (int *)plVar1[3])" ( (binary_expression "piVar7 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }" { (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" identifier = (pointer_expression "*piVar7" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar7 + 1);" (assignment_expression "plVar1[2] = (long)(piVar7 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar7 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar7 + 1)" ( (binary_expression "piVar7 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" { (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (if_statement "if ((int *)plVar1[3] <= (int *)plVar1[2]) break;" if (parenthesized_expression "((int *)plVar1[3] <= (int *)plVar1[2])" ( (binary_expression "(int *)plVar1[3] <= (int *)plVar1[2]" (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) )) (break_statement "break;" break ;)) (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" identifier = (pointer_expression "*(int *)plVar1[2]" * (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ])))) ;) (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" identifier = identifier) ;) (if_statement "if (lVar9 == lVar8) goto LAB_0029b94c;" if (parenthesized_expression "(lVar9 == lVar8)" ( (binary_expression "lVar9 == lVar8" identifier == identifier) )) (goto_statement "goto LAB_0029b94c;" goto statement_identifier ;)) })) (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) })) (labeled_statement "LAB_0029b94c:\n    piVar7 = param_2;" statement_identifier : (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" identifier = identifier) ;)) (expression_statement "local_50 = lVar8;" (assignment_expression "local_50 = lVar8" identifier = identifier) ;) (if_statement "if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" { (labeled_statement "LAB_0029ba00:\n      lVar6 = *param_1;" statement_identifier : (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;" (assignment_expression "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(lVar9 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(lVar9 == 0) & 4)" ( (binary_expression "-(uint)(lVar9 == 0) & 4" (unary_expression "-(uint)(lVar9 == 0)" - (call_expression "(uint)(lVar9 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )))) & number_literal) )) + number_literal)) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0029b97d;" goto statement_identifier ;) })) (labeled_statement "LAB_0029b955:\n    lVar6 = *param_1;" statement_identifier : (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "*piVar7 = 0;" (assignment_expression "*piVar7 = 0" (pointer_expression "*piVar7" * identifier) = number_literal) ;) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" * (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" ( (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) ))))) + number_literal) )))) = number_literal) ;) (if_statement "if (local_50 != 0) {\n      return param_1;\n    }" if (parenthesized_expression "(local_50 != 0)" ( (binary_expression "local_50 != 0" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) })) })) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" identifier = number_literal) ;) (labeled_statement "LAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" statement_identifier : (expression_statement "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" (assignment_expression "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(lVar6 + -0x18) + (long)param_1" (pointer_expression "*(long *)(lVar6 + -0x18)" * (cast_expression "(long *)(lVar6 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -0x18)" ( (binary_expression "lVar6 + -0x18" identifier + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;)) (expression_statement "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));" (call_expression "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" identifier (argument_list "(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" ( identifier , (binary_expression "uVar5 | *(uint *)(lVar6 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar6 + 0x20)" * (cast_expression "(uint *)(lVar6 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x20)" ( (binary_expression "lVar6 + 0x20" identifier + number_literal) ))))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != IDENT)) )) (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) = LIT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) )))) & LIT) )) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) = LIT) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) (return_statement return IDENT ;) })))
(function_definition "long * FUN_0029b840(long *param_1,int *param_2)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_0029b840(long *param_1,int *param_2)" (* "*") (function_declarator "FUN_0029b840(long *param_1,int *param_2)" (identifier "FUN_0029b840") (parameter_list "(long *param_1,int *param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  long *plVar4;\n  uint uVar5;\n  long lVar6;\n  int *piVar7;\n  long lVar8;\n  long lVar9;\n  long local_50;\n  char local_41;\n  undefined1 local_40 [16];\n  \n  FUN_00299dd0(&local_41,param_1,0);\n  lVar6 = *param_1;\n  if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }\n  uVar5 = 4;\nLAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));\n  return param_1;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "char local_41;" (primitive_type "char") (identifier "local_41") (; ";")) (declaration "undefined1 local_40 [16];" (type_identifier "undefined1") (array_declarator "local_40 [16]" (identifier "local_40") ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "FUN_00299dd0(&local_41,param_1,0);" (call_expression "FUN_00299dd0(&local_41,param_1,0)" (identifier "FUN_00299dd0") (argument_list "(&local_41,param_1,0)" (( "(") (pointer_expression "&local_41" (& "&") (identifier "local_41")) (, ",") (identifier "param_1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" (identifier "lVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (local_41 != '\0') {\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" (if "if") (parenthesized_expression "(local_41 != '\0')" (( "(") (binary_expression "local_41 != '\0'" (identifier "local_41") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);\n    if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }\n    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);\n                    \n    plVar4 = (long *)FUN_002c36e0(local_40);\n    FUN_00279260(local_40);\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\n    lVar8 = lVar8 + -1;\n    lVar9 = 0;\n    while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }\nLAB_0029b94c:\n    piVar7 = param_2;\n    local_50 = lVar8;\n    if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }\nLAB_0029b955:\n    lVar6 = *param_1;\n    *piVar7 = 0;\n    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n    if (local_50 != 0) {\n      return param_1;\n    }\n  }" ({ "{") (expression_statement "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);" (assignment_expression "lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (* "*") (cast_expression "(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (lVar8 < 1) {\n      lVar8 = 0x7fffffffffffffff;\n    }" (if "if") (parenthesized_expression "(lVar8 < 1)" (( "(") (binary_expression "lVar8 < 1" (identifier "lVar8") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      lVar8 = 0x7fffffffffffffff;\n    }" ({ "{") (expression_statement "lVar8 = 0x7fffffffffffffff;" (assignment_expression "lVar8 = 0x7fffffffffffffff" (identifier "lVar8") (= "=") (number_literal "0x7fffffffffffffff")) (; ";")) (} "}"))) (expression_statement "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);" (call_expression "FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" (identifier "FUN_00278b20") (argument_list "(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0)" (( "(") (identifier "local_40") (, ",") (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "plVar4 = (long *)FUN_002c36e0(local_40);" (assignment_expression "plVar4 = (long *)FUN_002c36e0(local_40)" (identifier "plVar4") (= "=") (cast_expression "(long *)FUN_002c36e0(local_40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002c36e0(local_40)" (identifier "FUN_002c36e0") (argument_list "(local_40)" (( "(") (identifier "local_40") () ")"))))) (; ";")) (expression_statement "FUN_00279260(local_40);" (call_expression "FUN_00279260(local_40)" (identifier "FUN_00279260") (argument_list "(local_40)" (( "(") (identifier "local_40") () ")"))) (; ";")) (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (identifier "plVar1") (= "=") (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (* "*") (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (( "(") (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0xe8")) () ")"))))) (; ";")) (if_statement "if ((int *)plVar1[2] < (int *)plVar1[3]) {\n      iVar3 = *(int *)plVar1[2];\n    }\n    else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" (if "if") (parenthesized_expression "((int *)plVar1[2] < (int *)plVar1[3])" (( "(") (binary_expression "(int *)plVar1[2] < (int *)plVar1[3]" (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]"))) (< "<") (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n      iVar3 = *(int *)plVar1[2];\n    }" ({ "{") (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" (identifier "iVar3") (= "=") (pointer_expression "*(int *)plVar1[2]" (* "*") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (} "}")) (else_clause "else {\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" (else "else") (compound_statement "{\n                    \n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" ({ "{") (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x48)" (* "*") (cast_expression "(code **)(*plVar1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x48)" (( "(") (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")")))) (; ";")) (} "}")))) (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + -1" (identifier "lVar8") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" (identifier "lVar9") (= "=") (number_literal "0")) (; ";")) (while_statement "while (piVar7 = param_2, lVar9 != lVar8) {\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" (while "while") (parenthesized_expression "(piVar7 = param_2, lVar9 != lVar8)" (( "(") (comma_expression "piVar7 = param_2, lVar9 != lVar8" (assignment_expression "piVar7 = param_2" (identifier "piVar7") (= "=") (identifier "param_2")) (, ",") (binary_expression "lVar9 != lVar8" (identifier "lVar9") (!= "!=") (identifier "lVar8"))) () ")")) (compound_statement "{\n      while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }\n      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n    }" ({ "{") (while_statement "while( true ) {\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        param_2 = piVar7;\n        if (iVar3 == -1) goto LAB_0029ba00;\n                    \n        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);\n        local_50 = lVar9;\n        if (cVar2 != '\0') goto LAB_0029b955;\n        param_2 = piVar7 + 1;\n        *piVar7 = iVar3;\n        lVar9 = lVar9 + 1;\n        piVar7 = (int *)plVar1[2];\n        if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }\n        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;\n        iVar3 = *(int *)plVar1[2];\n        piVar7 = param_2;\n        if (lVar9 == lVar8) goto LAB_0029b94c;\n      }" ({ "{") (expression_statement "param_2 = piVar7;" (assignment_expression "param_2 = piVar7" (identifier "param_2") (= "=") (identifier "piVar7")) (; ";")) (if_statement "if (iVar3 == -1) goto LAB_0029ba00;" (if "if") (parenthesized_expression "(iVar3 == -1)" (( "(") (binary_expression "iVar3 == -1" (identifier "iVar3") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_0029ba00;" (goto "goto") (statement_identifier "LAB_0029ba00") (; ";"))) (expression_statement "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);" (assignment_expression "cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" (identifier "cVar2") (= "=") (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x10)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x10)" (* "*") (cast_expression "(code **)(*plVar4 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x10)" (( "(") (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(plVar4,0x2000,iVar3)" (( "(") (identifier "plVar4") (, ",") (number_literal "0x2000") (, ",") (identifier "iVar3") () ")")))) (; ";")) (expression_statement "local_50 = lVar9;" (assignment_expression "local_50 = lVar9" (identifier "local_50") (= "=") (identifier "lVar9")) (; ";")) (if_statement "if (cVar2 != '\0') goto LAB_0029b955;" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_0029b955;" (goto "goto") (statement_identifier "LAB_0029b955") (; ";"))) (expression_statement "param_2 = piVar7 + 1;" (assignment_expression "param_2 = piVar7 + 1" (identifier "param_2") (= "=") (binary_expression "piVar7 + 1" (identifier "piVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*piVar7 = iVar3;" (assignment_expression "*piVar7 = iVar3" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" (identifier "lVar9") (= "=") (binary_expression "lVar9 + 1" (identifier "lVar9") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar7 = (int *)plVar1[2];" (assignment_expression "piVar7 = (int *)plVar1[2]" (identifier "piVar7") (= "=") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (piVar7 < (int *)plVar1[3]) {\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }\n        else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" (if "if") (parenthesized_expression "(piVar7 < (int *)plVar1[3])" (( "(") (binary_expression "piVar7 < (int *)plVar1[3]" (identifier "piVar7") (< "<") (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n          iVar3 = *piVar7;\n          plVar1[2] = (long)(piVar7 + 1);\n        }" ({ "{") (expression_statement "iVar3 = *piVar7;" (assignment_expression "iVar3 = *piVar7" (identifier "iVar3") (= "=") (pointer_expression "*piVar7" (* "*") (identifier "piVar7"))) (; ";")) (expression_statement "plVar1[2] = (long)(piVar7 + 1);" (assignment_expression "plVar1[2] = (long)(piVar7 + 1)" (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(long)(piVar7 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(piVar7 + 1)" (( "(") (binary_expression "piVar7 + 1" (identifier "piVar7") (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" (else "else") (compound_statement "{\n                    \n          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" ({ "{") (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x50)" (* "*") (cast_expression "(code **)(*plVar1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x50)" (( "(") (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")")))) (; ";")) (} "}")))) (if_statement "if (iVar3 == -1) {\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" (if "if") (parenthesized_expression "(iVar3 == -1)" (( "(") (binary_expression "iVar3 == -1" (identifier "iVar3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n          lVar6 = *param_1;\n          *param_2 = 0;\n          uVar5 = 2;\n          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n          goto LAB_0029b97d;\n        }" ({ "{") (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" (identifier "lVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" (identifier "uVar5") (= "=") (number_literal "2")) (; ";")) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0029b97d;" (goto "goto") (statement_identifier "LAB_0029b97d") (; ";")) (} "}"))) (if_statement "if ((int *)plVar1[3] <= (int *)plVar1[2]) break;" (if "if") (parenthesized_expression "((int *)plVar1[3] <= (int *)plVar1[2])" (( "(") (binary_expression "(int *)plVar1[3] <= (int *)plVar1[2]" (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar3 = *(int *)plVar1[2];" (assignment_expression "iVar3 = *(int *)plVar1[2]" (identifier "iVar3") (= "=") (pointer_expression "*(int *)plVar1[2]" (* "*") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" (identifier "piVar7") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (lVar9 == lVar8) goto LAB_0029b94c;" (if "if") (parenthesized_expression "(lVar9 == lVar8)" (( "(") (binary_expression "lVar9 == lVar8" (identifier "lVar9") (== "==") (identifier "lVar8")) () ")")) (goto_statement "goto LAB_0029b94c;" (goto "goto") (statement_identifier "LAB_0029b94c") (; ";"))) (} "}"))) (expression_statement "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x48)" (* "*") (cast_expression "(code **)(*plVar1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x48)" (( "(") (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")")))) (; ";")) (} "}"))) (labeled_statement "LAB_0029b94c:\n    piVar7 = param_2;" (statement_identifier "LAB_0029b94c") (: ":") (expression_statement "piVar7 = param_2;" (assignment_expression "piVar7 = param_2" (identifier "piVar7") (= "=") (identifier "param_2")) (; ";"))) (expression_statement "local_50 = lVar8;" (assignment_expression "local_50 = lVar8" (identifier "local_50") (= "=") (identifier "lVar8")) (; ";")) (if_statement "if (iVar3 == -1) {\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" (if "if") (parenthesized_expression "(iVar3 == -1)" (( "(") (binary_expression "iVar3 == -1" (identifier "iVar3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\nLAB_0029ba00:\n      lVar6 = *param_1;\n      *param_2 = 0;\n      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;\n      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;\n      goto LAB_0029b97d;\n    }" ({ "{") (labeled_statement "LAB_0029ba00:\n      lVar6 = *param_1;" (statement_identifier "LAB_0029ba00") (: ":") (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" (identifier "lVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;" (assignment_expression "uVar5 = (-(uint)(lVar9 == 0) & 4) + 2" (identifier "uVar5") (= "=") (binary_expression "(-(uint)(lVar9 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(lVar9 == 0) & 4)" (( "(") (binary_expression "-(uint)(lVar9 == 0) & 4" (unary_expression "-(uint)(lVar9 == 0)" (- "-") (call_expression "(uint)(lVar9 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(lVar9 == 0)" (( "(") (binary_expression "lVar9 == 0" (identifier "lVar9") (== "==") (number_literal "0")) () ")")))) (& "&") (number_literal "4")) () ")")) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0029b97d;" (goto "goto") (statement_identifier "LAB_0029b97d") (; ";")) (} "}"))) (labeled_statement "LAB_0029b955:\n    lVar6 = *param_1;" (statement_identifier "LAB_0029b955") (: ":") (expression_statement "lVar6 = *param_1;" (assignment_expression "lVar6 = *param_1" (identifier "lVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (expression_statement "*piVar7 = 0;" (assignment_expression "*piVar7 = 0" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;" (assignment_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0" (pointer_expression "*(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (* "*") (cast_expression "(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10)" (( "(") (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18) + 0x10" (binary_expression "(long)param_1 + *(long *)(lVar6 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (local_50 != 0) {\n      return param_1;\n    }" (if "if") (parenthesized_expression "(local_50 != 0)" (( "(") (binary_expression "local_50 != 0" (identifier "local_50") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return param_1;\n    }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" (identifier "uVar5") (= "=") (number_literal "4")) (; ";")) (labeled_statement "LAB_0029b97d:\n  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" (statement_identifier "LAB_0029b97d") (: ":") (expression_statement "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;" (assignment_expression "lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1" (identifier "lVar6") (= "=") (binary_expression "*(long *)(lVar6 + -0x18) + (long)param_1" (pointer_expression "*(long *)(lVar6 + -0x18)" (* "*") (cast_expression "(long *)(lVar6 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -0x18)" (( "(") (binary_expression "lVar6 + -0x18" (identifier "lVar6") (+ "+") (number_literal "-0x18")) () ")")))) (+ "+") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")))) (; ";"))) (expression_statement "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));" (call_expression "FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" (identifier "FUN_0029d320") (argument_list "(lVar6,uVar5 | *(uint *)(lVar6 + 0x20))" (( "(") (identifier "lVar6") (, ",") (binary_expression "uVar5 | *(uint *)(lVar6 + 0x20)" (identifier "uVar5") (| "|") (pointer_expression "*(uint *)(lVar6 + 0x20)" (* "*") (cast_expression "(uint *)(lVar6 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + 0x20)" (( "(") (binary_expression "lVar6 + 0x20" (identifier "lVar6") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::TEMPNAMEPLACEHOLDERVALUE(std::wistream&, wchar_t*) */

wistream * var_6::operator>>(wistream *var_2,type_1 *param_2)

{
  long *plVar1;
  int *var_11;
  char var_9;
  int var_12;
  type_1 var_8;
  type_2 *pcVar6;
  long var_3;
  type_3 var_16;
  type_1 *var_10;
  long var_4;
  long var_7;
  long var_14;
  type_4 var_1;
  type_5 local_40 [16];
  
  wistream::sentry::type_4(&var_1,var_2,false);
  var_3 = *(long *)var_2;
  if (var_1 != (type_4)0x0) {
    var_4 = *(long *)(var_2 + *(long *)(var_3 + -0x18) + 0x10);
    if (var_4 < 1) {
      var_4 = 0x7fffffffffffffff;
    }
    locale::type_5(local_40,(type_5 *)(var_2 + *(long *)(var_3 + -0x18) + 0xd0));
                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */
    pcVar6 = var_5<var_6::type_2<type_1>>(local_40);
    locale::~type_5(local_40);
    plVar1 = *(long **)(var_2 + *(long *)(*(long *)var_2 + -0x18) + 0xe8);
    if ((type_1 *)plVar1[2] < (type_1 *)plVar1[3]) {
      var_8 = *(type_1 *)plVar1[2];
    }
    else {
                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */
      var_8 = (**(type_6 **)(*plVar1 + 0x48))(plVar1);
    }
    var_4 = var_4 + -1;
    var_7 = 0;
    while (var_10 = param_2, var_7 != var_4) {
      while( true ) {
        param_2 = var_10;
        if (var_8 == L'\xffffffff') goto LAB_0029ba00;
                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */
        var_9 = (**(type_6 **)(*(long *)pcVar6 + 0x10))(pcVar6,0x2000,var_8);
        var_14 = var_7;
        if (var_9 != '\0') goto LAB_0029b955;
        param_2 = var_10 + 1;
        *var_10 = var_8;
        var_7 = var_7 + 1;
        var_11 = (int *)plVar1[2];
        if (var_11 < (int *)plVar1[3]) {
          var_12 = *var_11;
          plVar1[2] = (long)(var_11 + 1);
        }
        else {
                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */
          var_12 = (**(type_6 **)(*plVar1 + 0x50))(plVar1);
        }
        if (var_12 == -1) {
          var_3 = *(long *)var_2;
          *param_2 = L'\0';
          var_16 = var_13;
          *(type_7 *)(var_2 + *(long *)(var_3 + -0x18) + 0x10) = 0;
          goto LAB_0029b97d;
        }
        if ((type_1 *)plVar1[3] <= (type_1 *)plVar1[2]) break;
        var_8 = *(type_1 *)plVar1[2];
        var_10 = param_2;
        if (var_7 == var_4) goto LAB_0029b94c;
      }
      var_8 = (**(type_6 **)(*plVar1 + 0x48))(plVar1);
    }
LAB_0029b94c:
    var_10 = param_2;
    var_14 = var_4;
    if (var_8 == L'\xffffffff') {
LAB_0029ba00:
      var_3 = *(long *)var_2;
      *param_2 = L'\0';
      var_16 = (-(uint)(var_7 == 0) & 4) + var_13;
      *(type_7 *)(var_2 + *(long *)(var_3 + -0x18) + 0x10) = 0;
      goto LAB_0029b97d;
    }
LAB_0029b955:
    var_3 = *(long *)var_2;
    *var_10 = L'\0';
    *(type_7 *)(var_2 + *(long *)(var_3 + -0x18) + 0x10) = 0;
    if (var_14 != 0) {
      return var_2;
    }
  }
  var_16 = _S_failbit;
LAB_0029b97d:
  wios::var_15((type_8 *)(var_2 + *(long *)(var_3 + -0x18)),
              var_16 | *(type_3 *)((type_8 *)(var_2 + *(long *)(var_3 + -0x18)) + 0x20));
  return var_2;
}


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

long * MASKED(long *param_1,int *param_2)

{
  long *plVar1;
  char cVar2;
  int iVar3;
  long *plVar4;
  uint uVar5;
  long lVar6;
  int *piVar7;
  long lVar8;
  long lVar9;
  long local_50;
  char local_41;
  undefined1 local_40 [16];
  
  FUN_00299dd0(&local_41,param_1,0);
  lVar6 = *param_1;
  if (local_41 != '\0') {
    lVar8 = *(long *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10);
    if (lVar8 < 1) {
      lVar8 = 0x7fffffffffffffff;
    }
    FUN_00278b20(local_40,(long)param_1 + *(long *)(lVar6 + -0x18) + 0xd0);
                    /* try { // try from 0029b8a4 to 0029b8a8 has its CatchHandler @ 0029ba3e */
    plVar4 = (long *)FUN_002c36e0(local_40);
    FUN_00279260(local_40);
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((int *)plVar1[2] < (int *)plVar1[3]) {
      iVar3 = *(int *)plVar1[2];
    }
    else {
                    /* try { // try from 0029b9f6 to 0029b9f8 has its CatchHandler @ 0029ba3a */
      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
    lVar8 = lVar8 + -1;
    lVar9 = 0;
    while (piVar7 = param_2, lVar9 != lVar8) {
      while( true ) {
        param_2 = piVar7;
        if (iVar3 == -1) goto LAB_0029ba00;
                    /* try { // try from 0029b8fc to 0029b8fe has its CatchHandler @ 0029ba3c */
        cVar2 = (**(code **)(*plVar4 + 0x10))(plVar4,0x2000,iVar3);
        local_50 = lVar9;
        if (cVar2 != '\0') goto LAB_0029b955;
        param_2 = piVar7 + 1;
        *piVar7 = iVar3;
        lVar9 = lVar9 + 1;
        piVar7 = (int *)plVar1[2];
        if (piVar7 < (int *)plVar1[3]) {
          iVar3 = *piVar7;
          plVar1[2] = (long)(piVar7 + 1);
        }
        else {
                    /* try { // try from 0029b9a6 to 0029b9e0 has its CatchHandler @ 0029ba3c */
          iVar3 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar3 == -1) {
          lVar6 = *param_1;
          *param_2 = 0;
          uVar5 = 2;
          *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
          goto LAB_0029b97d;
        }
        if ((int *)plVar1[3] <= (int *)plVar1[2]) break;
        iVar3 = *(int *)plVar1[2];
        piVar7 = param_2;
        if (lVar9 == lVar8) goto LAB_0029b94c;
      }
      iVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);
    }
LAB_0029b94c:
    piVar7 = param_2;
    local_50 = lVar8;
    if (iVar3 == -1) {
LAB_0029ba00:
      lVar6 = *param_1;
      *param_2 = 0;
      uVar5 = (-(uint)(lVar9 == 0) & 4) + 2;
      *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
      goto LAB_0029b97d;
    }
LAB_0029b955:
    lVar6 = *param_1;
    *piVar7 = 0;
    *(undefined8 *)((long)param_1 + *(long *)(lVar6 + -0x18) + 0x10) = 0;
    if (local_50 != 0) {
      return param_1;
    }
  }
  uVar5 = 4;
LAB_0029b97d:
  lVar6 = *(long *)(lVar6 + -0x18) + (long)param_1;
  FUN_0029d320(lVar6,uVar5 | *(uint *)(lVar6 + 0x20));
  return param_1;
}

