
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* std::wfilebuf::xsgetn(wchar_t*, int) */

void std::wfilebuf::xsgetn(wchar_t *param_1,int param_2)

{
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int *piVar3;
  char cVar4;
  wchar_t *pwVar5;
  int iVar6;
  wchar_t *pwVar7;
  size_t __n;
  int iVar8;
  uint local_24;
  
  if ((char)param_1[0x1d] == '\0') {
    if (*(char *)((int)param_1 + 0x66) == '\0') {
      local_24 = param_1[0x10];
      iVar8 = 0;
    }
    else {
      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
      if (iVar6 == -1) {
        return 0;
      }
      local_24 = param_1[0x10];
      param_1[5] = 0;
      iVar8 = 0;
      param_1[4] = 0;
      iVar6 = param_1[0x17];
      param_1[6] = 0;
      param_1[1] = iVar6;
      param_1[2] = iVar6;
      param_1[3] = iVar6;
      *(undefined1 *)((int)param_1 + 0x66) = 0;
    }
  }
  else {
    pwVar1 = (wchar_t *)param_1[2];
    pwVar2 = (wchar_t *)param_1[1];
    iVar8 = 0;
    pwVar5 = pwVar1;
    pwVar7 = param_2;
    if ((0 < param_3) && (pwVar1 == pwVar2)) {
      pwVar7 = param_2 + 1;
      pwVar5 = pwVar1 + 1;
      param_3 = param_3 + -1;
      *param_2 = *pwVar1;
      param_1[2] = (int)pwVar5;
      if ((char)param_1[0x1d] == '\0') {
        local_24 = param_1[0x10];
        iVar8 = 1;
        param_2 = pwVar7;
        goto LAB_0027463f;
      }
      iVar8 = 1;
    }
    *(undefined1 *)(param_1 + 0x1d) = 0;
    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;
    param_1[0x1b] = iVar6;
    param_1[2] = iVar6;
    param_1[1] = param_1[0x17];
    param_1[3] = param_1[0x1c];
    local_24 = param_1[0x10];
    param_2 = pwVar7;
  }
LAB_0027463f:
  iVar6 = 2;
  if (1 < (uint)param_1[0x18]) {
    iVar6 = param_1[0x18];
  }
  if (iVar6 + -1 < param_3) {
    piVar3 = (int *)param_1[0x1e];
    if (piVar3 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0028daa0();
    }
    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);
    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {
      pwVar7 = (wchar_t *)param_1[2];
      if (pwVar7 != (wchar_t *)param_1[3]) {
        iVar6 = param_1[3] - (int)pwVar7;
        __n = iVar6 >> 2;
        wmemcpy(param_2,pwVar7,__n);
        param_1[2] = param_1[2] + iVar6;
        param_2 = (wchar_t *)((int)param_2 + iVar6);
        iVar8 = iVar8 + __n;
        param_3 = param_3 - __n;
      }
      while( true ) {
        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);
        if (iVar6 == -1) {
                    /* WARNING: Subroutine does not return */
          FUN_00287f60("basic_filebuf::xsgetn error reading the file");
        }
        if (iVar6 == 0) break;
        iVar8 = iVar8 + iVar6;
        param_3 = param_3 - iVar6;
        if (param_3 == 0) goto LAB_002747cb;
        param_2 = param_2 + iVar6;
      }
      if (param_3 != 0) {
        iVar6 = param_1[0x17];
        param_1[5] = 0;
        param_1[4] = 0;
        param_1[1] = iVar6;
        param_1[2] = iVar6;
        param_1[3] = iVar6;
        param_1[6] = 0;
        *(undefined1 *)((int)param_1 + 0x65) = 0;
        return iVar8;
      }
LAB_002747cb:
      *(undefined1 *)((int)param_1 + 0x65) = 1;
      return iVar8;
    }
  }
  iVar6 = FUN_00253530(param_1,param_2,param_3);
  return iVar8 + iVar6;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x0003a210
