
/* std::istream::get(std::streambuf&, char) */

istream * __thiscall std::istream::get(istream *this,streambuf *param_1,char param_2)

{
  byte bVar1;
  long *plVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  byte *pbVar6;
  uint uVar7;
  _Ios_Iostate _Var8;
  sentry local_29 [9];
  
  *(undefined8 *)(this + 8) = 0;
  sentry::sentry(local_29,this,true);
  if (local_29[0] == (sentry)0x0) {
LAB_00297c00:
    if (*(long *)(this + 8) != 0) {
      return this;
    }
    _Var8 = _S_failbit;
  }
  else {
    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);
    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;
    bVar1 = *(byte *)plVar2[2];
    uVar3 = (uint)bVar1;
    uVar7 = (uint)bVar1;
    do {
      while( true ) {
        if ((byte)param_2 == uVar3) goto LAB_00297c00;
        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {
          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;
          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;
        }
        else {
          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);
          if (iVar4 == -1) goto LAB_00297c00;
        }
        pbVar5 = (byte *)plVar2[2];
        pbVar6 = (byte *)plVar2[3];
        *(long *)(this + 8) = *(long *)(this + 8) + 1;
        if (pbVar5 < pbVar6) {
          pbVar5 = pbVar5 + 1;
          plVar2[2] = (long)pbVar5;
        }
        else {
          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);
          if (iVar4 == -1) goto LAB_00297c50;
          pbVar5 = (byte *)plVar2[2];
          pbVar6 = (byte *)plVar2[3];
        }
        if (pbVar6 <= pbVar5) break;
        uVar7 = (uint)*pbVar5;
        uVar3 = (uint)*pbVar5;
      }
LAB_00297c30:
                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */
      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);
      uVar7 = uVar3 & 0xff;
    } while (uVar3 != 0xffffffff);
LAB_00297c50:
    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;
  }
  ios::clear((ios *)(this + *(long *)(*(long *)this + -0x18)),
             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));
  return this;
}



long * FUN_00297b50(long *param_1,long *param_2,uint param_3)

{
  byte bVar1;
  long *plVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  byte *pbVar6;
  uint uVar7;
  long lVar8;
  char local_29 [9];
  
  param_1[1] = 0;
  FUN_00296fe0(local_29,param_1,1);
  if (local_29[0] == '\0') {
LAB_00297c00:
    if (param_1[1] != 0) {
      return param_1;
    }
    uVar7 = 4;
  }
  else {
    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;
    bVar1 = *(byte *)plVar2[2];
    uVar3 = (uint)bVar1;
    uVar7 = (uint)bVar1;
    do {
      while( true ) {
        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;
        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {
          *(undefined1 *)param_2[5] = (char)uVar7;
          param_2[5] = param_2[5] + 1;
        }
        else {
          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);
          if (iVar4 == -1) goto LAB_00297c00;
        }
        pbVar5 = (byte *)plVar2[2];
        pbVar6 = (byte *)plVar2[3];
        param_1[1] = param_1[1] + 1;
        if (pbVar5 < pbVar6) {
          pbVar5 = pbVar5 + 1;
          plVar2[2] = (long)pbVar5;
        }
        else {
          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);
          if (iVar4 == -1) goto LAB_00297c50;
          pbVar5 = (byte *)plVar2[2];
          pbVar6 = (byte *)plVar2[3];
        }
        if (pbVar6 <= pbVar5) break;
        uVar7 = (uint)*pbVar5;
        uVar3 = (uint)*pbVar5;
      }
LAB_00297c30:
                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */
      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);
      uVar7 = uVar3 & 0xff;
    } while (uVar3 != 0xffffffff);
LAB_00297c50:
    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;
  }
  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;
  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));
  return param_1;
}


