
/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, false>(std::integral_constant<bool,
   true>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, false>*) */

void std::__facet_shims::__moneypunct_fill_cache<wchar_t,false>(long *param_1,long param_2)

{
  ulong uVar1;
  undefined4 uVar2;
  char *pcVar3;
  wchar_t *pwVar4;
  undefined1 *local_58;
  ulong local_50;
  undefined1 local_48 [24];
  
  uVar2 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar2;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))(&local_58,param_1);
  uVar1 = local_50;
                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */
  pcVar3 = (char *)operator_new__(local_50 + 1);
  std::string::copy((string *)&local_58,pcVar3,uVar1,0);
  pcVar3[uVar1] = '\0';
  *(char **)(param_2 + 0x10) = pcVar3;
  *(ulong *)(param_2 + 0x18) = uVar1;
  if (local_58 != local_48) {
    operator_delete(local_58);
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  uVar1 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */
    __cxa_throw_bad_array_new_length();
  }
                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */
  pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);
  std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);
  *(wchar_t **)(param_2 + 0x30) = pwVar4;
  pwVar4[uVar1] = L'\0';
  *(ulong *)(param_2 + 0x38) = uVar1;
  if (local_58 != local_48) {
    operator_delete(local_58);
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  uVar1 = local_50;
  if (local_50 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */
    pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);
    std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);
    *(wchar_t **)(param_2 + 0x40) = pwVar4;
    pwVar4[uVar1] = L'\0';
    *(ulong *)(param_2 + 0x48) = uVar1;
    if (local_58 != local_48) {
      operator_delete(local_58);
    }
    (**(code **)(*param_1 + 0x38))(&local_58,param_1);
    if (local_50 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */
      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);
      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);
      *(wchar_t **)(param_2 + 0x50) = pwVar4;
      pwVar4[local_50] = L'\0';
      *(ulong *)(param_2 + 0x58) = local_50;
      if (local_58 != local_48) {
        operator_delete(local_58);
      }
      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar2;
      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar2;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */
    __cxa_throw_bad_array_new_length();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */
  __cxa_throw_bad_array_new_length();
}



void FUN_003124f0(long *param_1,long param_2)