ADD EBX,0x19fa27
SUB ESP,0x1c
MOV ESI,dword ptr [ESP + 0x30]
MOV ECX,dword ptr [ESP + 0x34]
MOV EBP,dword ptr [ESP + 0x38]
CMP byte ptr [ESI + 0x74],0x0
JZ 0x002746a0
MOV EAX,dword ptr [ESI + 0x8]
MOV EDX,dword ptr [ESI + 0x4]
XOR EDI,EDI
TEST EBP,EBP
JLE 0x0027460c
CMP EAX,EDX
JZ 0x002746b8
CMP EDX,EAX
MOV EDX,dword ptr [ESI + 0x6c]
MOV byte ptr [ESI + 0x74],0x0
SETNZ AL
MOVZX EAX,AL
LEA EAX,[EDX + EAX*0x4]
MOV EDX,dword ptr [ESI + 0x70]
MOV dword ptr [ESI + 0x6c],EAX
MOV dword ptr [ESP + 0x8],EDX
MOV EDX,dword ptr [ESI + 0x5c]
MOV dword ptr [ESI + 0x8],EAX
MOV EAX,dword ptr [ESP + 0x8]
MOV dword ptr [ESI + 0x4],EDX
MOV dword ptr [ESI + 0xc],EAX
MOV EAX,dword ptr [ESI + 0x40]
MOV dword ptr [ESP + 0x8],EAX
CMP dword ptr [ESI + 0x60],0x2
MOV EAX,0x2
CMOVNC EAX,dword ptr [ESI + 0x60]
SUB EAX,0x1
CMP EBP,EAX
JLE 0x00274681
MOV EAX,dword ptr [ESI + 0x78]
TEST EAX,EAX
JZ 0x00274819
MOV dword ptr [ESP + 0x34],ECX
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x18]
MOV ECX,dword ptr [ESP + 0x44]
ADD ESP,0x10
TEST byte ptr [ESP + 0x8],0x8
JZ 0x00274681
TEST AL,AL
JNZ 0x00274750
SUB ESP,0x4
PUSH EBP
PUSH ECX
PUSH ESI
CALL 0x00253530
ADD ESP,0x10
ADD EDI,EAX
ADD ESP,0x1c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP byte ptr [ESI + 0x66],0x0
JNZ 0x002746f0
MOV EAX,dword ptr [ESI + 0x40]
XOR EDI,EDI
MOV dword ptr [ESP + 0x8],EAX
JMP 0x0027463f
LEA EDI,[ECX + 0x4]
ADD EAX,0x4
SUB EBP,0x1
MOV dword ptr [ESP + 0xc],EDI
MOV EDI,dword ptr [EAX + -0x4]
MOV dword ptr [ECX],EDI
CMP byte ptr [ESI + 0x74],0x0
MOV dword ptr [ESI + 0x8],EAX
JNZ 0x0027481e
MOV EAX,dword ptr [ESI + 0x40]
MOV ECX,dword ptr [ESP + 0xc]
MOV EDI,0x1
MOV dword ptr [ESP + 0x8],EAX
JMP 0x0027463f
MOV dword ptr [ESP + 0x34],ECX
SUB ESP,0x8
MOV EAX,dword ptr [ESI]
PUSH -0x1
PUSH ESI
CALL dword ptr [EAX + 0x34]
ADD ESP,0x10
CMP EAX,-0x1
JZ 0x00274740
MOV EAX,dword ptr [ESI + 0x40]
MOV dword ptr [ESI + 0x14],0x0
XOR EDI,EDI
MOV dword ptr [ESI + 0x10],0x0
MOV ECX,dword ptr [ESP + 0x34]
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,dword ptr [ESI + 0x5c]
MOV dword ptr [ESI + 0x18],0x0
MOV dword ptr [ESI + 0x4],EAX
MOV dword ptr [ESI + 0x8],EAX
MOV dword ptr [ESI + 0xc],EAX
MOV byte ptr [ESI + 0x66],0x0
JMP 0x0027463f
XOR EDI,EDI
JMP 0x00274691
MOV EDX,dword ptr [ESI + 0xc]
MOV EAX,dword ptr [ESI + 0x8]
CMP EAX,EDX
JZ 0x0027478e
SUB EDX,EAX
SUB ESP,0x4
MOV dword ptr [ESP + 0xc],EDX
SAR EDX,0x2
PUSH EDX
MOV dword ptr [ESP + 0x14],EDX
PUSH EAX
PUSH ECX
MOV dword ptr [ESP + 0x44],ECX
CALL 0x0002c870
MOV EAX,dword ptr [ESP + 0x18]
ADD dword ptr [ESI + 0x8],EAX
MOV EDX,dword ptr [ESP + 0x1c]
MOV ECX,dword ptr [ESP + 0x44]
ADD ESP,0x10
ADD ECX,EAX
ADD EDI,EDX
SUB EBP,EDX
LEA EAX,[ESI + 0x38]
MOV dword ptr [ESP + 0x30],ESI
MOV ESI,ECX
MOV dword ptr [ESP + 0x8],EAX
JMP 0x002747a9
ADD EDI,EAX
SUB EBP,EAX
JZ 0x002747d8
LEA ESI,[ESI + EAX*0x4]
SUB ESP,0x4
PUSH EBP
PUSH ESI
PUSH dword ptr [ESP + 0x14]
CALL 0x00248a80
ADD ESP,0x10
CMP EAX,-0x1
JZ 0x0027480a
TEST EAX,EAX
JNZ 0x002747a0
MOV ESI,dword ptr [ESP + 0x30]
TEST EBP,EBP
JNZ 0x002747e0
MOV byte ptr [ESI + 0x65],0x1
JMP 0x00274691
MOV ESI,dword ptr [ESP + 0x30]
JMP 0x002747cb
MOV EAX,dword ptr [ESI + 0x5c]
MOV dword ptr [ESI + 0x14],0x0
MOV dword ptr [ESI + 0x10],0x0
MOV dword ptr [ESI + 0x4],EAX
MOV dword ptr [ESI + 0x8],EAX
MOV dword ptr [ESI + 0xc],EAX
MOV dword ptr [ESI + 0x18],0x0
MOV byte ptr [ESI + 0x65],0x0
JMP 0x00274691
SUB ESP,0xc
LEA EAX,[EBX + 0xfff027a0]
PUSH EAX
CALL 0x00287f60
CALL 0x0028daa0
MOV ECX,dword ptr [ESP + 0xc]
MOV EDI,0x1
JMP 0x0027460c
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)\n\n{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}\n\n" comment (function_definition "int FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)\n\n{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" primitive_type (function_declarator "FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)" identifier (parameter_list "(int *param_1,wchar_t *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wchar_t *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" { (declaration "wchar_t *pwVar1;" type_identifier (pointer_declarator "*pwVar1" * identifier) ;) (declaration "wchar_t *pwVar2;" type_identifier (pointer_declarator "*pwVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (if_statement "if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" if (parenthesized_expression "((char)param_1[0x1d] == '\0')" ( (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }" { (if_statement "if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" if (parenthesized_expression "(*(char *)((int)param_1 + 0x66) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 0x66) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0x66)" * (cast_expression "(char *)((int)param_1 + 0x66)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x66)" ( (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }" { (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" else (compound_statement "{\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" { (expression_statement "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);" (assignment_expression "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" identifier = (call_expression "(**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" ( (pointer_expression "**(code **)(*param_1 + 0x34)" * (pointer_expression "*(code **)(*param_1 + 0x34)" * (cast_expression "(code **)(*param_1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x34)" ( (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,0xffffffff)" ( identifier , number_literal )))) ;) (if_statement "if (iVar6 == -1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x66) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x66) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x66)" * (cast_expression "(undefined1 *)((int)param_1 + 0x66)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x66)" ( (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) }))) }) (else_clause "else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" else (compound_statement "{\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" { (expression_statement "pwVar1 = (wchar_t *)param_1[2];" (assignment_expression "pwVar1 = (wchar_t *)param_1[2]" identifier = (cast_expression "(wchar_t *)param_1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar2 = (wchar_t *)param_1[1];" (assignment_expression "pwVar2 = (wchar_t *)param_1[1]" identifier = (cast_expression "(wchar_t *)param_1[1]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "pwVar5 = pwVar1;" (assignment_expression "pwVar5 = pwVar1" identifier = identifier) ;) (expression_statement "pwVar7 = param_2;" (assignment_expression "pwVar7 = param_2" identifier = identifier) ;) (if_statement "if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" if (parenthesized_expression "((0 < param_3) && (pwVar1 == pwVar2))" ( (binary_expression "(0 < param_3) && (pwVar1 == pwVar2)" (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) && (parenthesized_expression "(pwVar1 == pwVar2)" ( (binary_expression "pwVar1 == pwVar2" identifier == identifier) ))) )) (compound_statement "{\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" { (expression_statement "pwVar7 = param_2 + 1;" (assignment_expression "pwVar7 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "pwVar5 = pwVar1 + 1;" (assignment_expression "pwVar5 = pwVar1 + 1" identifier = (binary_expression "pwVar1 + 1" identifier + number_literal)) ;) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (expression_statement "*param_2 = *pwVar1;" (assignment_expression "*param_2 = *pwVar1" (pointer_expression "*param_2" * identifier) = (pointer_expression "*pwVar1" * identifier)) ;) (expression_statement "param_1[2] = (int)pwVar5;" (assignment_expression "param_1[2] = (int)pwVar5" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (cast_expression "(int)pwVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" if (parenthesized_expression "((char)param_1[0x1d] == '\0')" ( (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" { (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" identifier = identifier) ;) (goto_statement "goto LAB_0027463f;" goto statement_identifier ;) })) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) })) (expression_statement "*(undefined1 *)(param_1 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1d) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1d)" * (cast_expression "(undefined1 *)(param_1 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1d)" ( (binary_expression "param_1 + 0x1d" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;" (assignment_expression "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" identifier = (binary_expression "param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + (binary_expression "(uint)(pwVar2 != pwVar5) * 4" (call_expression "(uint)(pwVar2 != pwVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pwVar2 != pwVar5)" ( (binary_expression "pwVar2 != pwVar5" identifier != identifier) ))) * number_literal))) ;) (expression_statement "param_1[0x1b] = iVar6;" (assignment_expression "param_1[0x1b] = iVar6" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = param_1[0x17];" (assignment_expression "param_1[1] = param_1[0x17]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = param_1[0x1c];" (assignment_expression "param_1[3] = param_1[0x1c]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" identifier = identifier) ;) }))) (labeled_statement "LAB_0027463f:\n  iVar6 = 2;" statement_identifier : (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;)) (if_statement "if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }" if (parenthesized_expression "(1 < (uint)param_1[0x18])" ( (binary_expression "1 < (uint)param_1[0x18]" number_literal < (cast_expression "(uint)param_1[0x18]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x18]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar6 = param_1[0x18];\n  }" { (expression_statement "iVar6 = param_1[0x18];" (assignment_expression "iVar6 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) })) (if_statement "if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" if (parenthesized_expression "(iVar6 + -1 < param_3)" ( (binary_expression "iVar6 + -1 < param_3" (binary_expression "iVar6 + -1" identifier + number_literal) < identifier) )) (compound_statement "{\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" { (expression_statement "piVar3 = (int *)param_1[0x1e];" (assignment_expression "piVar3 = (int *)param_1[0x1e]" identifier = (cast_expression "(int *)param_1[0x1e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x1e]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_0028daa0();\n    }" { comment (expression_statement "FUN_0028daa0();" (call_expression "FUN_0028daa0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);" (assignment_expression "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3)" identifier = (call_expression "(**(code **)(*piVar3 + 0x18))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x18))" ( (pointer_expression "**(code **)(*piVar3 + 0x18)" * (pointer_expression "*(code **)(*piVar3 + 0x18)" * (cast_expression "(code **)(*piVar3 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar3 + 0x18)" ( (binary_expression "*piVar3 + 0x18" (pointer_expression "*piVar3" * identifier) + number_literal) ))))) )) (argument_list "(piVar3)" ( identifier )))) ;) (if_statement "if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" if (parenthesized_expression "(((local_24 & 8) != 0) && (cVar4 != '\0'))" ( (binary_expression "((local_24 & 8) != 0) && (cVar4 != '\0')" (parenthesized_expression "((local_24 & 8) != 0)" ( (binary_expression "(local_24 & 8) != 0" (parenthesized_expression "(local_24 & 8)" ( (binary_expression "local_24 & 8" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "(cVar4 != '\0')" ( (binary_expression "cVar4 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" { (expression_statement "pwVar7 = (wchar_t *)param_1[2];" (assignment_expression "pwVar7 = (wchar_t *)param_1[2]" identifier = (cast_expression "(wchar_t *)param_1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" if (parenthesized_expression "(pwVar7 != (wchar_t *)param_1[3])" ( (binary_expression "pwVar7 != (wchar_t *)param_1[3]" identifier != (cast_expression "(wchar_t *)param_1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" { (expression_statement "iVar6 = param_1[3] - (int)pwVar7;" (assignment_expression "iVar6 = param_1[3] - (int)pwVar7" identifier = (binary_expression "param_1[3] - (int)pwVar7" (subscript_expression "param_1[3]" identifier [ number_literal ]) - (cast_expression "(int)pwVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "__n = iVar6 >> 2;" (assignment_expression "__n = iVar6 >> 2" identifier = (binary_expression "iVar6 >> 2" identifier >> number_literal)) ;) (expression_statement "wmemcpy(param_2,pwVar7,__n);" (call_expression "wmemcpy(param_2,pwVar7,__n)" identifier (argument_list "(param_2,pwVar7,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "param_1[2] = param_1[2] + iVar6;" (assignment_expression "param_1[2] = param_1[2] + iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "param_1[2] + iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) + identifier)) ;) (expression_statement "param_2 = (wchar_t *)((int)param_2 + iVar6);" (assignment_expression "param_2 = (wchar_t *)((int)param_2 + iVar6)" identifier = (cast_expression "(wchar_t *)((int)param_2 + iVar6)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + iVar6)" ( (binary_expression "(int)param_2 + iVar6" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar8 = iVar8 + __n;" (assignment_expression "iVar8 = iVar8 + __n" identifier = (binary_expression "iVar8 + __n" identifier + identifier)) ;) (expression_statement "param_3 = param_3 - __n;" (assignment_expression "param_3 = param_3 - __n" identifier = (binary_expression "param_3 - __n" identifier - identifier)) ;) })) (while_statement "while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" { (expression_statement "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);" (assignment_expression "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3)" identifier = (call_expression "FUN_00248a80(param_1 + 0xe,param_2,param_3)" identifier (argument_list "(param_1 + 0xe,param_2,param_3)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) , identifier , identifier )))) ;) (if_statement "if (iVar6 == -1) {\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" { comment (expression_statement "FUN_00287f60("basic_filebuf::xsgetn error reading the file");" (call_expression "FUN_00287f60("basic_filebuf::xsgetn error reading the file")" identifier (argument_list "("basic_filebuf::xsgetn error reading the file")" ( (string_literal ""basic_filebuf::xsgetn error reading the file"" " string_content ") ))) ;) })) (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar8 + iVar6;" (assignment_expression "iVar8 = iVar8 + iVar6" identifier = (binary_expression "iVar8 + iVar6" identifier + identifier)) ;) (expression_statement "param_3 = param_3 - iVar6;" (assignment_expression "param_3 = param_3 - iVar6" identifier = (binary_expression "param_3 - iVar6" identifier - identifier)) ;) (if_statement "if (param_3 == 0) goto LAB_002747cb;" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_002747cb;" goto statement_identifier ;)) (expression_statement "param_2 = param_2 + iVar6;" (assignment_expression "param_2 = param_2 + iVar6" identifier = (binary_expression "param_2 + iVar6" identifier + identifier)) ;) })) (if_statement "if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" { (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" * (cast_expression "(undefined1 *)((int)param_1 + 0x65)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x65)" ( (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (return_statement "return iVar8;" return identifier ;) })) (labeled_statement "LAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;" statement_identifier : (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" * (cast_expression "(undefined1 *)((int)param_1 + 0x65)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x65)" ( (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;)) (return_statement "return iVar8;" return identifier ;) })) })) (expression_statement "iVar6 = FUN_00253530(param_1,param_2,param_3);" (assignment_expression "iVar6 = FUN_00253530(param_1,param_2,param_3)" identifier = (call_expression "FUN_00253530(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (return_statement "return iVar8 + iVar6;" return (binary_expression "iVar8 + iVar6" identifier + identifier) ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* std::wfilebuf::xsgetn(wchar_t*, int) */\n\nvoid std::wfilebuf::xsgetn(wchar_t *param_1,int param_2)\n\n{\n}\n\n" comment comment (function_definition "void std::wfilebuf::xsgetn(wchar_t *param_1,int param_2)\n\n{\n}" primitive_type (ERROR "std::wfilebuf::" identifier : : identifier : :) (function_declarator "xsgetn(wchar_t *param_1,int param_2)" identifier (parameter_list "(wchar_t *param_1,int param_2)" ( (parameter_declaration "wchar_t *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n}" { })))
(translation_unit "int FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)\n\n{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}\n\n" (function_definition "int FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)\n\n{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" primitive_type (function_declarator "FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)" identifier (parameter_list "(int *param_1,wchar_t *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wchar_t *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" { (declaration "wchar_t *pwVar1;" type_identifier (pointer_declarator "*pwVar1" * identifier) ;) (declaration "wchar_t *pwVar2;" type_identifier (pointer_declarator "*pwVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (if_statement "if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" if (parenthesized_expression "((char)param_1[0x1d] == '\0')" ( (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }" { (if_statement "if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" if (parenthesized_expression "(*(char *)((int)param_1 + 0x66) == '\0')" ( (binary_expression "*(char *)((int)param_1 + 0x66) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0x66)" * (cast_expression "(char *)((int)param_1 + 0x66)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x66)" ( (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }" { (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" else (compound_statement "{\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" { (expression_statement "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);" (assignment_expression "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" identifier = (call_expression "(**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" ( (pointer_expression "**(code **)(*param_1 + 0x34)" * (pointer_expression "*(code **)(*param_1 + 0x34)" * (cast_expression "(code **)(*param_1 + 0x34)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x34)" ( (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1,0xffffffff)" ( identifier , number_literal )))) ;) (if_statement "if (iVar6 == -1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x66) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x66) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x66)" * (cast_expression "(undefined1 *)((int)param_1 + 0x66)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x66)" ( (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) }))) }) (else_clause "else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" else (compound_statement "{\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" { (expression_statement "pwVar1 = (wchar_t *)param_1[2];" (assignment_expression "pwVar1 = (wchar_t *)param_1[2]" identifier = (cast_expression "(wchar_t *)param_1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar2 = (wchar_t *)param_1[1];" (assignment_expression "pwVar2 = (wchar_t *)param_1[1]" identifier = (cast_expression "(wchar_t *)param_1[1]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (expression_statement "pwVar5 = pwVar1;" (assignment_expression "pwVar5 = pwVar1" identifier = identifier) ;) (expression_statement "pwVar7 = param_2;" (assignment_expression "pwVar7 = param_2" identifier = identifier) ;) (if_statement "if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" if (parenthesized_expression "((0 < param_3) && (pwVar1 == pwVar2))" ( (binary_expression "(0 < param_3) && (pwVar1 == pwVar2)" (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) && (parenthesized_expression "(pwVar1 == pwVar2)" ( (binary_expression "pwVar1 == pwVar2" identifier == identifier) ))) )) (compound_statement "{\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" { (expression_statement "pwVar7 = param_2 + 1;" (assignment_expression "pwVar7 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "pwVar5 = pwVar1 + 1;" (assignment_expression "pwVar5 = pwVar1 + 1" identifier = (binary_expression "pwVar1 + 1" identifier + number_literal)) ;) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (expression_statement "*param_2 = *pwVar1;" (assignment_expression "*param_2 = *pwVar1" (pointer_expression "*param_2" * identifier) = (pointer_expression "*pwVar1" * identifier)) ;) (expression_statement "param_1[2] = (int)pwVar5;" (assignment_expression "param_1[2] = (int)pwVar5" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (cast_expression "(int)pwVar5" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" if (parenthesized_expression "((char)param_1[0x1d] == '\0')" ( (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" { (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" identifier = identifier) ;) (goto_statement "goto LAB_0027463f;" goto statement_identifier ;) })) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" identifier = number_literal) ;) })) (expression_statement "*(undefined1 *)(param_1 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1d) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1d)" * (cast_expression "(undefined1 *)(param_1 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1d)" ( (binary_expression "param_1 + 0x1d" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;" (assignment_expression "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" identifier = (binary_expression "param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + (binary_expression "(uint)(pwVar2 != pwVar5) * 4" (call_expression "(uint)(pwVar2 != pwVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pwVar2 != pwVar5)" ( (binary_expression "pwVar2 != pwVar5" identifier != identifier) ))) * number_literal))) ;) (expression_statement "param_1[0x1b] = iVar6;" (assignment_expression "param_1[0x1b] = iVar6" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = param_1[0x17];" (assignment_expression "param_1[1] = param_1[0x17]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = param_1[0x1c];" (assignment_expression "param_1[3] = param_1[0x1c]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" identifier = (subscript_expression "param_1[0x10]" identifier [ number_literal ])) ;) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" identifier = identifier) ;) }))) (labeled_statement "LAB_0027463f:\n  iVar6 = 2;" statement_identifier : (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;)) (if_statement "if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }" if (parenthesized_expression "(1 < (uint)param_1[0x18])" ( (binary_expression "1 < (uint)param_1[0x18]" number_literal < (cast_expression "(uint)param_1[0x18]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x18]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar6 = param_1[0x18];\n  }" { (expression_statement "iVar6 = param_1[0x18];" (assignment_expression "iVar6 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) })) (if_statement "if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" if (parenthesized_expression "(iVar6 + -1 < param_3)" ( (binary_expression "iVar6 + -1 < param_3" (binary_expression "iVar6 + -1" identifier + number_literal) < identifier) )) (compound_statement "{\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" { (expression_statement "piVar3 = (int *)param_1[0x1e];" (assignment_expression "piVar3 = (int *)param_1[0x1e]" identifier = (cast_expression "(int *)param_1[0x1e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x1e]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }" if (parenthesized_expression "(piVar3 == (int *)0x0)" ( (binary_expression "piVar3 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n      FUN_0028daa0();\n    }" { (expression_statement "FUN_0028daa0();" (call_expression "FUN_0028daa0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);" (assignment_expression "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3)" identifier = (call_expression "(**(code **)(*piVar3 + 0x18))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x18))" ( (pointer_expression "**(code **)(*piVar3 + 0x18)" * (pointer_expression "*(code **)(*piVar3 + 0x18)" * (cast_expression "(code **)(*piVar3 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar3 + 0x18)" ( (binary_expression "*piVar3 + 0x18" (pointer_expression "*piVar3" * identifier) + number_literal) ))))) )) (argument_list "(piVar3)" ( identifier )))) ;) (if_statement "if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" if (parenthesized_expression "(((local_24 & 8) != 0) && (cVar4 != '\0'))" ( (binary_expression "((local_24 & 8) != 0) && (cVar4 != '\0')" (parenthesized_expression "((local_24 & 8) != 0)" ( (binary_expression "(local_24 & 8) != 0" (parenthesized_expression "(local_24 & 8)" ( (binary_expression "local_24 & 8" identifier & number_literal) )) != number_literal) )) && (parenthesized_expression "(cVar4 != '\0')" ( (binary_expression "cVar4 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" { (expression_statement "pwVar7 = (wchar_t *)param_1[2];" (assignment_expression "pwVar7 = (wchar_t *)param_1[2]" identifier = (cast_expression "(wchar_t *)param_1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" if (parenthesized_expression "(pwVar7 != (wchar_t *)param_1[3])" ( (binary_expression "pwVar7 != (wchar_t *)param_1[3]" identifier != (cast_expression "(wchar_t *)param_1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" { (expression_statement "iVar6 = param_1[3] - (int)pwVar7;" (assignment_expression "iVar6 = param_1[3] - (int)pwVar7" identifier = (binary_expression "param_1[3] - (int)pwVar7" (subscript_expression "param_1[3]" identifier [ number_literal ]) - (cast_expression "(int)pwVar7" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "__n = iVar6 >> 2;" (assignment_expression "__n = iVar6 >> 2" identifier = (binary_expression "iVar6 >> 2" identifier >> number_literal)) ;) (expression_statement "wmemcpy(param_2,pwVar7,__n);" (call_expression "wmemcpy(param_2,pwVar7,__n)" identifier (argument_list "(param_2,pwVar7,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "param_1[2] = param_1[2] + iVar6;" (assignment_expression "param_1[2] = param_1[2] + iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "param_1[2] + iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) + identifier)) ;) (expression_statement "param_2 = (wchar_t *)((int)param_2 + iVar6);" (assignment_expression "param_2 = (wchar_t *)((int)param_2 + iVar6)" identifier = (cast_expression "(wchar_t *)((int)param_2 + iVar6)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + iVar6)" ( (binary_expression "(int)param_2 + iVar6" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar8 = iVar8 + __n;" (assignment_expression "iVar8 = iVar8 + __n" identifier = (binary_expression "iVar8 + __n" identifier + identifier)) ;) (expression_statement "param_3 = param_3 - __n;" (assignment_expression "param_3 = param_3 - __n" identifier = (binary_expression "param_3 - __n" identifier - identifier)) ;) })) (while_statement "while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" { (expression_statement "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);" (assignment_expression "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3)" identifier = (call_expression "FUN_00248a80(param_1 + 0xe,param_2,param_3)" identifier (argument_list "(param_1 + 0xe,param_2,param_3)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) , identifier , identifier )))) ;) (if_statement "if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" { (expression_statement "FUN_00287f60("basic_filebuf::xsgetn error reading the file");" (call_expression "FUN_00287f60("basic_filebuf::xsgetn error reading the file")" identifier (argument_list "("basic_filebuf::xsgetn error reading the file")" ( (string_literal ""basic_filebuf::xsgetn error reading the file"" " string_content ") ))) ;) })) (if_statement "if (iVar6 == 0) break;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar8 + iVar6;" (assignment_expression "iVar8 = iVar8 + iVar6" identifier = (binary_expression "iVar8 + iVar6" identifier + identifier)) ;) (expression_statement "param_3 = param_3 - iVar6;" (assignment_expression "param_3 = param_3 - iVar6" identifier = (binary_expression "param_3 - iVar6" identifier - identifier)) ;) (if_statement "if (param_3 == 0) goto LAB_002747cb;" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_002747cb;" goto statement_identifier ;)) (expression_statement "param_2 = param_2 + iVar6;" (assignment_expression "param_2 = param_2 + iVar6" identifier = (binary_expression "param_2 + iVar6" identifier + identifier)) ;) })) (if_statement "if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" { (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" * (cast_expression "(undefined1 *)((int)param_1 + 0x65)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x65)" ( (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (return_statement "return iVar8;" return identifier ;) })) (labeled_statement "LAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;" statement_identifier : (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" * (cast_expression "(undefined1 *)((int)param_1 + 0x65)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x65)" ( (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;)) (return_statement "return iVar8;" return identifier ;) })) })) (expression_statement "iVar6 = FUN_00253530(param_1,param_2,param_3);" (assignment_expression "iVar6 = FUN_00253530(param_1,param_2,param_3)" identifier = (call_expression "FUN_00253530(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;) (return_statement "return iVar8 + iVar6;" return (binary_expression "iVar8 + iVar6" identifier + identifier) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) }))) }) (else_clause else (compound_statement { (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 IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != IDENT) ))) * LIT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (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 (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;)) (return_statement return IDENT ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (return_statement return (binary_expression IDENT + IDENT) ;) })))
(function_definition "int FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)\n\n{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" (primitive_type "int") (function_declarator "FUN_002745d0(int *param_1,wchar_t *param_2,int param_3)" (identifier "FUN_002745d0") (parameter_list "(int *param_1,wchar_t *param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "wchar_t *param_2" (type_identifier "wchar_t") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  wchar_t *pwVar1;\n  wchar_t *pwVar2;\n  int *piVar3;\n  char cVar4;\n  wchar_t *pwVar5;\n  int iVar6;\n  wchar_t *pwVar7;\n  size_t __n;\n  int iVar8;\n  uint local_24;\n  \n  if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }\nLAB_0027463f:\n  iVar6 = 2;\n  if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }\n  if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }\n  iVar6 = FUN_00253530(param_1,param_2,param_3);\n  return iVar8 + iVar6;\n}" ({ "{") (declaration "wchar_t *pwVar1;" (type_identifier "wchar_t") (pointer_declarator "*pwVar1" (* "*") (identifier "pwVar1")) (; ";")) (declaration "wchar_t *pwVar2;" (type_identifier "wchar_t") (pointer_declarator "*pwVar2" (* "*") (identifier "pwVar2")) (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "char cVar4;" (primitive_type "char") (identifier "cVar4") (; ";")) (declaration "wchar_t *pwVar5;" (type_identifier "wchar_t") (pointer_declarator "*pwVar5" (* "*") (identifier "pwVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "wchar_t *pwVar7;" (type_identifier "wchar_t") (pointer_declarator "*pwVar7" (* "*") (identifier "pwVar7")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "uint local_24;" (type_identifier "uint") (identifier "local_24") (; ";")) (if_statement "if ((char)param_1[0x1d] == '\0') {\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }\n  else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" (if "if") (parenthesized_expression "((char)param_1[0x1d] == '\0')" (( "(") (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }\n  }" ({ "{") (if_statement "if (*(char *)((int)param_1 + 0x66) == '\0') {\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }\n    else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" (if "if") (parenthesized_expression "(*(char *)((int)param_1 + 0x66) == '\0')" (( "(") (binary_expression "*(char *)((int)param_1 + 0x66) == '\0'" (pointer_expression "*(char *)((int)param_1 + 0x66)" (* "*") (cast_expression "(char *)((int)param_1 + 0x66)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x66)" (( "(") (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x66")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      local_24 = param_1[0x10];\n      iVar8 = 0;\n    }" ({ "{") (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" (identifier "local_24") (= "=") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" (else "else") (compound_statement "{\n      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);\n      if (iVar6 == -1) {\n        return 0;\n      }\n      local_24 = param_1[0x10];\n      param_1[5] = 0;\n      iVar8 = 0;\n      param_1[4] = 0;\n      iVar6 = param_1[0x17];\n      param_1[6] = 0;\n      param_1[1] = iVar6;\n      param_1[2] = iVar6;\n      param_1[3] = iVar6;\n      *(undefined1 *)((int)param_1 + 0x66) = 0;\n    }" ({ "{") (expression_statement "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);" (assignment_expression "iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" (identifier "iVar6") (= "=") (call_expression "(**(code **)(*param_1 + 0x34))(param_1,0xffffffff)" (parenthesized_expression "(**(code **)(*param_1 + 0x34))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x34)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x34)" (* "*") (cast_expression "(code **)(*param_1 + 0x34)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x34)" (( "(") (binary_expression "*param_1 + 0x34" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x34")) () ")"))))) () ")")) (argument_list "(param_1,0xffffffff)" (( "(") (identifier "param_1") (, ",") (number_literal "0xffffffff") () ")")))) (; ";")) (if_statement "if (iVar6 == -1) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" (identifier "local_24") (= "=") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "*(undefined1 *)((int)param_1 + 0x66) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x66) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x66)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x66)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x66)" (( "(") (binary_expression "(int)param_1 + 0x66" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x66")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" (else "else") (compound_statement "{\n    pwVar1 = (wchar_t *)param_1[2];\n    pwVar2 = (wchar_t *)param_1[1];\n    iVar8 = 0;\n    pwVar5 = pwVar1;\n    pwVar7 = param_2;\n    if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }\n    *(undefined1 *)(param_1 + 0x1d) = 0;\n    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;\n    param_1[0x1b] = iVar6;\n    param_1[2] = iVar6;\n    param_1[1] = param_1[0x17];\n    param_1[3] = param_1[0x1c];\n    local_24 = param_1[0x10];\n    param_2 = pwVar7;\n  }" ({ "{") (expression_statement "pwVar1 = (wchar_t *)param_1[2];" (assignment_expression "pwVar1 = (wchar_t *)param_1[2]" (identifier "pwVar1") (= "=") (cast_expression "(wchar_t *)param_1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pwVar2 = (wchar_t *)param_1[1];" (assignment_expression "pwVar2 = (wchar_t *)param_1[1]" (identifier "pwVar2") (= "=") (cast_expression "(wchar_t *)param_1[1]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "pwVar5 = pwVar1;" (assignment_expression "pwVar5 = pwVar1" (identifier "pwVar5") (= "=") (identifier "pwVar1")) (; ";")) (expression_statement "pwVar7 = param_2;" (assignment_expression "pwVar7 = param_2" (identifier "pwVar7") (= "=") (identifier "param_2")) (; ";")) (if_statement "if ((0 < param_3) && (pwVar1 == pwVar2)) {\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" (if "if") (parenthesized_expression "((0 < param_3) && (pwVar1 == pwVar2))" (( "(") (binary_expression "(0 < param_3) && (pwVar1 == pwVar2)" (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "(pwVar1 == pwVar2)" (( "(") (binary_expression "pwVar1 == pwVar2" (identifier "pwVar1") (== "==") (identifier "pwVar2")) () ")"))) () ")")) (compound_statement "{\n      pwVar7 = param_2 + 1;\n      pwVar5 = pwVar1 + 1;\n      param_3 = param_3 + -1;\n      *param_2 = *pwVar1;\n      param_1[2] = (int)pwVar5;\n      if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }\n      iVar8 = 1;\n    }" ({ "{") (expression_statement "pwVar7 = param_2 + 1;" (assignment_expression "pwVar7 = param_2 + 1" (identifier "pwVar7") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pwVar5 = pwVar1 + 1;" (assignment_expression "pwVar5 = pwVar1 + 1" (identifier "pwVar5") (= "=") (binary_expression "pwVar1 + 1" (identifier "pwVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_3 = param_3 + -1;" (assignment_expression "param_3 = param_3 + -1" (identifier "param_3") (= "=") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*param_2 = *pwVar1;" (assignment_expression "*param_2 = *pwVar1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (pointer_expression "*pwVar1" (* "*") (identifier "pwVar1"))) (; ";")) (expression_statement "param_1[2] = (int)pwVar5;" (assignment_expression "param_1[2] = (int)pwVar5" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)pwVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar5"))) (; ";")) (if_statement "if ((char)param_1[0x1d] == '\0') {\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" (if "if") (parenthesized_expression "((char)param_1[0x1d] == '\0')" (( "(") (binary_expression "(char)param_1[0x1d] == '\0'" (cast_expression "(char)param_1[0x1d]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        local_24 = param_1[0x10];\n        iVar8 = 1;\n        param_2 = pwVar7;\n        goto LAB_0027463f;\n      }" ({ "{") (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" (identifier "local_24") (= "=") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" (identifier "iVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" (identifier "param_2") (= "=") (identifier "pwVar7")) (; ";")) (goto_statement "goto LAB_0027463f;" (goto "goto") (statement_identifier "LAB_0027463f") (; ";")) (} "}"))) (expression_statement "iVar8 = 1;" (assignment_expression "iVar8 = 1" (identifier "iVar8") (= "=") (number_literal "1")) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)(param_1 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1d) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1d)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0x1d)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1d)" (( "(") (binary_expression "param_1 + 0x1d" (identifier "param_1") (+ "+") (number_literal "0x1d")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;" (assignment_expression "iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" (identifier "iVar6") (= "=") (binary_expression "param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (+ "+") (binary_expression "(uint)(pwVar2 != pwVar5) * 4" (call_expression "(uint)(pwVar2 != pwVar5)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(pwVar2 != pwVar5)" (( "(") (binary_expression "pwVar2 != pwVar5" (identifier "pwVar2") (!= "!=") (identifier "pwVar5")) () ")"))) (* "*") (number_literal "4")))) (; ";")) (expression_statement "param_1[0x1b] = iVar6;" (assignment_expression "param_1[0x1b] = iVar6" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[1] = param_1[0x17];" (assignment_expression "param_1[1] = param_1[0x17]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "param_1[3] = param_1[0x1c];" (assignment_expression "param_1[3] = param_1[0x1c]" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]"))) (; ";")) (expression_statement "local_24 = param_1[0x10];" (assignment_expression "local_24 = param_1[0x10]" (identifier "local_24") (= "=") (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]"))) (; ";")) (expression_statement "param_2 = pwVar7;" (assignment_expression "param_2 = pwVar7" (identifier "param_2") (= "=") (identifier "pwVar7")) (; ";")) (} "}")))) (labeled_statement "LAB_0027463f:\n  iVar6 = 2;" (statement_identifier "LAB_0027463f") (: ":") (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" (identifier "iVar6") (= "=") (number_literal "2")) (; ";"))) (if_statement "if (1 < (uint)param_1[0x18]) {\n    iVar6 = param_1[0x18];\n  }" (if "if") (parenthesized_expression "(1 < (uint)param_1[0x18])" (( "(") (binary_expression "1 < (uint)param_1[0x18]" (number_literal "1") (< "<") (cast_expression "(uint)param_1[0x18]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")))) () ")")) (compound_statement "{\n    iVar6 = param_1[0x18];\n  }" ({ "{") (expression_statement "iVar6 = param_1[0x18];" (assignment_expression "iVar6 = param_1[0x18]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]"))) (; ";")) (} "}"))) (if_statement "if (iVar6 + -1 < param_3) {\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" (if "if") (parenthesized_expression "(iVar6 + -1 < param_3)" (( "(") (binary_expression "iVar6 + -1 < param_3" (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1")) (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n    piVar3 = (int *)param_1[0x1e];\n    if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }\n    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);\n    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }\n  }" ({ "{") (expression_statement "piVar3 = (int *)param_1[0x1e];" (assignment_expression "piVar3 = (int *)param_1[0x1e]" (identifier "piVar3") (= "=") (cast_expression "(int *)param_1[0x1e]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")))) (; ";")) (if_statement "if (piVar3 == (int *)0x0) {\n                    \n      FUN_0028daa0();\n    }" (if "if") (parenthesized_expression "(piVar3 == (int *)0x0)" (( "(") (binary_expression "piVar3 == (int *)0x0" (identifier "piVar3") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n      FUN_0028daa0();\n    }" ({ "{") (expression_statement "FUN_0028daa0();" (call_expression "FUN_0028daa0()" (identifier "FUN_0028daa0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);" (assignment_expression "cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3)" (identifier "cVar4") (= "=") (call_expression "(**(code **)(*piVar3 + 0x18))(piVar3)" (parenthesized_expression "(**(code **)(*piVar3 + 0x18))" (( "(") (pointer_expression "**(code **)(*piVar3 + 0x18)" (* "*") (pointer_expression "*(code **)(*piVar3 + 0x18)" (* "*") (cast_expression "(code **)(*piVar3 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar3 + 0x18)" (( "(") (binary_expression "*piVar3 + 0x18" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(piVar3)" (( "(") (identifier "piVar3") () ")")))) (; ";")) (if_statement "if (((local_24 & 8) != 0) && (cVar4 != '\0')) {\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" (if "if") (parenthesized_expression "(((local_24 & 8) != 0) && (cVar4 != '\0'))" (( "(") (binary_expression "((local_24 & 8) != 0) && (cVar4 != '\0')" (parenthesized_expression "((local_24 & 8) != 0)" (( "(") (binary_expression "(local_24 & 8) != 0" (parenthesized_expression "(local_24 & 8)" (( "(") (binary_expression "local_24 & 8" (identifier "local_24") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(cVar4 != '\0')" (( "(") (binary_expression "cVar4 != '\0'" (identifier "cVar4") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n      pwVar7 = (wchar_t *)param_1[2];\n      if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }\n      while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }\n      if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }\nLAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;\n      return iVar8;\n    }" ({ "{") (expression_statement "pwVar7 = (wchar_t *)param_1[2];" (assignment_expression "pwVar7 = (wchar_t *)param_1[2]" (identifier "pwVar7") (= "=") (cast_expression "(wchar_t *)param_1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (pwVar7 != (wchar_t *)param_1[3]) {\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" (if "if") (parenthesized_expression "(pwVar7 != (wchar_t *)param_1[3])" (( "(") (binary_expression "pwVar7 != (wchar_t *)param_1[3]" (identifier "pwVar7") (!= "!=") (cast_expression "(wchar_t *)param_1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n        iVar6 = param_1[3] - (int)pwVar7;\n        __n = iVar6 >> 2;\n        wmemcpy(param_2,pwVar7,__n);\n        param_1[2] = param_1[2] + iVar6;\n        param_2 = (wchar_t *)((int)param_2 + iVar6);\n        iVar8 = iVar8 + __n;\n        param_3 = param_3 - __n;\n      }" ({ "{") (expression_statement "iVar6 = param_1[3] - (int)pwVar7;" (assignment_expression "iVar6 = param_1[3] - (int)pwVar7" (identifier "iVar6") (= "=") (binary_expression "param_1[3] - (int)pwVar7" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (- "-") (cast_expression "(int)pwVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar7")))) (; ";")) (expression_statement "__n = iVar6 >> 2;" (assignment_expression "__n = iVar6 >> 2" (identifier "__n") (= "=") (binary_expression "iVar6 >> 2" (identifier "iVar6") (>> ">>") (number_literal "2"))) (; ";")) (expression_statement "wmemcpy(param_2,pwVar7,__n);" (call_expression "wmemcpy(param_2,pwVar7,__n)" (identifier "wmemcpy") (argument_list "(param_2,pwVar7,__n)" (( "(") (identifier "param_2") (, ",") (identifier "pwVar7") (, ",") (identifier "__n") () ")"))) (; ";")) (expression_statement "param_1[2] = param_1[2] + iVar6;" (assignment_expression "param_1[2] = param_1[2] + iVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "param_1[2] + iVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "param_2 = (wchar_t *)((int)param_2 + iVar6);" (assignment_expression "param_2 = (wchar_t *)((int)param_2 + iVar6)" (identifier "param_2") (= "=") (cast_expression "(wchar_t *)((int)param_2 + iVar6)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + iVar6)" (( "(") (binary_expression "(int)param_2 + iVar6" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (identifier "iVar6")) () ")")))) (; ";")) (expression_statement "iVar8 = iVar8 + __n;" (assignment_expression "iVar8 = iVar8 + __n" (identifier "iVar8") (= "=") (binary_expression "iVar8 + __n" (identifier "iVar8") (+ "+") (identifier "__n"))) (; ";")) (expression_statement "param_3 = param_3 - __n;" (assignment_expression "param_3 = param_3 - __n" (identifier "param_3") (= "=") (binary_expression "param_3 - __n" (identifier "param_3") (- "-") (identifier "__n"))) (; ";")) (} "}"))) (while_statement "while( true ) {\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);\n        if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }\n        if (iVar6 == 0) break;\n        iVar8 = iVar8 + iVar6;\n        param_3 = param_3 - iVar6;\n        if (param_3 == 0) goto LAB_002747cb;\n        param_2 = param_2 + iVar6;\n      }" ({ "{") (expression_statement "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);" (assignment_expression "iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3)" (identifier "iVar6") (= "=") (call_expression "FUN_00248a80(param_1 + 0xe,param_2,param_3)" (identifier "FUN_00248a80") (argument_list "(param_1 + 0xe,param_2,param_3)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar6 == -1) {\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" (if "if") (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n                    \n          FUN_00287f60("basic_filebuf::xsgetn error reading the file");\n        }" ({ "{") (expression_statement "FUN_00287f60("basic_filebuf::xsgetn error reading the file");" (call_expression "FUN_00287f60("basic_filebuf::xsgetn error reading the file")" (identifier "FUN_00287f60") (argument_list "("basic_filebuf::xsgetn error reading the file")" (( "(") (string_literal ""basic_filebuf::xsgetn error reading the file"" (" """) (string_content "basic_filebuf::xsgetn error reading the file") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (iVar6 == 0) break;" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar8 = iVar8 + iVar6;" (assignment_expression "iVar8 = iVar8 + iVar6" (identifier "iVar8") (= "=") (binary_expression "iVar8 + iVar6" (identifier "iVar8") (+ "+") (identifier "iVar6"))) (; ";")) (expression_statement "param_3 = param_3 - iVar6;" (assignment_expression "param_3 = param_3 - iVar6" (identifier "param_3") (= "=") (binary_expression "param_3 - iVar6" (identifier "param_3") (- "-") (identifier "iVar6"))) (; ";")) (if_statement "if (param_3 == 0) goto LAB_002747cb;" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_002747cb;" (goto "goto") (statement_identifier "LAB_002747cb") (; ";"))) (expression_statement "param_2 = param_2 + iVar6;" (assignment_expression "param_2 = param_2 + iVar6" (identifier "param_2") (= "=") (binary_expression "param_2 + iVar6" (identifier "param_2") (+ "+") (identifier "iVar6"))) (; ";")) (} "}"))) (if_statement "if (param_3 != 0) {\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar6 = param_1[0x17];\n        param_1[5] = 0;\n        param_1[4] = 0;\n        param_1[1] = iVar6;\n        param_1[2] = iVar6;\n        param_1[3] = iVar6;\n        param_1[6] = 0;\n        *(undefined1 *)((int)param_1 + 0x65) = 0;\n        return iVar8;\n      }" ({ "{") (expression_statement "iVar6 = param_1[0x17];" (assignment_expression "iVar6 = param_1[0x17]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[1] = iVar6;" (assignment_expression "param_1[1] = iVar6" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[2] = iVar6;" (assignment_expression "param_1[2] = iVar6" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[3] = iVar6;" (assignment_expression "param_1[3] = iVar6" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x65)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x65)" (( "(") (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x65")) () ")")))) (= "=") (number_literal "0")) (; ";")) (return_statement "return iVar8;" (return "return") (identifier "iVar8") (; ";")) (} "}"))) (labeled_statement "LAB_002747cb:\n      *(undefined1 *)((int)param_1 + 0x65) = 1;" (statement_identifier "LAB_002747cb") (: ":") (expression_statement "*(undefined1 *)((int)param_1 + 0x65) = 1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x65) = 1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x65)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x65)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x65)" (( "(") (binary_expression "(int)param_1 + 0x65" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x65")) () ")")))) (= "=") (number_literal "1")) (; ";"))) (return_statement "return iVar8;" (return "return") (identifier "iVar8") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar6 = FUN_00253530(param_1,param_2,param_3);" (assignment_expression "iVar6 = FUN_00253530(param_1,param_2,param_3)" (identifier "iVar6") (= "=") (call_expression "FUN_00253530(param_1,param_2,param_3)" (identifier "FUN_00253530") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (return_statement "return iVar8 + iVar6;" (return "return") (binary_expression "iVar8 + iVar6" (identifier "iVar8") (+ "+") (identifier "iVar6")) (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* std::wfilebuf::xsgetn(wchar_t*, int) */

void std::wfilebuf::function_1(type_1 *param_1,int param_2)

{
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int MASKED(int *param_1,wchar_t *param_2,int param_3)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int *piVar3;
  char cVar4;
  wchar_t *pwVar5;
  int iVar6;
  wchar_t *pwVar7;
  size_t __n;
  int iVar8;
  uint local_24;
  
  if ((char)param_1[0x1d] == '\0') {
    if (*(char *)((int)param_1 + 0x66) == '\0') {
      local_24 = param_1[0x10];
      iVar8 = 0;
    }
    else {
      iVar6 = (**(code **)(*param_1 + 0x34))(param_1,0xffffffff);
      if (iVar6 == -1) {
        return 0;
      }
      local_24 = param_1[0x10];
      param_1[5] = 0;
      iVar8 = 0;
      param_1[4] = 0;
      iVar6 = param_1[0x17];
      param_1[6] = 0;
      param_1[1] = iVar6;
      param_1[2] = iVar6;
      param_1[3] = iVar6;
      *(undefined1 *)((int)param_1 + 0x66) = 0;
    }
  }
  else {
    pwVar1 = (wchar_t *)param_1[2];
    pwVar2 = (wchar_t *)param_1[1];
    iVar8 = 0;
    pwVar5 = pwVar1;
    pwVar7 = param_2;
    if ((0 < param_3) && (pwVar1 == pwVar2)) {
      pwVar7 = param_2 + 1;
      pwVar5 = pwVar1 + 1;
      param_3 = param_3 + -1;
      *param_2 = *pwVar1;
      param_1[2] = (int)pwVar5;
      if ((char)param_1[0x1d] == '\0') {
        local_24 = param_1[0x10];
        iVar8 = 1;
        param_2 = pwVar7;
        goto LAB_0027463f;
      }
      iVar8 = 1;
    }
    *(undefined1 *)(param_1 + 0x1d) = 0;
    iVar6 = param_1[0x1b] + (uint)(pwVar2 != pwVar5) * 4;
    param_1[0x1b] = iVar6;
    param_1[2] = iVar6;
    param_1[1] = param_1[0x17];
    param_1[3] = param_1[0x1c];
    local_24 = param_1[0x10];
    param_2 = pwVar7;
  }
LAB_0027463f:
  iVar6 = 2;
  if (1 < (uint)param_1[0x18]) {
    iVar6 = param_1[0x18];
  }
  if (iVar6 + -1 < param_3) {
    piVar3 = (int *)param_1[0x1e];
    if (piVar3 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_0028daa0();
    }
    cVar4 = (**(code **)(*piVar3 + 0x18))(piVar3);
    if (((local_24 & 8) != 0) && (cVar4 != '\0')) {
      pwVar7 = (wchar_t *)param_1[2];
      if (pwVar7 != (wchar_t *)param_1[3]) {
        iVar6 = param_1[3] - (int)pwVar7;
        __n = iVar6 >> 2;
        wmemcpy(param_2,pwVar7,__n);
        param_1[2] = param_1[2] + iVar6;
        param_2 = (wchar_t *)((int)param_2 + iVar6);
        iVar8 = iVar8 + __n;
        param_3 = param_3 - __n;
      }
      while( true ) {
        iVar6 = FUN_00248a80(param_1 + 0xe,param_2,param_3);
        if (iVar6 == -1) {
                    /* WARNING: Subroutine does not return */
          FUN_00287f60("basic_filebuf::xsgetn error reading the file");
        }
        if (iVar6 == 0) break;
        iVar8 = iVar8 + iVar6;
        param_3 = param_3 - iVar6;
        if (param_3 == 0) goto LAB_002747cb;
        param_2 = param_2 + iVar6;
      }
      if (param_3 != 0) {
        iVar6 = param_1[0x17];
        param_1[5] = 0;
        param_1[4] = 0;
        param_1[1] = iVar6;
        param_1[2] = iVar6;
        param_1[3] = iVar6;
        param_1[6] = 0;
        *(undefined1 *)((int)param_1 + 0x65) = 0;
        return iVar8;
      }
LAB_002747cb:
      *(undefined1 *)((int)param_1 + 0x65) = 1;
      return iVar8;
    }
  }
  iVar6 = FUN_00253530(param_1,param_2,param_3);
  return iVar8 + iVar6;
}