PUSH R13
MOV R13D,EDX
MOV EDX,0x1
PUSH R12
MOV R12,RDI
PUSH RBP
PUSH RBX
MOV RBX,RSI
MOV RSI,R12
SUB RSP,0x18
MOV qword ptr [RDI + 0x8],0x0
LEA RDI,[RSP + 0xf]
CALL 0x00296fe0
CMP byte ptr [RSP + 0xf],0x0
JZ 0x00297c00
MOV RAX,qword ptr [R12]
MOVZX R13D,R13B
MOV RAX,qword ptr [RAX + -0x18]
MOV RBP,qword ptr [R12 + RAX*0x1 + 0xe8]
MOV RAX,qword ptr [RBP + 0x10]
CMP qword ptr [RBP + 0x18],RAX
JBE 0x00297c30
MOVZX EAX,byte ptr [RAX]
MOV ESI,EAX
CMP R13D,EAX
JZ 0x00297c00
MOV RAX,qword ptr [RBX + 0x28]
CMP RAX,qword ptr [RBX + 0x30]
JNC 0x00297c60
MOV byte ptr [RAX],SIL
ADD qword ptr [RBX + 0x28],0x1
MOV RAX,qword ptr [RBP + 0x10]
MOV RDX,qword ptr [RBP + 0x18]
ADD qword ptr [R12 + 0x8],0x1
CMP RAX,RDX
JNC 0x00297c78
ADD RAX,0x1
MOV qword ptr [RBP + 0x10],RAX
CMP RAX,RDX
JNC 0x00297c30
MOVZX ESI,byte ptr [RAX]
MOVZX EAX,SIL
CMP R13D,EAX
JNZ 0x00297bb0
NOP word ptr CS:[RAX + RAX*0x1]
CMP qword ptr [R12 + 0x8],0x0
JNZ 0x00297c20
MOV ESI,0x4
MOV RAX,qword ptr [R12]
MOV RDI,qword ptr [RAX + -0x18]
ADD RDI,R12
OR ESI,dword ptr [RDI + 0x20]
CALL 0x0029c920
ADD RSP,0x18
MOV RAX,R12
POP RBX
POP RBP
POP R12
POP R13
RET
MOV RAX,qword ptr [RBP]
MOV RDI,RBP
CALL qword ptr [RAX + 0x48]
MOVZX ESI,AL
CMP EAX,-0x1
JNZ 0x00297bab
NOP word ptr CS:[RAX + RAX*0x1]
CMP qword ptr [R12 + 0x8],0x1
SBB ESI,ESI
AND ESI,0x4
ADD ESI,0x2
JMP 0x00297c0d
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x68]
CMP EAX,-0x1
JNZ 0x00297bc6
JMP 0x00297c00
MOV RAX,qword ptr [RBP]
MOV RDI,RBP
CALL qword ptr [RAX + 0x50]
CMP EAX,-0x1
JZ 0x00297c50
MOV RAX,qword ptr [RBP + 0x10]
MOV RDX,qword ptr [RBP + 0x18]
JMP 0x00297be5
(translation_unit "long * FUN_00297b50(long *param_1,long *param_2,uint param_3)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_00297b50(long *param_1,long *param_2,uint param_3)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00297b50(long *param_1,long *param_2,uint param_3)" * (function_declarator "FUN_00297b50(long *param_1,long *param_2,uint param_3)" identifier (parameter_list "(long *param_1,long *param_2,uint param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_29 [9];" primitive_type (array_declarator "local_29 [9]" identifier [ number_literal ]) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00296fe0(local_29,param_1,1);" (call_expression "FUN_00296fe0(local_29,param_1,1)" identifier (argument_list "(local_29,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" if (parenthesized_expression "(local_29[0] == '\0')" ( (binary_expression "local_29[0] == '\0'" (subscript_expression "local_29[0]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }" { (labeled_statement "LAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }" statement_identifier : (if_statement "if (param_1[1] != 0) {\n      return param_1;\n    }" if (parenthesized_expression "(param_1[1] != 0)" ( (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) }))) (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" identifier = number_literal) ;) }) (else_clause "else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" else (compound_statement "{\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" { (expression_statement "plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar2 = *(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 ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;" if (parenthesized_expression "((byte *)plVar2[3] <= (byte *)plVar2[2])" ( (binary_expression "(byte *)plVar2[3] <= (byte *)plVar2[2]" (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ])) <= (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00297c30;" goto statement_identifier ;)) (expression_statement "bVar1 = *(byte *)plVar2[2];" (assignment_expression "bVar1 = *(byte *)plVar2[2]" identifier = (pointer_expression "*(byte *)plVar2[2]" * (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ])))) ;) (expression_statement "uVar3 = (uint)bVar1;" (assignment_expression "uVar3 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar7 = (uint)bVar1;" (assignment_expression "uVar7 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (do_statement "do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);" do (compound_statement "{\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    }" { (while_statement "while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" { (if_statement "if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;" if (parenthesized_expression "((param_3 & 0xff) == uVar3)" ( (binary_expression "(param_3 & 0xff) == uVar3" (parenthesized_expression "(param_3 & 0xff)" ( (binary_expression "param_3 & 0xff" identifier & number_literal) )) == identifier) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) (if_statement "if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" if (parenthesized_expression "((undefined1 *)param_2[5] < (undefined1 *)param_2[6])" ( (binary_expression "(undefined1 *)param_2[5] < (undefined1 *)param_2[6]" (cast_expression "(undefined1 *)param_2[5]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[5]" identifier [ number_literal ])) < (cast_expression "(undefined1 *)param_2[6]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[6]" identifier [ number_literal ]))) )) (compound_statement "{\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }" { (expression_statement "*(undefined1 *)param_2[5] = (char)uVar7;" (assignment_expression "*(undefined1 *)param_2[5] = (char)uVar7" (pointer_expression "*(undefined1 *)param_2[5]" * (cast_expression "(undefined1 *)param_2[5]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[5]" identifier [ number_literal ]))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "param_2[5] = param_2[5] + 1;" (assignment_expression "param_2[5] = param_2[5] + 1" (subscript_expression "param_2[5]" identifier [ number_literal ]) = (binary_expression "param_2[5] + 1" (subscript_expression "param_2[5]" identifier [ number_literal ]) + number_literal)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" { (expression_statement "iVar4 = (**(code **)(*param_2 + 0x68))(param_2);" (assignment_expression "iVar4 = (**(code **)(*param_2 + 0x68))(param_2)" identifier = (call_expression "(**(code **)(*param_2 + 0x68))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x68))" ( (pointer_expression "**(code **)(*param_2 + 0x68)" * (pointer_expression "*(code **)(*param_2 + 0x68)" * (cast_expression "(code **)(*param_2 + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x68)" ( (binary_expression "*param_2 + 0x68" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c00;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) }))) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" if (parenthesized_expression "(pbVar5 < pbVar6)" ( (binary_expression "pbVar5 < pbVar6" identifier < identifier) )) (compound_statement "{\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }" { (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "plVar2[2] = (long)pbVar5;" (assignment_expression "plVar2[2] = (long)pbVar5" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (cast_expression "(long)pbVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" { (expression_statement "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);" (assignment_expression "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x50))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x50))" ( (pointer_expression "**(code **)(*plVar2 + 0x50)" * (pointer_expression "*(code **)(*plVar2 + 0x50)" * (cast_expression "(code **)(*plVar2 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x50)" ( (binary_expression "*plVar2 + 0x50" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c50;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c50;" goto statement_identifier ;)) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) }))) (if_statement "if (pbVar6 <= pbVar5) break;" if (parenthesized_expression "(pbVar6 <= pbVar5)" ( (binary_expression "pbVar6 <= pbVar5" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "uVar3 = (uint)*pbVar5;" (assignment_expression "uVar3 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) })) (labeled_statement "LAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" statement_identifier : comment (expression_statement "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" (assignment_expression "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" ( (pointer_expression "**(code **)(*plVar2 + 0x48)" * (pointer_expression "*(code **)(*plVar2 + 0x48)" * (cast_expression "(code **)(*plVar2 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x48)" ( (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;)) (expression_statement "uVar7 = uVar3 & 0xff;" (assignment_expression "uVar7 = uVar3 & 0xff" identifier = (binary_expression "uVar3 & 0xff" identifier & number_literal)) ;) }) while (parenthesized_expression "(uVar3 != 0xffffffff)" ( (binary_expression "uVar3 != 0xffffffff" identifier != number_literal) )) ;) (labeled_statement "LAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" statement_identifier : (expression_statement "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" (assignment_expression "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(param_1[1] == 0) & 4) + 2" (parenthesized_expression "(-(uint)(param_1[1] == 0) & 4)" ( (binary_expression "-(uint)(param_1[1] == 0) & 4" (unary_expression "-(uint)(param_1[1] == 0)" - (call_expression "(uint)(param_1[1] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )))) & number_literal) )) + number_literal)) ;)) }))) (expression_statement "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (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) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));" (call_expression "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" identifier (argument_list "(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" ( identifier , (binary_expression "uVar7 | *(uint *)(lVar8 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar8 + 0x20)" * (cast_expression "(uint *)(lVar8 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x20)" ( (binary_expression "lVar8 + 0x20" identifier + number_literal) ))))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* std::istream::get(std::streambuf&, char) */\n\nistream * __thiscall std::istream::get(istream *this,streambuf *param_1,char param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  _Ios_Iostate _Var8;\n  sentry local_29 [9];\n  \n  *(undefined8 *)(this + 8) = 0;\n  sentry::sentry(local_29,this,true);\n  if (local_29[0] == (sentry)0x0) {\nLAB_00297c00:\n    if (*(long *)(this + 8) != 0) {\n      return this;\n    }\n    _Var8 = _S_failbit;\n  }\n  else {\n    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;\n  }\n  ios::clear((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));\n  return this;\n}\n\n" comment (ERROR "istream * __thiscall std::istream::get(istream *this,streambuf *param_1,char param_2)" (binary_expression "istream * __thiscall std::istream::get(istream *this" (binary_expression "istream * __thiscall" identifier * identifier) (ERROR "std::istream::get(istream" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*param_1" * identifier) , identifier identifier )) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  _Ios_Iostate _Var8;\n  sentry local_29 [9];\n  \n  *(undefined8 *)(this + 8) = 0;\n  sentry::sentry(local_29,this,true);\n  if (local_29[0] == (sentry)0x0) {\nLAB_00297c00:\n    if (*(long *)(this + 8) != 0) {\n      return this;\n    }\n    _Var8 = _S_failbit;\n  }\n  else {\n    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;\n  }\n  ios::clear((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));\n  return this;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "_Ios_Iostate _Var8;" type_identifier identifier ;) (declaration "sentry local_29 [9];" type_identifier (array_declarator "local_29 [9]" identifier [ number_literal ]) ;) (expression_statement "*(undefined8 *)(this + 8) = 0;" (assignment_expression "*(undefined8 *)(this + 8) = 0" (pointer_expression "*(undefined8 *)(this + 8)" * (cast_expression "(undefined8 *)(this + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = number_literal) ;) (labeled_statement "sentry::sentry(local_29,this,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(local_29,this,true);" (call_expression "sentry(local_29,this,true)" identifier (argument_list "(local_29,this,true)" ( identifier , identifier , true ))) ;)) (if_statement "if (local_29[0] == (sentry)0x0) {\nLAB_00297c00:\n    if (*(long *)(this + 8) != 0) {\n      return this;\n    }\n    _Var8 = _S_failbit;\n  }\n  else {\n    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;\n  }" if (parenthesized_expression "(local_29[0] == (sentry)0x0)" ( (binary_expression "local_29[0] == (sentry)0x0" (subscript_expression "local_29[0]" identifier [ number_literal ]) == (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\nLAB_00297c00:\n    if (*(long *)(this + 8) != 0) {\n      return this;\n    }\n    _Var8 = _S_failbit;\n  }" { (labeled_statement "LAB_00297c00:\n    if (*(long *)(this + 8) != 0) {\n      return this;\n    }" statement_identifier : (if_statement "if (*(long *)(this + 8) != 0) {\n      return this;\n    }" if (parenthesized_expression "(*(long *)(this + 8) != 0)" ( (binary_expression "*(long *)(this + 8) != 0" (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      return this;\n    }" { (return_statement "return this;" return identifier ;) }))) (expression_statement "_Var8 = _S_failbit;" (assignment_expression "_Var8 = _S_failbit" identifier = identifier) ;) }) (else_clause "else {\n    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;\n  }" else (compound_statement "{\n    plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;\n  }" { (expression_statement "plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);" (assignment_expression "plVar2 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" * (cast_expression "(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18) + 0xe8)" ( (binary_expression "this + *(long *)(*(long *)this + -0x18) + 0xe8" (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;" if (parenthesized_expression "((byte *)plVar2[3] <= (byte *)plVar2[2])" ( (binary_expression "(byte *)plVar2[3] <= (byte *)plVar2[2]" (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ])) <= (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00297c30;" goto statement_identifier ;)) (expression_statement "bVar1 = *(byte *)plVar2[2];" (assignment_expression "bVar1 = *(byte *)plVar2[2]" identifier = (pointer_expression "*(byte *)plVar2[2]" * (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ])))) ;) (expression_statement "uVar3 = (uint)bVar1;" (assignment_expression "uVar3 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar7 = (uint)bVar1;" (assignment_expression "uVar7 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (do_statement "do {\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);" do (compound_statement "{\n      while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    }" { (while_statement "while( true ) {\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((byte)param_2 == uVar3) goto LAB_00297c00;\n        if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        *(long *)(this + 8) = *(long *)(this + 8) + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" { (if_statement "if ((byte)param_2 == uVar3) goto LAB_00297c00;" if (parenthesized_expression "((byte)param_2 == uVar3)" ( (binary_expression "(byte)param_2 == uVar3" (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier) == identifier) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) (if_statement "if (*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)) {\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" if (parenthesized_expression "(*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30))" ( (binary_expression "*(undefined1 **)(param_1 + 0x28) < *(undefined1 **)(param_1 + 0x30)" (pointer_expression "*(undefined1 **)(param_1 + 0x28)" * (cast_expression "(undefined1 **)(param_1 + 0x28)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) < (pointer_expression "*(undefined1 **)(param_1 + 0x30)" * (cast_expression "(undefined1 **)(param_1 + 0x30)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) )) (compound_statement "{\n          **(undefined1 **)(param_1 + 0x28) = (char)uVar7;\n          *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n        }" { (expression_statement "**(undefined1 **)(param_1 + 0x28) = (char)uVar7;" (assignment_expression "**(undefined1 **)(param_1 + 0x28) = (char)uVar7" (pointer_expression "**(undefined1 **)(param_1 + 0x28)" * (pointer_expression "*(undefined1 **)(param_1 + 0x28)" * (cast_expression "(undefined1 **)(param_1 + 0x28)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;" (assignment_expression "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" { (expression_statement "iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1);" (assignment_expression "iVar4 = (**(code **)(*(long *)param_1 + 0x68))(param_1)" identifier = (call_expression "(**(code **)(*(long *)param_1 + 0x68))(param_1)" (parenthesized_expression "(**(code **)(*(long *)param_1 + 0x68))" ( (pointer_expression "**(code **)(*(long *)param_1 + 0x68)" * (pointer_expression "*(code **)(*(long *)param_1 + 0x68)" * (cast_expression "(code **)(*(long *)param_1 + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_1 + 0x68)" ( (binary_expression "*(long *)param_1 + 0x68" (pointer_expression "*(long *)param_1" * (cast_expression "(long *)param_1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c00;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) }))) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) (expression_statement "*(long *)(this + 8) = *(long *)(this + 8) + 1;" (assignment_expression "*(long *)(this + 8) = *(long *)(this + 8) + 1" (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = (binary_expression "*(long *)(this + 8) + 1" (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" if (parenthesized_expression "(pbVar5 < pbVar6)" ( (binary_expression "pbVar5 < pbVar6" identifier < identifier) )) (compound_statement "{\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }" { (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "plVar2[2] = (long)pbVar5;" (assignment_expression "plVar2[2] = (long)pbVar5" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (cast_expression "(long)pbVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" { (expression_statement "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);" (assignment_expression "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x50))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x50))" ( (pointer_expression "**(code **)(*plVar2 + 0x50)" * (pointer_expression "*(code **)(*plVar2 + 0x50)" * (cast_expression "(code **)(*plVar2 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x50)" ( (binary_expression "*plVar2 + 0x50" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c50;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c50;" goto statement_identifier ;)) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) }))) (if_statement "if (pbVar6 <= pbVar5) break;" if (parenthesized_expression "(pbVar6 <= pbVar5)" ( (binary_expression "pbVar6 <= pbVar5" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "uVar3 = (uint)*pbVar5;" (assignment_expression "uVar3 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) })) (labeled_statement "LAB_00297c30:\n                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */\n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" statement_identifier : comment (expression_statement "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" (assignment_expression "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" ( (pointer_expression "**(code **)(*plVar2 + 0x48)" * (pointer_expression "*(code **)(*plVar2 + 0x48)" * (cast_expression "(code **)(*plVar2 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x48)" ( (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;)) (expression_statement "uVar7 = uVar3 & 0xff;" (assignment_expression "uVar7 = uVar3 & 0xff" identifier = (binary_expression "uVar3 & 0xff" identifier & number_literal)) ;) }) while (parenthesized_expression "(uVar3 != 0xffffffff)" ( (binary_expression "uVar3 != 0xffffffff" identifier != number_literal) )) ;) (labeled_statement "LAB_00297c50:\n    _Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;" statement_identifier : (expression_statement "_Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit;" (assignment_expression "_Var8 = (-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit" identifier = (binary_expression "(-(uint)(*(long *)(this + 8) == 0) & 4) + _S_eofbit" (parenthesized_expression "(-(uint)(*(long *)(this + 8) == 0) & 4)" ( (binary_expression "-(uint)(*(long *)(this + 8) == 0) & 4" (unary_expression "-(uint)(*(long *)(this + 8) == 0)" - (call_expression "(uint)(*(long *)(this + 8) == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(long *)(this + 8) == 0)" ( (binary_expression "*(long *)(this + 8) == 0" (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) == number_literal) )))) & number_literal) )) + identifier)) ;)) }))) (labeled_statement "ios::clear((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));" statement_identifier : (ERROR ":" :) (expression_statement "clear((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));" (call_expression "clear((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20))" identifier (argument_list "((ios *)(this + *(long *)(*(long *)this + -0x18)),\n             _Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20))" ( (cast_expression "(ios *)(this + *(long *)(*(long *)this + -0x18))" ( (type_descriptor "ios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18))" ( (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "_Var8 | *(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" identifier | (pointer_expression "*(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" * (cast_expression "(_Ios_Iostate *)((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" ( (binary_expression "(ios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20" (cast_expression "(ios *)(this + *(long *)(*(long *)this + -0x18))" ( (type_descriptor "ios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18))" ( (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) ))))) ))) ;)) (return_statement "return this;" return identifier ;) }))
(translation_unit "long * FUN_00297b50(long *param_1,long *param_2,uint param_3)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_00297b50(long *param_1,long *param_2,uint param_3)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_00297b50(long *param_1,long *param_2,uint param_3)" * (function_declarator "FUN_00297b50(long *param_1,long *param_2,uint param_3)" identifier (parameter_list "(long *param_1,long *param_2,uint param_3)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_29 [9];" primitive_type (array_declarator "local_29 [9]" identifier [ number_literal ]) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00296fe0(local_29,param_1,1);" (call_expression "FUN_00296fe0(local_29,param_1,1)" identifier (argument_list "(local_29,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" if (parenthesized_expression "(local_29[0] == '\0')" ( (binary_expression "local_29[0] == '\0'" (subscript_expression "local_29[0]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }" { (labeled_statement "LAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }" statement_identifier : (if_statement "if (param_1[1] != 0) {\n      return param_1;\n    }" if (parenthesized_expression "(param_1[1] != 0)" ( (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) }))) (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" identifier = number_literal) ;) }) (else_clause "else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" else (compound_statement "{\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" { (expression_statement "plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar2 = *(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 ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;" if (parenthesized_expression "((byte *)plVar2[3] <= (byte *)plVar2[2])" ( (binary_expression "(byte *)plVar2[3] <= (byte *)plVar2[2]" (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ])) <= (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00297c30;" goto statement_identifier ;)) (expression_statement "bVar1 = *(byte *)plVar2[2];" (assignment_expression "bVar1 = *(byte *)plVar2[2]" identifier = (pointer_expression "*(byte *)plVar2[2]" * (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ])))) ;) (expression_statement "uVar3 = (uint)bVar1;" (assignment_expression "uVar3 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar7 = (uint)bVar1;" (assignment_expression "uVar7 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (do_statement "do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);" do (compound_statement "{\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    }" { (while_statement "while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" { (if_statement "if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;" if (parenthesized_expression "((param_3 & 0xff) == uVar3)" ( (binary_expression "(param_3 & 0xff) == uVar3" (parenthesized_expression "(param_3 & 0xff)" ( (binary_expression "param_3 & 0xff" identifier & number_literal) )) == identifier) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) (if_statement "if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" if (parenthesized_expression "((undefined1 *)param_2[5] < (undefined1 *)param_2[6])" ( (binary_expression "(undefined1 *)param_2[5] < (undefined1 *)param_2[6]" (cast_expression "(undefined1 *)param_2[5]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[5]" identifier [ number_literal ])) < (cast_expression "(undefined1 *)param_2[6]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[6]" identifier [ number_literal ]))) )) (compound_statement "{\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }" { (expression_statement "*(undefined1 *)param_2[5] = (char)uVar7;" (assignment_expression "*(undefined1 *)param_2[5] = (char)uVar7" (pointer_expression "*(undefined1 *)param_2[5]" * (cast_expression "(undefined1 *)param_2[5]" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[5]" identifier [ number_literal ]))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "param_2[5] = param_2[5] + 1;" (assignment_expression "param_2[5] = param_2[5] + 1" (subscript_expression "param_2[5]" identifier [ number_literal ]) = (binary_expression "param_2[5] + 1" (subscript_expression "param_2[5]" identifier [ number_literal ]) + number_literal)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" { (expression_statement "iVar4 = (**(code **)(*param_2 + 0x68))(param_2);" (assignment_expression "iVar4 = (**(code **)(*param_2 + 0x68))(param_2)" identifier = (call_expression "(**(code **)(*param_2 + 0x68))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x68))" ( (pointer_expression "**(code **)(*param_2 + 0x68)" * (pointer_expression "*(code **)(*param_2 + 0x68)" * (cast_expression "(code **)(*param_2 + 0x68)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x68)" ( (binary_expression "*param_2 + 0x68" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c00;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c00;" goto statement_identifier ;)) }))) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" if (parenthesized_expression "(pbVar5 < pbVar6)" ( (binary_expression "pbVar5 < pbVar6" identifier < identifier) )) (compound_statement "{\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }" { (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (expression_statement "plVar2[2] = (long)pbVar5;" (assignment_expression "plVar2[2] = (long)pbVar5" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = (cast_expression "(long)pbVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) }) (else_clause "else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" else (compound_statement "{\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" { (expression_statement "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);" (assignment_expression "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x50))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x50))" ( (pointer_expression "**(code **)(*plVar2 + 0x50)" * (pointer_expression "*(code **)(*plVar2 + 0x50)" * (cast_expression "(code **)(*plVar2 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x50)" ( (binary_expression "*plVar2 + 0x50" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;) (if_statement "if (iVar4 == -1) goto LAB_00297c50;" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00297c50;" goto statement_identifier ;)) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" identifier = (cast_expression "(byte *)plVar2[2]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" identifier = (cast_expression "(byte *)plVar2[3]" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[3]" identifier [ number_literal ]))) ;) }))) (if_statement "if (pbVar6 <= pbVar5) break;" if (parenthesized_expression "(pbVar6 <= pbVar5)" ( (binary_expression "pbVar6 <= pbVar5" identifier <= identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "uVar3 = (uint)*pbVar5;" (assignment_expression "uVar3 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) })) (labeled_statement "LAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" statement_identifier : (expression_statement "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" (assignment_expression "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2)" identifier = (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" ( (pointer_expression "**(code **)(*plVar2 + 0x48)" * (pointer_expression "*(code **)(*plVar2 + 0x48)" * (cast_expression "(code **)(*plVar2 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar2 + 0x48)" ( (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" * identifier) + number_literal) ))))) )) (argument_list "(plVar2)" ( identifier )))) ;)) (expression_statement "uVar7 = uVar3 & 0xff;" (assignment_expression "uVar7 = uVar3 & 0xff" identifier = (binary_expression "uVar3 & 0xff" identifier & number_literal)) ;) }) while (parenthesized_expression "(uVar3 != 0xffffffff)" ( (binary_expression "uVar3 != 0xffffffff" identifier != number_literal) )) ;) (labeled_statement "LAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" statement_identifier : (expression_statement "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" (assignment_expression "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(param_1[1] == 0) & 4) + 2" (parenthesized_expression "(-(uint)(param_1[1] == 0) & 4)" ( (binary_expression "-(uint)(param_1[1] == 0) & 4" (unary_expression "-(uint)(param_1[1] == 0)" - (call_expression "(uint)(param_1[1] == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )))) & number_literal) )) + number_literal)) ;)) }))) (expression_statement "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (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) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));" (call_expression "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" identifier (argument_list "(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" ( identifier , (binary_expression "uVar7 | *(uint *)(lVar8 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar8 + 0x20)" * (cast_expression "(uint *)(lVar8 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x20)" ( (binary_expression "lVar8 + 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 (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' escape_sequence ')) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (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 ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == IDENT) )) (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 ]))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + 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) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) }) (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) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_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 <= IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) })) (labeled_statement 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 )))) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )))) & LIT) )) + LIT)) ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_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_00297b50(long *param_1,long *param_2,uint param_3)\n\n{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_00297b50(long *param_1,long *param_2,uint param_3)" (* "*") (function_declarator "FUN_00297b50(long *param_1,long *param_2,uint param_3)" (identifier "FUN_00297b50") (parameter_list "(long *param_1,long *param_2,uint param_3)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")")))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  uint uVar3;\n  int iVar4;\n  byte *pbVar5;\n  byte *pbVar6;\n  uint uVar7;\n  long lVar8;\n  char local_29 [9];\n  \n  param_1[1] = 0;\n  FUN_00296fe0(local_29,param_1,1);\n  if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }\n  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));\n  return param_1;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "char local_29 [9];" (primitive_type "char") (array_declarator "local_29 [9]" (identifier "local_29") ([ "[") (number_literal "9") (] "]")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_00296fe0(local_29,param_1,1);" (call_expression "FUN_00296fe0(local_29,param_1,1)" (identifier "FUN_00296fe0") (argument_list "(local_29,param_1,1)" (( "(") (identifier "local_29") (, ",") (identifier "param_1") (, ",") (number_literal "1") () ")"))) (; ";")) (if_statement "if (local_29[0] == '\0') {\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }\n  else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" (if "if") (parenthesized_expression "(local_29[0] == '\0')" (( "(") (binary_expression "local_29[0] == '\0'" (subscript_expression "local_29[0]" (identifier "local_29") ([ "[") (number_literal "0") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\nLAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }\n    uVar7 = 4;\n  }" ({ "{") (labeled_statement "LAB_00297c00:\n    if (param_1[1] != 0) {\n      return param_1;\n    }" (statement_identifier "LAB_00297c00") (: ":") (if_statement "if (param_1[1] != 0) {\n      return param_1;\n    }" (if "if") (parenthesized_expression "(param_1[1] != 0)" (( "(") (binary_expression "param_1[1] != 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return param_1;\n    }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))) (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" (identifier "uVar7") (= "=") (number_literal "4")) (; ";")) (} "}")) (else_clause "else {\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" (else "else") (compound_statement "{\n    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;\n    bVar1 = *(byte *)plVar2[2];\n    uVar3 = (uint)bVar1;\n    uVar7 = (uint)bVar1;\n    do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);\nLAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;\n  }" ({ "{") (expression_statement "plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (identifier "plVar2") (= "=") (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 ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;" (if "if") (parenthesized_expression "((byte *)plVar2[3] <= (byte *)plVar2[2])" (( "(") (binary_expression "(byte *)plVar2[3] <= (byte *)plVar2[2]" (cast_expression "(byte *)plVar2[3]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[3]" (identifier "plVar2") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(byte *)plVar2[2]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")))) () ")")) (goto_statement "goto LAB_00297c30;" (goto "goto") (statement_identifier "LAB_00297c30") (; ";"))) (expression_statement "bVar1 = *(byte *)plVar2[2];" (assignment_expression "bVar1 = *(byte *)plVar2[2]" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)plVar2[2]" (* "*") (cast_expression "(byte *)plVar2[2]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (expression_statement "uVar3 = (uint)bVar1;" (assignment_expression "uVar3 = (uint)bVar1" (identifier "uVar3") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "uVar7 = (uint)bVar1;" (assignment_expression "uVar7 = (uint)bVar1" (identifier "uVar7") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (do_statement "do {\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    } while (uVar3 != 0xffffffff);" (do "do") (compound_statement "{\n      while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }\nLAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);\n      uVar7 = uVar3 & 0xff;\n    }" ({ "{") (while_statement "while( true ) {\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;\n        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }\n        pbVar5 = (byte *)plVar2[2];\n        pbVar6 = (byte *)plVar2[3];\n        param_1[1] = param_1[1] + 1;\n        if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }\n        if (pbVar6 <= pbVar5) break;\n        uVar7 = (uint)*pbVar5;\n        uVar3 = (uint)*pbVar5;\n      }" ({ "{") (if_statement "if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;" (if "if") (parenthesized_expression "((param_3 & 0xff) == uVar3)" (( "(") (binary_expression "(param_3 & 0xff) == uVar3" (parenthesized_expression "(param_3 & 0xff)" (( "(") (binary_expression "param_3 & 0xff" (identifier "param_3") (& "&") (number_literal "0xff")) () ")")) (== "==") (identifier "uVar3")) () ")")) (goto_statement "goto LAB_00297c00;" (goto "goto") (statement_identifier "LAB_00297c00") (; ";"))) (if_statement "if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }\n        else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" (if "if") (parenthesized_expression "((undefined1 *)param_2[5] < (undefined1 *)param_2[6])" (( "(") (binary_expression "(undefined1 *)param_2[5] < (undefined1 *)param_2[6]" (cast_expression "(undefined1 *)param_2[5]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]"))) (< "<") (cast_expression "(undefined1 *)param_2[6]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")))) () ")")) (compound_statement "{\n          *(undefined1 *)param_2[5] = (char)uVar7;\n          param_2[5] = param_2[5] + 1;\n        }" ({ "{") (expression_statement "*(undefined1 *)param_2[5] = (char)uVar7;" (assignment_expression "*(undefined1 *)param_2[5] = (char)uVar7" (pointer_expression "*(undefined1 *)param_2[5]" (* "*") (cast_expression "(undefined1 *)param_2[5]" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")))) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "param_2[5] = param_2[5] + 1;" (assignment_expression "param_2[5] = param_2[5] + 1" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (= "=") (binary_expression "param_2[5] + 1" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" (else "else") (compound_statement "{\n          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);\n          if (iVar4 == -1) goto LAB_00297c00;\n        }" ({ "{") (expression_statement "iVar4 = (**(code **)(*param_2 + 0x68))(param_2);" (assignment_expression "iVar4 = (**(code **)(*param_2 + 0x68))(param_2)" (identifier "iVar4") (= "=") (call_expression "(**(code **)(*param_2 + 0x68))(param_2)" (parenthesized_expression "(**(code **)(*param_2 + 0x68))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x68)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x68)" (* "*") (cast_expression "(code **)(*param_2 + 0x68)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x68)" (( "(") (binary_expression "*param_2 + 0x68" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x68")) () ")"))))) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar4 == -1) goto LAB_00297c00;" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00297c00;" (goto "goto") (statement_identifier "LAB_00297c00") (; ";"))) (} "}")))) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" (identifier "pbVar5") (= "=") (cast_expression "(byte *)plVar2[2]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" (identifier "pbVar6") (= "=") (cast_expression "(byte *)plVar2[3]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[3]" (identifier "plVar2") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "param_1[1] = param_1[1] + 1;" (assignment_expression "param_1[1] = param_1[1] + 1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_1[1] + 1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (pbVar5 < pbVar6) {\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }\n        else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" (if "if") (parenthesized_expression "(pbVar5 < pbVar6)" (( "(") (binary_expression "pbVar5 < pbVar6" (identifier "pbVar5") (< "<") (identifier "pbVar6")) () ")")) (compound_statement "{\n          pbVar5 = pbVar5 + 1;\n          plVar2[2] = (long)pbVar5;\n        }" ({ "{") (expression_statement "pbVar5 = pbVar5 + 1;" (assignment_expression "pbVar5 = pbVar5 + 1" (identifier "pbVar5") (= "=") (binary_expression "pbVar5 + 1" (identifier "pbVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "plVar2[2] = (long)pbVar5;" (assignment_expression "plVar2[2] = (long)pbVar5" (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(long)pbVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar5"))) (; ";")) (} "}")) (else_clause "else {\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" (else "else") (compound_statement "{\n          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);\n          if (iVar4 == -1) goto LAB_00297c50;\n          pbVar5 = (byte *)plVar2[2];\n          pbVar6 = (byte *)plVar2[3];\n        }" ({ "{") (expression_statement "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);" (assignment_expression "iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2)" (identifier "iVar4") (= "=") (call_expression "(**(code **)(*plVar2 + 0x50))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar2 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar2 + 0x50)" (* "*") (cast_expression "(code **)(*plVar2 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0x50)" (( "(") (binary_expression "*plVar2 + 0x50" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar2)" (( "(") (identifier "plVar2") () ")")))) (; ";")) (if_statement "if (iVar4 == -1) goto LAB_00297c50;" (if "if") (parenthesized_expression "(iVar4 == -1)" (( "(") (binary_expression "iVar4 == -1" (identifier "iVar4") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00297c50;" (goto "goto") (statement_identifier "LAB_00297c50") (; ";"))) (expression_statement "pbVar5 = (byte *)plVar2[2];" (assignment_expression "pbVar5 = (byte *)plVar2[2]" (identifier "pbVar5") (= "=") (cast_expression "(byte *)plVar2[2]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pbVar6 = (byte *)plVar2[3];" (assignment_expression "pbVar6 = (byte *)plVar2[3]" (identifier "pbVar6") (= "=") (cast_expression "(byte *)plVar2[3]" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[3]" (identifier "plVar2") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}")))) (if_statement "if (pbVar6 <= pbVar5) break;" (if "if") (parenthesized_expression "(pbVar6 <= pbVar5)" (( "(") (binary_expression "pbVar6 <= pbVar5" (identifier "pbVar6") (<= "<=") (identifier "pbVar5")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" (identifier "uVar7") (= "=") (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar5"))) (; ";")) (expression_statement "uVar3 = (uint)*pbVar5;" (assignment_expression "uVar3 = (uint)*pbVar5" (identifier "uVar3") (= "=") (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar5"))) (; ";")) (} "}"))) (labeled_statement "LAB_00297c30:\n                    \n      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" (statement_identifier "LAB_00297c30") (: ":") (expression_statement "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);" (assignment_expression "uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar2 + 0x48))(plVar2)" (parenthesized_expression "(**(code **)(*plVar2 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar2 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar2 + 0x48)" (* "*") (cast_expression "(code **)(*plVar2 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar2 + 0x48)" (( "(") (binary_expression "*plVar2 + 0x48" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar2)" (( "(") (identifier "plVar2") () ")")))) (; ";"))) (expression_statement "uVar7 = uVar3 & 0xff;" (assignment_expression "uVar7 = uVar3 & 0xff" (identifier "uVar7") (= "=") (binary_expression "uVar3 & 0xff" (identifier "uVar3") (& "&") (number_literal "0xff"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar3 != 0xffffffff)" (( "(") (binary_expression "uVar3 != 0xffffffff" (identifier "uVar3") (!= "!=") (number_literal "0xffffffff")) () ")")) (; ";")) (labeled_statement "LAB_00297c50:\n    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" (statement_identifier "LAB_00297c50") (: ":") (expression_statement "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;" (assignment_expression "uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2" (identifier "uVar7") (= "=") (binary_expression "(-(uint)(param_1[1] == 0) & 4) + 2" (parenthesized_expression "(-(uint)(param_1[1] == 0) & 4)" (( "(") (binary_expression "-(uint)(param_1[1] == 0) & 4" (unary_expression "-(uint)(param_1[1] == 0)" (- "-") (call_expression "(uint)(param_1[1] == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1[1] == 0)" (( "(") (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0")) () ")")))) (& "&") (number_literal "4")) () ")")) (+ "+") (number_literal "2"))) (; ";"))) (} "}")))) (expression_statement "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1" (identifier "lVar8") (= "=") (binary_expression "*(long *)(*param_1 + -0x18) + (long)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")) () ")")))) (+ "+") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")))) (; ";")) (expression_statement "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));" (call_expression "FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" (identifier "FUN_0029c920") (argument_list "(lVar8,uVar7 | *(uint *)(lVar8 + 0x20))" (( "(") (identifier "lVar8") (, ",") (binary_expression "uVar7 | *(uint *)(lVar8 + 0x20)" (identifier "uVar7") (| "|") (pointer_expression "*(uint *)(lVar8 + 0x20)" (* "*") (cast_expression "(uint *)(lVar8 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x20)" (( "(") (binary_expression "lVar8 + 0x20" (identifier "lVar8") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* std::istream::get(std::streambuf&, char) */

istream * __thiscall std::istream::get(istream *var_1,streambuf *var_3,char param_2)

{
  type_1 bVar1;
  long *plVar2;
  type_2 var_2;
  int var_4;
  type_1 *var_5;
  type_1 *var_6;
  type_2 uVar7;
  type_3 var_9;
  type_4 local_29 [9];
  
  *(type_5 *)(var_1 + 8) = 0;
  sentry::type_4(local_29,var_1,true);
  if (local_29[0] == (type_4)0x0) {
LAB_00297c00:
    if (*(long *)(var_1 + 8) != 0) {
      return var_1;
    }
    var_9 = _S_failbit;
  }
  else {
    plVar2 = *(long **)(var_1 + *(long *)(*(long *)var_1 + -0x18) + 0xe8);
    if ((type_1 *)plVar2[3] <= (type_1 *)plVar2[2]) goto LAB_00297c30;
    bVar1 = *(type_1 *)plVar2[2];
    var_2 = (type_2)bVar1;
    uVar7 = (type_2)bVar1;
    do {
      while( true ) {
        if ((type_1)param_2 == var_2) goto LAB_00297c00;
        if (*(type_6 **)(var_3 + 0x28) < *(type_6 **)(var_3 + 0x30)) {
          **(type_6 **)(var_3 + 0x28) = (char)uVar7;
          *(long *)(var_3 + 0x28) = *(long *)(var_3 + 0x28) + 1;
        }
        else {
          var_4 = (**(type_7 **)(*(long *)var_3 + 0x68))(var_3);
          if (var_4 == -1) goto LAB_00297c00;
        }
        var_5 = (type_1 *)plVar2[2];
        var_6 = (type_1 *)plVar2[3];
        *(long *)(var_1 + 8) = *(long *)(var_1 + 8) + 1;
        if (var_5 < var_6) {
          var_5 = var_5 + 1;
          plVar2[2] = (long)var_5;
        }
        else {
          var_4 = (**(type_7 **)(*plVar2 + 0x50))(plVar2);
          if (var_4 == -1) goto LAB_00297c50;
          var_5 = (type_1 *)plVar2[2];
          var_6 = (type_1 *)plVar2[3];
        }
        if (var_6 <= var_5) break;
        uVar7 = (type_2)*var_5;
        var_2 = (type_2)*var_5;
      }
LAB_00297c30:
                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */
      var_2 = (**(type_7 **)(*plVar2 + 0x48))(plVar2);
      uVar7 = var_2 & 0xff;
    } while (var_2 != 0xffffffff);
LAB_00297c50:
    var_9 = (-(type_2)(*(long *)(var_1 + 8) == 0) & 4) + var_7;
  }
  ios::var_8((type_8 *)(var_1 + *(long *)(*(long *)var_1 + -0x18)),
             var_9 | *(type_3 *)((type_8 *)(var_1 + *(long *)(*(long *)var_1 + -0x18)) + 0x20));
  return var_1;
}


(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: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) 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: (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) 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: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))))) (labeled_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)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal))) right: (number_literal)))))))) (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: (pointer_expression argument: (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,long *param_2,uint param_3)

{
  byte bVar1;
  long *plVar2;
  uint uVar3;
  int iVar4;
  byte *pbVar5;
  byte *pbVar6;
  uint uVar7;
  long lVar8;
  char local_29 [9];
  
  param_1[1] = 0;
  FUN_00296fe0(local_29,param_1,1);
  if (local_29[0] == '\0') {
LAB_00297c00:
    if (param_1[1] != 0) {
      return param_1;
    }
    uVar7 = 4;
  }
  else {
    plVar2 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    if ((byte *)plVar2[3] <= (byte *)plVar2[2]) goto LAB_00297c30;
    bVar1 = *(byte *)plVar2[2];
    uVar3 = (uint)bVar1;
    uVar7 = (uint)bVar1;
    do {
      while( true ) {
        if ((param_3 & 0xff) == uVar3) goto LAB_00297c00;
        if ((undefined1 *)param_2[5] < (undefined1 *)param_2[6]) {
          *(undefined1 *)param_2[5] = (char)uVar7;
          param_2[5] = param_2[5] + 1;
        }
        else {
          iVar4 = (**(code **)(*param_2 + 0x68))(param_2);
          if (iVar4 == -1) goto LAB_00297c00;
        }
        pbVar5 = (byte *)plVar2[2];
        pbVar6 = (byte *)plVar2[3];
        param_1[1] = param_1[1] + 1;
        if (pbVar5 < pbVar6) {
          pbVar5 = pbVar5 + 1;
          plVar2[2] = (long)pbVar5;
        }
        else {
          iVar4 = (**(code **)(*plVar2 + 0x50))(plVar2);
          if (iVar4 == -1) goto LAB_00297c50;
          pbVar5 = (byte *)plVar2[2];
          pbVar6 = (byte *)plVar2[3];
        }
        if (pbVar6 <= pbVar5) break;
        uVar7 = (uint)*pbVar5;
        uVar3 = (uint)*pbVar5;
      }
LAB_00297c30:
                    /* try { // try from 00297c37 to 00297c81 has its CatchHandler @ 00297c94 */
      uVar3 = (**(code **)(*plVar2 + 0x48))(plVar2);
      uVar7 = uVar3 & 0xff;
    } while (uVar3 != 0xffffffff);
LAB_00297c50:
    uVar7 = (-(uint)(param_1[1] == 0) & 4) + 2;
  }
  lVar8 = *(long *)(*param_1 + -0x18) + (long)param_1;
  FUN_0029c920(lVar8,uVar7 | *(uint *)(lVar8 + 0x20));
  return param_1;
}