{
  long lVar1;
  undefined4 uVar2;
  long lVar3;
  long lVar4;
  undefined1 *local_58;
  long local_50;
  undefined1 local_48 [24];
  
  uVar2 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar2;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))(&local_58,param_1);
  lVar1 = local_50;
                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */
  lVar3 = thunk_FUN_002d94a0(local_50 + 1);
  FUN_002e3110(&local_58,lVar3,lVar1,0);
  *(undefined1 *)(lVar3 + lVar1) = 0;
  *(long *)(param_2 + 0x10) = lVar3;
  *(long *)(param_2 + 0x18) = lVar1;
  if (local_58 != local_48) {
    FUN_002dac70();
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  lVar1 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */
    FUN_002da6e0();
  }
  lVar3 = (local_50 + 1U) * 4;
                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */
  lVar4 = thunk_FUN_002d94a0(lVar3);
  FUN_002e0330(&local_58,lVar4,lVar1,0);
  *(long *)(param_2 + 0x30) = lVar4;
  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;
  *(long *)(param_2 + 0x38) = lVar1;
  if (local_58 != local_48) {
    FUN_002dac70();
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  lVar1 = local_50;
  if (local_50 + 1U < 0x1fffffffffffffff) {
    lVar4 = (local_50 + 1U) * 4;
                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */
    lVar3 = thunk_FUN_002d94a0(lVar4);
    FUN_002e0330(&local_58,lVar3,lVar1,0);
    *(long *)(param_2 + 0x40) = lVar3;
    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;
    *(long *)(param_2 + 0x48) = lVar1;
    if (local_58 != local_48) {
      FUN_002dac70();
    }
    (**(code **)(*param_1 + 0x38))(&local_58,param_1);
    if (local_50 + 1U < 0x1fffffffffffffff) {
      lVar1 = (local_50 + 1U) * 4;
                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */
      lVar3 = thunk_FUN_002d94a0(lVar1);
      FUN_002e0330(&local_58,lVar3,local_50,0);
      *(long *)(param_2 + 0x50) = lVar3;
      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;
      *(long *)(param_2 + 0x58) = local_50;
      if (local_58 != local_48) {
        FUN_002dac70();
      }
      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar2;
      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar2;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */
    FUN_002da6e0();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */
  FUN_002da6e0();
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RSI
SUB RSP,0x28
MOV RAX,qword ptr [RDI]
MOV R12,RSP
CALL qword ptr [RAX + 0x10]
MOV RDI,RBP
MOV dword ptr [RBX + 0x24],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x18]
MOV RDI,RBP
MOV dword ptr [RBX + 0x28],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x40]
MOV qword ptr [RBX + 0x10],0x0
MOV RDI,R12
MOV RSI,RBP
MOV dword ptr [RBX + 0x60],EAX
MOV qword ptr [RBX + 0x30],0x0
MOV qword ptr [RBX + 0x40],0x0
MOV qword ptr [RBX + 0x50],0x0
MOV byte ptr [RBX + 0x98],0x1
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x20]
MOV R13,qword ptr [RSP + 0x8]
LEA RDI,[R13 + 0x1]
CALL 0x002d9440
XOR ECX,ECX
MOV RDX,R13
MOV RSI,RAX
MOV RDI,R12
MOV R14,RAX
CALL 0x002e3110
MOV RDI,qword ptr [RSP]
LEA RAX,[R12 + 0x10]
MOV byte ptr [R14 + R13*0x1],0x0
MOV qword ptr [RBX + 0x10],R14
MOV qword ptr [RBX + 0x18],R13
CMP RDI,RAX
JZ 0x0031259f
CALL 0x002dac70
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x28]
MOV R14,qword ptr [RSP + 0x8]
MOV RAX,0x1ffffffffffffffe
LEA RDI,[R14 + 0x1]
CMP RDI,RAX
JA 0x0031271f
LEA R13,[RDI*0x4]
MOV RDI,R13
CALL 0x002d9440
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002e0330
MOV RDI,qword ptr [RSP]
LEA RAX,[R12 + 0x10]
MOV qword ptr [RBX + 0x30],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
MOV qword ptr [RBX + 0x38],R14
CMP RDI,RAX
JZ 0x0031260f
CALL 0x002dac70
MOV RAX,qword ptr [RBP]
MOV RSI,RBP
MOV RDI,R12
CALL qword ptr [RAX + 0x30]
MOV R14,qword ptr [RSP + 0x8]
MOV RAX,0x1ffffffffffffffe
LEA R13,[R14 + 0x1]
CMP R13,RAX
JA 0x00312724
SHL R13,0x2
MOV RDI,R13
CALL 0x002d9440
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002e0330
MOV RDI,qword ptr [RSP]
LEA RAX,[R12 + 0x10]
MOV qword ptr [RBX + 0x40],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
MOV qword ptr [RBX + 0x48],R14
CMP RDI,RAX
JZ 0x0031267b
CALL 0x002dac70
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x38]
MOV R14,qword ptr [RSP + 0x8]
MOV RAX,0x1ffffffffffffffe
LEA RDI,[R14 + 0x1]
CMP RDI,RAX
JA 0x00312716
LEA R13,[RDI*0x4]
MOV RDI,R13
CALL 0x002d9440
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002e0330
MOV RDI,qword ptr [RSP]
ADD R12,0x10
MOV qword ptr [RBX + 0x50],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
MOV qword ptr [RBX + 0x58],R14
CMP RDI,R12
JZ 0x003126e6
CALL 0x002dac70
MOV RAX,qword ptr [RBP]
MOV RDI,RBP
CALL qword ptr [RAX + 0x48]
MOV RDI,RBP
MOV dword ptr [RBX + 0x64],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x50]
MOV dword ptr [RBX + 0x68],EAX
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x002da6e0
CALL 0x002da6e0
CALL 0x002da6e0
(translation_unit "void FUN_003124f0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */\n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */\n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    FUN_002da6e0();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */\n  FUN_002da6e0();\n}\n\n" (function_definition "void FUN_003124f0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */\n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */\n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    FUN_002da6e0();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */\n  FUN_002da6e0();\n}" primitive_type (function_declarator "FUN_003124f0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */\n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */\n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    FUN_002da6e0();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */\n  FUN_002da6e0();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) comment (expression_statement "lVar3 = thunk_FUN_002d94a0(local_50 + 1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(local_50 + 1)" identifier = (call_expression "thunk_FUN_002d94a0(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_002e3110(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e3110(&local_58,lVar3,lVar1,0)" identifier (argument_list "(&local_58,lVar3,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar3 + lVar1) = 0;" (assignment_expression "*(undefined1 *)(lVar3 + lVar1) = 0" (pointer_expression "*(undefined1 *)(lVar3 + lVar1)" * (cast_expression "(undefined1 *)(lVar3 + lVar1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + lVar1)" ( (binary_expression "lVar3 + lVar1" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar3" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar1" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70();\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    FUN_002da6e0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1U" number_literal < (binary_expression "local_50 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    FUN_002da6e0();\n  }" { comment comment (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar3 = (local_50 + 1U) * 4;" (assignment_expression "lVar3 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar4 = thunk_FUN_002d94a0(lVar3);" (assignment_expression "lVar4 = thunk_FUN_002d94a0(lVar3)" identifier = (call_expression "thunk_FUN_002d94a0(lVar3)" identifier (argument_list "(lVar3)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar4,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar4,lVar1,0)" identifier (argument_list "(&local_58,lVar4,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar3) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar3) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar3)" * (cast_expression "(undefined4 *)(lVar4 + -4 + lVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + -4 + lVar3)" ( (binary_expression "lVar4 + -4 + lVar3" (binary_expression "lVar4 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar1" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70();\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    FUN_002da6e0();\n  }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar4 = (local_50 + 1U) * 4;\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    FUN_002da6e0();\n  }" { (expression_statement "lVar4 = (local_50 + 1U) * 4;" (assignment_expression "lVar4 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar4);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar4)" identifier = (call_expression "thunk_FUN_002d94a0(lVar4)" identifier (argument_list "(lVar4)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar3,lVar1,0)" identifier (argument_list "(&local_58,lVar3,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar4) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar4) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar4)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar4)" ( (binary_expression "lVar3 + -4 + lVar4" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar1" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      FUN_002dac70();\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      FUN_002dac70();\n    }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x38))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n      lVar1 = (local_50 + 1U) * 4;\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" { (expression_statement "lVar1 = (local_50 + 1U) * 4;" (assignment_expression "lVar1 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar1)" identifier = (call_expression "thunk_FUN_002d94a0(lVar1)" identifier (argument_list "(lVar1)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar3,local_50,0);" (call_expression "FUN_002e0330(&local_58,lVar3,local_50,0)" identifier (argument_list "(&local_58,lVar3,local_50,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar1) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar1) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar1)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar1)" ( (binary_expression "lVar3 + -4 + lVar1" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x58) = local_50;" (assignment_expression "*(long *)(param_2 + 0x58) = local_50" (pointer_expression "*(long *)(param_2 + 0x58)" * (cast_expression "(long *)(param_2 + 0x58)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70();\n      }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) comment comment (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })) comment comment (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, false>(std::integral_constant<bool,\n   true>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, false>*) */\n\nvoid std::__facet_shims::__moneypunct_fill_cache<wchar_t,false>(long *param_1,long param_2)\n\n{\n  ulong uVar1;\n  undefined4 uVar2;\n  char *pcVar3;\n  wchar_t *pwVar4;\n  undefined1 *local_58;\n  ulong local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  uVar1 = local_50;\n                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */\n  pcVar3 = (char *)operator_new__(local_50 + 1);\n  std::string::copy((string *)&local_58,pcVar3,uVar1,0);\n  pcVar3[uVar1] = '\0';\n  *(char **)(param_2 + 0x10) = pcVar3;\n  *(ulong *)(param_2 + 0x18) = uVar1;\n  if (local_58 != local_48) {\n    operator_delete(local_58);\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  uVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */\n  pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n  std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);\n  *(wchar_t **)(param_2 + 0x30) = pwVar4;\n  pwVar4[uVar1] = L'\0';\n  *(ulong *)(param_2 + 0x38) = uVar1;\n  if (local_58 != local_48) {\n    operator_delete(local_58);\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  uVar1 = local_50;\n  if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar4;\n    pwVar4[uVar1] = L'\0';\n    *(ulong *)(param_2 + 0x48) = uVar1;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar4;\n      pwVar4[local_50] = L'\0';\n      *(ulong *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        operator_delete(local_58);\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */\n  __cxa_throw_bad_array_new_length();\n}\n\n" comment (declaration "void std::__facet_shims::__moneypunct_fill_cache<wchar_t,false>(long *param_1,long param_2)\n\n{\n  ulong uVar1;" primitive_type (ERROR "std::__facet_shims::__moneypunct_fill_cache<" identifier : : identifier : : identifier <) identifier , (ERROR "false>(long" identifier > ( long) (pointer_declarator "*param_1" * identifier) , (ERROR "long param_2)\n\n{\n  ulong" identifier identifier ) { identifier) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "ulong local_50;" type_identifier identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "uVar1 = local_50;" (assignment_expression "uVar1 = local_50" identifier = identifier) ;) comment (expression_statement "pcVar3 = (char *)operator_new__(local_50 + 1);" (assignment_expression "pcVar3 = (char *)operator_new__(local_50 + 1)" identifier = (cast_expression "(char *)operator_new__(local_50 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)&local_58,pcVar3,uVar1,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)&local_58,pcVar3,uVar1,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)&local_58,pcVar3,uVar1,0);" (call_expression "copy((string *)&local_58,pcVar3,uVar1,0)" identifier (argument_list "((string *)&local_58,pcVar3,uVar1,0)" ( (cast_expression "(string *)&local_58" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar3[uVar1] = '\0';" (assignment_expression "pcVar3[uVar1] = '\0'" (subscript_expression "pcVar3[uVar1]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x10) = pcVar3;" (assignment_expression "*(char **)(param_2 + 0x10) = pcVar3" (pointer_expression "*(char **)(param_2 + 0x10)" * (cast_expression "(char **)(param_2 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(ulong *)(param_2 + 0x18) = uVar1;" (assignment_expression "*(ulong *)(param_2 + 0x18) = uVar1" (pointer_expression "*(ulong *)(param_2 + 0x18)" * (cast_expression "(ulong *)(param_2 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    operator_delete(local_58);\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    operator_delete(local_58);\n  }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "uVar1 = local_50;" (assignment_expression "uVar1 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1" number_literal < (binary_expression "local_50 + 1" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */\n    __cxa_throw_bad_array_new_length();\n  }" { comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);" (assignment_expression "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((local_50 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((local_50 + 1) * 4)" identifier (argument_list "((local_50 + 1) * 4)" ( (binary_expression "(local_50 + 1) * 4" (parenthesized_expression "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_58,pwVar4,uVar1,0);" (call_expression "copy((wstring *)&local_58,pwVar4,uVar1,0)" identifier (argument_list "((wstring *)&local_58,pwVar4,uVar1,0)" ( (cast_expression "(wstring *)&local_58" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x30) = pwVar4;" (assignment_expression "*(wchar_t **)(param_2 + 0x30) = pwVar4" (pointer_expression "*(wchar_t **)(param_2 + 0x30)" * (cast_expression "(wchar_t **)(param_2 + 0x30)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar4[uVar1] = L'\0';" (assignment_expression "pwVar4[uVar1] = L'\0'" (subscript_expression "pwVar4[uVar1]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x38) = uVar1;" (assignment_expression "*(ulong *)(param_2 + 0x38) = uVar1" (pointer_expression "*(ulong *)(param_2 + 0x38)" * (cast_expression "(ulong *)(param_2 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    operator_delete(local_58);\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    operator_delete(local_58);\n  }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "uVar1 = local_50;" (assignment_expression "uVar1 = local_50" identifier = identifier) ;) (if_statement "if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar4;\n    pwVar4[uVar1] = L'\0';\n    *(ulong *)(param_2 + 0x48) = uVar1;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar4;\n      pwVar4[local_50] = L'\0';\n      *(ulong *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        operator_delete(local_58);\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(local_50 + 1 < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1 < 0x1fffffffffffffff" (binary_expression "local_50 + 1" identifier + number_literal) < number_literal) )) (compound_statement "{\n                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */\n    pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n    std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar4;\n    pwVar4[uVar1] = L'\0';\n    *(ulong *)(param_2 + 0x48) = uVar1;\n    if (local_58 != local_48) {\n      operator_delete(local_58);\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar4;\n      pwVar4[local_50] = L'\0';\n      *(ulong *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        operator_delete(local_58);\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */\n    __cxa_throw_bad_array_new_length();\n  }" { comment (expression_statement "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);" (assignment_expression "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((local_50 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((local_50 + 1) * 4)" identifier (argument_list "((local_50 + 1) * 4)" ( (binary_expression "(local_50 + 1) * 4" (parenthesized_expression "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_58,pwVar4,uVar1,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_58,pwVar4,uVar1,0);" (call_expression "copy((wstring *)&local_58,pwVar4,uVar1,0)" identifier (argument_list "((wstring *)&local_58,pwVar4,uVar1,0)" ( (cast_expression "(wstring *)&local_58" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x40) = pwVar4;" (assignment_expression "*(wchar_t **)(param_2 + 0x40) = pwVar4" (pointer_expression "*(wchar_t **)(param_2 + 0x40)" * (cast_expression "(wchar_t **)(param_2 + 0x40)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar4[uVar1] = L'\0';" (assignment_expression "pwVar4[uVar1] = L'\0'" (subscript_expression "pwVar4[uVar1]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x48) = uVar1;" (assignment_expression "*(ulong *)(param_2 + 0x48) = uVar1" (pointer_expression "*(ulong *)(param_2 + 0x48)" * (cast_expression "(ulong *)(param_2 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      operator_delete(local_58);\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      operator_delete(local_58);\n    }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x38))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar4;\n      pwVar4[local_50] = L'\0';\n      *(ulong *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        operator_delete(local_58);\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" if (parenthesized_expression "(local_50 + 1 < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1 < 0x1fffffffffffffff" (binary_expression "local_50 + 1" identifier + number_literal) < number_literal) )) (compound_statement "{\n                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */\n      pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);\n      std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar4;\n      pwVar4[local_50] = L'\0';\n      *(ulong *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        operator_delete(local_58);\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" { comment (expression_statement "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4);" (assignment_expression "pwVar4 = (wchar_t *)operator_new__((local_50 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((local_50 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((local_50 + 1) * 4)" identifier (argument_list "((local_50 + 1) * 4)" ( (binary_expression "(local_50 + 1) * 4" (parenthesized_expression "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)&local_58,pwVar4,local_50,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_58,pwVar4,local_50,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_58,pwVar4,local_50,0);" (call_expression "copy((wstring *)&local_58,pwVar4,local_50,0)" identifier (argument_list "((wstring *)&local_58,pwVar4,local_50,0)" ( (cast_expression "(wstring *)&local_58" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x50) = pwVar4;" (assignment_expression "*(wchar_t **)(param_2 + 0x50) = pwVar4" (pointer_expression "*(wchar_t **)(param_2 + 0x50)" * (cast_expression "(wchar_t **)(param_2 + 0x50)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar4[local_50] = L'\0';" (assignment_expression "pwVar4[local_50] = L'\0'" (subscript_expression "pwVar4[local_50]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "*(ulong *)(param_2 + 0x58) = local_50;" (assignment_expression "*(ulong *)(param_2 + 0x58) = local_50" (pointer_expression "*(ulong *)(param_2 + 0x58)" * (cast_expression "(ulong *)(param_2 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n        operator_delete(local_58);\n      }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n        operator_delete(local_58);\n      }" { (expression_statement "operator_delete(local_58);" (call_expression "operator_delete(local_58)" identifier (argument_list "(local_58)" ( identifier ))) ;) })) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) (ERROR "}" }))
(translation_unit "void FUN_003124f0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    \n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    \n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }\n                    \n                    \n  FUN_002da6e0();\n}\n\n" (function_definition "void FUN_003124f0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    \n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    \n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }\n                    \n                    \n  FUN_002da6e0();\n}" primitive_type (function_declarator "FUN_003124f0(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    \n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    \n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }\n                    \n                    \n  FUN_002da6e0();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 *local_58;" type_identifier (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined1 local_48 [24];" type_identifier (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) (expression_statement "lVar3 = thunk_FUN_002d94a0(local_50 + 1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(local_50 + 1)" identifier = (call_expression "thunk_FUN_002d94a0(local_50 + 1)" identifier (argument_list "(local_50 + 1)" ( (binary_expression "local_50 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_002e3110(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e3110(&local_58,lVar3,lVar1,0)" identifier (argument_list "(&local_58,lVar3,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar3 + lVar1) = 0;" (assignment_expression "*(undefined1 *)(lVar3 + lVar1) = 0" (pointer_expression "*(undefined1 *)(lVar3 + lVar1)" * (cast_expression "(undefined1 *)(lVar3 + lVar1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + lVar1)" ( (binary_expression "lVar3 + lVar1" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar3" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar1" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70();\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" ( (binary_expression "0x1ffffffffffffffe < local_50 + 1U" number_literal < (binary_expression "local_50 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    \n                    \n    FUN_002da6e0();\n  }" { (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar3 = (local_50 + 1U) * 4;" (assignment_expression "lVar3 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar4 = thunk_FUN_002d94a0(lVar3);" (assignment_expression "lVar4 = thunk_FUN_002d94a0(lVar3)" identifier = (call_expression "thunk_FUN_002d94a0(lVar3)" identifier (argument_list "(lVar3)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar4,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar4,lVar1,0)" identifier (argument_list "(&local_58,lVar4,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar3) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar3) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar3)" * (cast_expression "(undefined4 *)(lVar4 + -4 + lVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar4 + -4 + lVar3)" ( (binary_expression "lVar4 + -4 + lVar3" (binary_expression "lVar4 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar1" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n    FUN_002dac70();\n  }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" identifier = identifier) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }" { (expression_statement "lVar4 = (local_50 + 1U) * 4;" (assignment_expression "lVar4 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar4);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar4)" identifier = (call_expression "thunk_FUN_002d94a0(lVar4)" identifier (argument_list "(lVar4)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar3,lVar1,0)" identifier (argument_list "(&local_58,lVar3,lVar1,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar4) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar4) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar4)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar4)" ( (binary_expression "lVar3 + -4 + lVar4" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar1" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n      FUN_002dac70();\n    }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n      FUN_002dac70();\n    }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "(**(code **)(*param_1 + 0x38))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,param_1)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" if (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" ( (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" { (expression_statement "lVar1 = (local_50 + 1U) * 4;" (assignment_expression "lVar1 = (local_50 + 1U) * 4" identifier = (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" ( (binary_expression "local_50 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar1)" identifier = (call_expression "thunk_FUN_002d94a0(lVar1)" identifier (argument_list "(lVar1)" ( identifier )))) ;) (expression_statement "FUN_002e0330(&local_58,lVar3,local_50,0);" (call_expression "FUN_002e0330(&local_58,lVar3,local_50,0)" identifier (argument_list "(&local_58,lVar3,local_50,0)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar1) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar1) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar1)" * (cast_expression "(undefined4 *)(lVar3 + -4 + lVar1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + -4 + lVar1)" ( (binary_expression "lVar3 + -4 + lVar1" (binary_expression "lVar3 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x58) = local_50;" (assignment_expression "*(long *)(param_2 + 0x58) = local_50" (pointer_expression "*(long *)(param_2 + 0x58)" * (cast_expression "(long *)(param_2 + 0x58)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70();\n      }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (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 ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (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 ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (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 ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (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 ( (pointer_expression & IDENT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (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 ( (pointer_expression & IDENT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (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 )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void FUN_003124f0(long *param_1,long param_2)\n\n{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    \n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    \n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }\n                    \n                    \n  FUN_002da6e0();\n}" (primitive_type "void") (function_declarator "FUN_003124f0(long *param_1,long param_2)" (identifier "FUN_003124f0") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined4 uVar2;\n  long lVar3;\n  long lVar4;\n  undefined1 *local_58;\n  long local_50;\n  undefined1 local_48 [24];\n  \n  uVar2 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar2;\n  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar2;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(&local_58,param_1);\n  lVar1 = local_50;\n                    \n  lVar3 = thunk_FUN_002d94a0(local_50 + 1);\n  FUN_002e3110(&local_58,lVar3,lVar1,0);\n  *(undefined1 *)(lVar3 + lVar1) = 0;\n  *(long *)(param_2 + 0x10) = lVar3;\n  *(long *)(param_2 + 0x18) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x28))(&local_58,param_1);\n  lVar1 = local_50;\n  if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }\n  lVar3 = (local_50 + 1U) * 4;\n                    \n  lVar4 = thunk_FUN_002d94a0(lVar3);\n  FUN_002e0330(&local_58,lVar4,lVar1,0);\n  *(long *)(param_2 + 0x30) = lVar4;\n  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;\n  *(long *)(param_2 + 0x38) = lVar1;\n  if (local_58 != local_48) {\n    FUN_002dac70();\n  }\n  (**(code **)(*param_1 + 0x30))(&local_58,param_1);\n  lVar1 = local_50;\n  if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }\n                    \n                    \n  FUN_002da6e0();\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined1 *local_58;" (type_identifier "undefined1") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "undefined1 local_48 [24];" (type_identifier "undefined1") (array_declarator "local_48 [24]" (identifier "local_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x10))()" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x18))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x18)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x18)" (* "*") (cast_expression "(code **)(*param_1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x40))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x40)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x40)" (* "*") (cast_expression "(code **)(*param_1 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x40)" (( "(") (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x60)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x50)" (( "(") (binary_expression "param_2 + 0x50" (identifier "param_2") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x98)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x98)" (( "(") (binary_expression "param_2 + 0x98" (identifier "param_2") (+ "+") (number_literal "0x98")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "(**(code **)(*param_1 + 0x20))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x20)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x20)" (* "*") (cast_expression "(code **)(*param_1 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x20)" (( "(") (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" (identifier "lVar1") (= "=") (identifier "local_50")) (; ";")) (expression_statement "lVar3 = thunk_FUN_002d94a0(local_50 + 1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(local_50 + 1)" (identifier "lVar3") (= "=") (call_expression "thunk_FUN_002d94a0(local_50 + 1)" (identifier "thunk_FUN_002d94a0") (argument_list "(local_50 + 1)" (( "(") (binary_expression "local_50 + 1" (identifier "local_50") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_002e3110(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e3110(&local_58,lVar3,lVar1,0)" (identifier "FUN_002e3110") (argument_list "(&local_58,lVar3,lVar1,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar3") (, ",") (identifier "lVar1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar3 + lVar1) = 0;" (assignment_expression "*(undefined1 *)(lVar3 + lVar1) = 0" (pointer_expression "*(undefined1 *)(lVar3 + lVar1)" (* "*") (cast_expression "(undefined1 *)(lVar3 + lVar1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + lVar1)" (( "(") (binary_expression "lVar3 + lVar1" (identifier "lVar3") (+ "+") (identifier "lVar1")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x10) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar3" (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "*(long *)(param_2 + 0x18) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar1" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n    FUN_002dac70();\n  }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x28))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x28)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x28)" (* "*") (cast_expression "(code **)(*param_1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x28)" (( "(") (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" (identifier "lVar1") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (0x1ffffffffffffffe < local_50 + 1U) {\n                    \n                    \n    FUN_002da6e0();\n  }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < local_50 + 1U)" (( "(") (binary_expression "0x1ffffffffffffffe < local_50 + 1U" (number_literal "0x1ffffffffffffffe") (< "<") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U"))) () ")")) (compound_statement "{\n                    \n                    \n    FUN_002da6e0();\n  }" ({ "{") (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" (identifier "FUN_002da6e0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "lVar3 = (local_50 + 1U) * 4;" (assignment_expression "lVar3 = (local_50 + 1U) * 4" (identifier "lVar3") (= "=") (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" (( "(") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar4 = thunk_FUN_002d94a0(lVar3);" (assignment_expression "lVar4 = thunk_FUN_002d94a0(lVar3)" (identifier "lVar4") (= "=") (call_expression "thunk_FUN_002d94a0(lVar3)" (identifier "thunk_FUN_002d94a0") (argument_list "(lVar3)" (( "(") (identifier "lVar3") () ")")))) (; ";")) (expression_statement "FUN_002e0330(&local_58,lVar4,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar4,lVar1,0)" (identifier "FUN_002e0330") (argument_list "(&local_58,lVar4,lVar1,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar4") (, ",") (identifier "lVar1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x30) = lVar4;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar4" (pointer_expression "*(long *)(param_2 + 0x30)" (* "*") (cast_expression "(long *)(param_2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "lVar4")) (; ";")) (expression_statement "*(undefined4 *)(lVar4 + -4 + lVar3) = 0;" (assignment_expression "*(undefined4 *)(lVar4 + -4 + lVar3) = 0" (pointer_expression "*(undefined4 *)(lVar4 + -4 + lVar3)" (* "*") (cast_expression "(undefined4 *)(lVar4 + -4 + lVar3)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar4 + -4 + lVar3)" (( "(") (binary_expression "lVar4 + -4 + lVar3" (binary_expression "lVar4 + -4" (identifier "lVar4") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x38) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar1" (pointer_expression "*(long *)(param_2 + 0x38)" (* "*") (cast_expression "(long *)(param_2 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (local_58 != local_48) {\n    FUN_002dac70();\n  }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n    FUN_002dac70();\n  }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x30))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x30)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x30)" (* "*") (cast_expression "(code **)(*param_1 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x30)" (( "(") (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar1 = local_50;" (assignment_expression "lVar1 = local_50" (identifier "lVar1") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }" (if "if") (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" (( "(") (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n    lVar4 = (local_50 + 1U) * 4;\n                    \n    lVar3 = thunk_FUN_002d94a0(lVar4);\n    FUN_002e0330(&local_58,lVar3,lVar1,0);\n    *(long *)(param_2 + 0x40) = lVar3;\n    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;\n    *(long *)(param_2 + 0x48) = lVar1;\n    if (local_58 != local_48) {\n      FUN_002dac70();\n    }\n    (**(code **)(*param_1 + 0x38))(&local_58,param_1);\n    if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }\n                    \n                    \n    FUN_002da6e0();\n  }" ({ "{") (expression_statement "lVar4 = (local_50 + 1U) * 4;" (assignment_expression "lVar4 = (local_50 + 1U) * 4" (identifier "lVar4") (= "=") (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" (( "(") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar4);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar4)" (identifier "lVar3") (= "=") (call_expression "thunk_FUN_002d94a0(lVar4)" (identifier "thunk_FUN_002d94a0") (argument_list "(lVar4)" (( "(") (identifier "lVar4") () ")")))) (; ";")) (expression_statement "FUN_002e0330(&local_58,lVar3,lVar1,0);" (call_expression "FUN_002e0330(&local_58,lVar3,lVar1,0)" (identifier "FUN_002e0330") (argument_list "(&local_58,lVar3,lVar1,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar3") (, ",") (identifier "lVar1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x40) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar3" (pointer_expression "*(long *)(param_2 + 0x40)" (* "*") (cast_expression "(long *)(param_2 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar4) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar4) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar4)" (* "*") (cast_expression "(undefined4 *)(lVar3 + -4 + lVar4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + -4 + lVar4)" (( "(") (binary_expression "lVar3 + -4 + lVar4" (binary_expression "lVar3 + -4" (identifier "lVar3") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x48) = lVar1;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar1" (pointer_expression "*(long *)(param_2 + 0x48)" (* "*") (cast_expression "(long *)(param_2 + 0x48)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x48)" (( "(") (binary_expression "param_2 + 0x48" (identifier "param_2") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "lVar1")) (; ";")) (if_statement "if (local_58 != local_48) {\n      FUN_002dac70();\n    }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n      FUN_002dac70();\n    }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x38))(&local_58,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(&local_58,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x38)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x38)" (* "*") (cast_expression "(code **)(*param_1 + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x38)" (( "(") (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x38")) () ")"))))) () ")")) (argument_list "(&local_58,param_1)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_1") () ")"))) (; ";")) (if_statement "if (local_50 + 1U < 0x1fffffffffffffff) {\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" (if "if") (parenthesized_expression "(local_50 + 1U < 0x1fffffffffffffff)" (( "(") (binary_expression "local_50 + 1U < 0x1fffffffffffffff" (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n      lVar1 = (local_50 + 1U) * 4;\n                    \n      lVar3 = thunk_FUN_002d94a0(lVar1);\n      FUN_002e0330(&local_58,lVar3,local_50,0);\n      *(long *)(param_2 + 0x50) = lVar3;\n      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;\n      *(long *)(param_2 + 0x58) = local_50;\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar2;\n      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar2;\n      return;\n    }" ({ "{") (expression_statement "lVar1 = (local_50 + 1U) * 4;" (assignment_expression "lVar1 = (local_50 + 1U) * 4" (identifier "lVar1") (= "=") (binary_expression "(local_50 + 1U) * 4" (parenthesized_expression "(local_50 + 1U)" (( "(") (binary_expression "local_50 + 1U" (identifier "local_50") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar3 = thunk_FUN_002d94a0(lVar1);" (assignment_expression "lVar3 = thunk_FUN_002d94a0(lVar1)" (identifier "lVar3") (= "=") (call_expression "thunk_FUN_002d94a0(lVar1)" (identifier "thunk_FUN_002d94a0") (argument_list "(lVar1)" (( "(") (identifier "lVar1") () ")")))) (; ";")) (expression_statement "FUN_002e0330(&local_58,lVar3,local_50,0);" (call_expression "FUN_002e0330(&local_58,lVar3,local_50,0)" (identifier "FUN_002e0330") (argument_list "(&local_58,lVar3,local_50,0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "lVar3") (, ",") (identifier "local_50") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x50) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar3" (pointer_expression "*(long *)(param_2 + 0x50)" (* "*") (cast_expression "(long *)(param_2 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x50)" (( "(") (binary_expression "param_2 + 0x50" (identifier "param_2") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (expression_statement "*(undefined4 *)(lVar3 + -4 + lVar1) = 0;" (assignment_expression "*(undefined4 *)(lVar3 + -4 + lVar1) = 0" (pointer_expression "*(undefined4 *)(lVar3 + -4 + lVar1)" (* "*") (cast_expression "(undefined4 *)(lVar3 + -4 + lVar1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + -4 + lVar1)" (( "(") (binary_expression "lVar3 + -4 + lVar1" (binary_expression "lVar3 + -4" (identifier "lVar3") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar1")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x58) = local_50;" (assignment_expression "*(long *)(param_2 + 0x58) = local_50" (pointer_expression "*(long *)(param_2 + 0x58)" (* "*") (cast_expression "(long *)(param_2 + 0x58)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x58)" (( "(") (binary_expression "param_2 + 0x58" (identifier "param_2") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "local_50")) (; ";")) (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n        FUN_002dac70();\n      }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x48))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x48)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x48)" (* "*") (cast_expression "(code **)(*param_1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x48)" (( "(") (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 100)" (* "*") (cast_expression "(undefined4 *)(param_2 + 100)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 100)" (( "(") (binary_expression "param_2 + 100" (identifier "param_2") (+ "+") (number_literal "100")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "uVar2 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar2 = (**(code **)(*param_1 + 0x50))(param_1)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x50)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x50)" (* "*") (cast_expression "(code **)(*param_1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x50)" (( "(") (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar2;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar2" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x68)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x68)" (( "(") (binary_expression "param_2 + 0x68" (identifier "param_2") (+ "+") (number_literal "0x68")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" (identifier "FUN_002da6e0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_002da6e0();" (call_expression "FUN_002da6e0()" (identifier "FUN_002da6e0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, false>(std::integral_constant<bool,
   true>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, false>*) */

void std::__facet_shims::__moneypunct_fill_cache<type_2,false>(long *param_1,long var_1)

{
  type_4 uVar1;
  type_1 uVar2;
  char *pcVar3;
  type_2 *pwVar4;
  type_3 *var_5;
  type_4 var_3;
  type_3 var_6 [24];
  
  uVar2 = (**(type_5 **)(*param_1 + 0x10))();
  *(type_1 *)(var_1 + 0x24) = uVar2;
  uVar2 = (**(type_5 **)(*param_1 + 0x18))(param_1);
  *(type_1 *)(var_1 + 0x28) = uVar2;
  uVar2 = (**(type_5 **)(*param_1 + 0x40))(param_1);
  *(type_6 *)(var_1 + 0x10) = 0;
  *(type_1 *)(var_1 + 0x60) = uVar2;
  *(type_6 *)(var_1 + 0x30) = 0;
  *(type_6 *)(var_1 + 0x40) = 0;
  *(type_6 *)(var_1 + 0x50) = 0;
  *(type_3 *)(var_1 + 0x98) = 1;
  (**(type_5 **)(*param_1 + 0x20))(&var_5,param_1);
  uVar1 = var_3;
                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */
  pcVar3 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_7 *)&var_5,pcVar3,uVar1,0);
  pcVar3[uVar1] = '\0';
  *(char **)(var_1 + 0x10) = pcVar3;
  *(type_4 *)(var_1 + 0x18) = uVar1;
  if (var_5 != var_6) {
    var_7(var_5);
  }
  (**(type_5 **)(*param_1 + 0x28))(&var_5,param_1);
  uVar1 = var_3;
  if (0x1ffffffffffffffe < var_3 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */
    var_8();
  }
                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */
  pwVar4 = (type_2 *)var_2((var_3 + 1) * 4);
  std::wstring::var_4((type_8 *)&var_5,pwVar4,uVar1,0);
  *(type_2 **)(var_1 + 0x30) = pwVar4;
  pwVar4[uVar1] = L'\0';
  *(type_4 *)(var_1 + 0x38) = uVar1;
  if (var_5 != var_6) {
    var_7(var_5);
  }
  (**(type_5 **)(*param_1 + 0x30))(&var_5,param_1);
  uVar1 = var_3;
  if (var_3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */
    pwVar4 = (type_2 *)var_2((var_3 + 1) * 4);
    std::wstring::var_4((type_8 *)&var_5,pwVar4,uVar1,0);
    *(type_2 **)(var_1 + 0x40) = pwVar4;
    pwVar4[uVar1] = L'\0';
    *(type_4 *)(var_1 + 0x48) = uVar1;
    if (var_5 != var_6) {
      var_7(var_5);
    }
    (**(type_5 **)(*param_1 + 0x38))(&var_5,param_1);
    if (var_3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */
      pwVar4 = (type_2 *)var_2((var_3 + 1) * 4);
      std::wstring::var_4((type_8 *)&var_5,pwVar4,var_3,0);
      *(type_2 **)(var_1 + 0x50) = pwVar4;
      pwVar4[var_3] = L'\0';
      *(type_4 *)(var_1 + 0x58) = var_3;
      if (var_5 != var_6) {
        var_7(var_5);
      }
      uVar2 = (**(type_5 **)(*param_1 + 0x48))(param_1);
      *(type_1 *)(var_1 + 100) = uVar2;
      uVar2 = (**(type_5 **)(*param_1 + 0x50))(param_1);
      *(type_1 *)(var_1 + 0x68) = uVar2;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */
    var_8();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */
  var_8();
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (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)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (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 (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier) (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: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (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 (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (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 (pointer_expression argument: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (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 (pointer_expression argument: (identifier)) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) 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))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

void MASKED(long *param_1,long param_2)

{
  long lVar1;
  undefined4 uVar2;
  long lVar3;
  long lVar4;
  undefined1 *local_58;
  long local_50;
  undefined1 local_48 [24];
  
  uVar2 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar2;
  uVar2 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar2;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))(&local_58,param_1);
  lVar1 = local_50;
                    /* try { // try from 00312567 to 0031257e has its CatchHandler @ 0031270f */
  lVar3 = thunk_FUN_002d94a0(local_50 + 1);
  FUN_002e3110(&local_58,lVar3,lVar1,0);
  *(undefined1 *)(lVar3 + lVar1) = 0;
  *(long *)(param_2 + 0x10) = lVar3;
  *(long *)(param_2 + 0x18) = lVar1;
  if (local_58 != local_48) {
    FUN_002dac70();
  }
  (**(code **)(*param_1 + 0x28))(&local_58,param_1);
  lVar1 = local_50;
  if (0x1ffffffffffffffe < local_50 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0031271f to 00312723 has its CatchHandler @ 0031271d */
    FUN_002da6e0();
  }
  lVar3 = (local_50 + 1U) * 4;
                    /* try { // try from 003125d3 to 003125ea has its CatchHandler @ 0031271d */
  lVar4 = thunk_FUN_002d94a0(lVar3);
  FUN_002e0330(&local_58,lVar4,lVar1,0);
  *(long *)(param_2 + 0x30) = lVar4;
  *(undefined4 *)(lVar4 + -4 + lVar3) = 0;
  *(long *)(param_2 + 0x38) = lVar1;
  if (local_58 != local_48) {
    FUN_002dac70();
  }
  (**(code **)(*param_1 + 0x30))(&local_58,param_1);
  lVar1 = local_50;
  if (local_50 + 1U < 0x1fffffffffffffff) {
    lVar4 = (local_50 + 1U) * 4;
                    /* try { // try from 0031263f to 00312656 has its CatchHandler @ 0031271b */
    lVar3 = thunk_FUN_002d94a0(lVar4);
    FUN_002e0330(&local_58,lVar3,lVar1,0);
    *(long *)(param_2 + 0x40) = lVar3;
    *(undefined4 *)(lVar3 + -4 + lVar4) = 0;
    *(long *)(param_2 + 0x48) = lVar1;
    if (local_58 != local_48) {
      FUN_002dac70();
    }
    (**(code **)(*param_1 + 0x38))(&local_58,param_1);
    if (local_50 + 1U < 0x1fffffffffffffff) {
      lVar1 = (local_50 + 1U) * 4;
                    /* try { // try from 003126ab to 003126c2 has its CatchHandler @ 00312714 */
      lVar3 = thunk_FUN_002d94a0(lVar1);
      FUN_002e0330(&local_58,lVar3,local_50,0);
      *(long *)(param_2 + 0x50) = lVar3;
      *(undefined4 *)(lVar3 + -4 + lVar1) = 0;
      *(long *)(param_2 + 0x58) = local_50;
      if (local_58 != local_48) {
        FUN_002dac70();
      }
      uVar2 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar2;
      uVar2 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar2;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312716 to 0031271a has its CatchHandler @ 00312714 */
    FUN_002da6e0();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00312724 to 00312728 has its CatchHandler @ 0031271b */
  FUN_002da6e0();
}

