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

void __regparm3 uw_update_context_1(undefined4 *param_1,int param_2)

{
  char cVar1;
  char *pcVar2;
  uint uVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined **ppuVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 local_a0;
  undefined4 local_9c [4];
  undefined4 *local_8c;
  uint local_3c;
  char acStack_30 [4];
  char local_2c;
  
  ppuVar7 = &_GLOBAL_OFFSET_TABLE_;
  puVar9 = local_9c;
  puVar5 = param_1;
  puVar8 = puVar9;
  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {
    *puVar8 = *puVar5;
    puVar5 = puVar5 + 1;
    puVar8 = puVar8 + 1;
  }
  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {
    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;
    if ((local_3c & 0x40000000) != 0) {
      local_2c = '\0';
    }
    local_8c = &local_a0;
    local_a0 = param_1[0x12];
  }
  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {
    *(undefined1 *)(param_1 + 0x1c) = 0;
  }
  param_1[4] = 0;
  if (*(int *)(param_2 + 0xa0) == 1) {
    iVar4 = *(int *)(param_2 + 0x98);
    if (0x11 < iVar4) {
uw_update_context_1_cold_9:
                    /* WARNING: Subroutine does not return */
      abort();
    }
    puVar5 = (undefined4 *)local_9c[iVar4];
    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {
      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;
      puVar5 = (undefined4 *)*puVar5;
    }
    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);
  }
  else {
    if (*(int *)(param_2 + 0xa0) != 2) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
    pcVar2 = *(char **)(param_2 + 0x9c);
    do {
      cVar1 = *pcVar2;
      pcVar2 = pcVar2 + 1;
    } while (cVar1 < '\0');
    iVar4 = execute_stack_op(0);
  }
  iVar6 = 0;
  param_1[0x12] = iVar4;
  do {
    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {
                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))
                (ppuVar7,iVar4,puVar9);
      return;
    }
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x12);
  uVar3 = param_1[0x18] & 0x7fffffff;
  if (*(char *)(param_2 + 0xbb) != '\0') {
    uVar3 = param_1[0x18] | 0x80000000;
  }
  pcVar2 = (char *)param_1[0x13];
  param_1[0x18] = uVar3;
  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&
     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {
    param_1[0x18] = uVar3 | 0x80000000;
  }
  return;
}



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

void __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)

{
  char cVar1;
  char *pcVar2;
  uint uVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined **ppuVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 local_a0;
  undefined4 local_9c [4];
  undefined4 *local_8c;
  uint local_3c;
  char acStack_30 [4];
  char local_2c;
  
  ppuVar7 = &__DT_PLTGOT;
  puVar9 = local_9c;
  puVar5 = param_1;
  puVar8 = puVar9;
  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {
    *puVar8 = *puVar5;
    puVar5 = puVar5 + 1;
    puVar8 = puVar8 + 1;
  }
  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {
    if (DAT_0030b030 != '\x04') goto FUN_0003159e;
    if ((local_3c & 0x40000000) != 0) {
      local_2c = '\0';
    }
    local_8c = &local_a0;
    local_a0 = param_1[0x12];
  }
  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {
    *(undefined1 *)(param_1 + 0x1c) = 0;
  }
  param_1[4] = 0;
  if (*(int *)(param_2 + 0xa0) == 1) {
    iVar4 = *(int *)(param_2 + 0x98);
    if (0x11 < iVar4) {
FUN_0003159e:
                    /* WARNING: Subroutine does not return */
      abort();
    }
    puVar5 = (undefined4 *)local_9c[iVar4];
    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {
      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;
      puVar5 = (undefined4 *)*puVar5;
    }
    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);
  }
  else {
    if (*(int *)(param_2 + 0xa0) != 2) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
    pcVar2 = *(char **)(param_2 + 0x9c);
    do {
      cVar1 = *pcVar2;
      pcVar2 = pcVar2 + 1;
    } while (cVar1 < '\0');
    iVar4 = FUN_00216380(0);
  }
  iVar6 = 0;
  param_1[0x12] = iVar4;
  do {
    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {
                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))
                (ppuVar7,iVar4,puVar9);
      return;
    }
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x12);
  uVar3 = param_1[0x18] & 0x7fffffff;
  if (*(char *)(param_2 + 0xbb) != '\0') {
    uVar3 = param_1[0x18] | 0x80000000;
  }
  pcVar2 = (char *)param_1[0x13];
  param_1[0x18] = uVar3;
  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&
     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {
    param_1[0x18] = uVar3 | 0x80000000;
  }
  return;
}


PUSH EBP
MOV ECX,0x20
MOV EBP,EDX
PUSH EDI
PUSH ESI
CALL 0x0004fb7a
ADD ESI,0xeb571
PUSH EBX
SUB ESP,0xac
LEA EDI,[ESP + 0x20]
MOV dword ptr [ESP],EAX
MOV dword ptr [ESP + 0xc],EDI
MOV dword ptr [ESP + 0x4],ESI
MOV ESI,EAX
MOVSD.REP ES:EDI,ESI
MOV EDX,dword ptr [ESP + 0x80]
TEST EDX,0x40000000
JZ 0x00216ac8
CMP byte ptr [ESP + 0x90],0x0
JNZ 0x00216ad4
MOV EAX,dword ptr [ESP + 0x30]
TEST EAX,EAX
JZ 0x00216db3
MOV EAX,dword ptr [ESP]
TEST byte ptr [EAX + 0x63],0x40
JZ 0x00216ae1
MOV byte ptr [EAX + 0x70],0x0
MOV EAX,dword ptr [ESP]
MOV dword ptr [EAX + 0x10],0x0
MOV EAX,dword ptr [EBP + 0xa0]
CMP EAX,0x1
JNZ 0x00216b40
MOV EAX,dword ptr [EBP + 0x98]
CMP EAX,0x11
JG 0x0003159e
MOV ESI,dword ptr [ESP + 0x4]
AND EDX,0x40000000
MOV ECX,dword ptr [ESP + EAX*0x4 + 0x20]
MOVZX EBX,byte ptr [ESI + EAX*0x1 + 0x902c]
JZ 0x00216b27
CMP byte ptr [ESP + EAX*0x1 + 0x8c],0x0
JNZ 0x00216b32
CMP BL,0x4
JNZ 0x0003159e
MOV ECX,dword ptr [ECX]
ADD ECX,dword ptr [EBP + 0x94]
MOV dword ptr [ESP + 0x8],ECX
JMP 0x00216b87
CMP EAX,0x2
JNZ 0x00216deb
MOV EAX,dword ptr [EBP + 0x9c]
XOR ESI,ESI
XOR ECX,ECX
LEA ESI,[ESI]
NOP
ADD EAX,0x1
MOVZX EBX,byte ptr [EAX + -0x1]
MOV EDX,EBX
AND EDX,0x7f
SHL EDX,CL
ADD ECX,0x7
OR ESI,EDX
TEST BL,BL
JS 0x00216b58
SUB ESP,0xc
LEA EDX,[EAX + ESI*0x1]
PUSH 0x0
MOV ECX,dword ptr [ESP + 0x1c]
CALL 0x00216380
MOV dword ptr [ESP + 0x18],EAX
ADD ESP,0x10
MOV EAX,dword ptr [ESP]
MOV EDI,dword ptr [ESP + 0x8]
XOR EBX,EBX
MOV dword ptr [EAX + 0x48],EDI
LEA ESI,[ESI]
NOP
CMP dword ptr [EBP + EBX*0x8 + 0x4],0x5
JA 0x00216bdd
MOV ESI,dword ptr [ESP + 0x4]
MOV EAX,dword ptr [EBP + EBX*0x8 + 0x4]
MOV EDI,dword ptr [ESI + EAX*0x4 + 0xfff3d258]
ADD EDI,ESI
JMP EDI
ADD EBX,0x1
CMP EBX,0x12
JNZ 0x00216b98
MOV EAX,dword ptr [ESP]
MOV EDX,dword ptr [EAX + 0x60]
MOV EAX,EDX
AND EAX,0x7fffffff
CMP byte ptr [EBP + 0xbb],0x0
JZ 0x00216c02
MOV EAX,EDX
OR EAX,0x80000000
MOV ECX,dword ptr [ESP]
MOV EDX,dword ptr [ECX + 0x4c]
MOV dword ptr [ECX + 0x60],EAX
CMP byte ptr [EDX],0xb8
JZ 0x00216d80
ADD ESP,0xac
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP dword ptr [EDX + 0x1],0xad
JNZ 0x00216c14
MOVZX EDX,word ptr [EDX + 0x5]
CMP DX,0x80cd
JZ 0x00216da3
CMP DX,0x50f
JNZ 0x00216c14
MOV EDI,dword ptr [ESP]
OR EAX,0x80000000
MOV dword ptr [EDI + 0x60],EAX
JMP 0x00216c14
MOV EDI,dword ptr [ESP + 0x4]
MOV EAX,dword ptr [ESP]
CMP byte ptr [EDI + 0x9030],0x4
MOV EAX,dword ptr [EAX + 0x48]
JNZ 0x0003159e
MOV dword ptr [ESP + 0x1c],EAX
TEST EDX,0x40000000
JZ 0x00216dde
MOV byte ptr [ESP + 0x90],0x0
LEA EAX,[ESP + 0x1c]
MOV dword ptr [ESP + 0x30],EAX
JMP 0x00216ad4
MOV EBX,dword ptr [ESP + 0x4]
CALL 0x00026080
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nvoid __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00216a80(undefined4 *param_1,int param_2)" identifier (parameter_list "(undefined4 *param_1,int param_2)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined **ppuVar7;" type_identifier (pointer_declarator "**ppuVar7" * (pointer_declarator "*ppuVar7" * identifier)) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 local_a0;" type_identifier identifier ;) (declaration "undefined4 local_9c [4];" type_identifier (array_declarator "local_9c [4]" identifier [ number_literal ]) ;) (declaration "undefined4 *local_8c;" type_identifier (pointer_declarator "*local_8c" * identifier) ;) (declaration "uint local_3c;" type_identifier identifier ;) (declaration "char acStack_30 [4];" primitive_type (array_declarator "acStack_30 [4]" identifier [ number_literal ]) ;) (declaration "char local_2c;" primitive_type identifier ;) (expression_statement "ppuVar7 = &__DT_PLTGOT;" (assignment_expression "ppuVar7 = &__DT_PLTGOT" identifier = (pointer_expression "&__DT_PLTGOT" & identifier)) ;) (expression_statement "puVar9 = local_9c;" (assignment_expression "puVar9 = local_9c" identifier = identifier) ;) (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" identifier = identifier) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (for_statement "for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" for ( (assignment_expression "iVar4 = 0x20" identifier = number_literal) ; (binary_expression "iVar4 != 0" identifier != number_literal) ; (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ) (compound_statement "{\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" { (expression_statement "*puVar8 = *puVar5;" (assignment_expression "*puVar8 = *puVar5" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) })) (if_statement "if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" if (parenthesized_expression "((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0))" ( (binary_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)" (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (local_2c == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_2c == '\0')" ( (binary_expression "local_2c == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(local_8c == (undefined4 *)0x0)" ( (binary_expression "local_8c == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" { (if_statement "if (DAT_0030b030 != '\x04') goto FUN_0003159e;" if (parenthesized_expression "(DAT_0030b030 != '\x04')" ( (binary_expression "DAT_0030b030 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto FUN_0003159e;" goto statement_identifier ;)) (if_statement "if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }" if (parenthesized_expression "((local_3c & 0x40000000) != 0)" ( (binary_expression "(local_3c & 0x40000000) != 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      local_2c = '\0';\n    }" { (expression_statement "local_2c = '\0';" (assignment_expression "local_2c = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) })) (expression_statement "local_8c = &local_a0;" (assignment_expression "local_8c = &local_a0" identifier = (pointer_expression "&local_a0" & identifier)) ;) (expression_statement "local_a0 = param_1[0x12];" (assignment_expression "local_a0 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) })) (if_statement "if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" if (parenthesized_expression "((*(byte *)((int)param_1 + 99) & 0x40) != 0)" ( (binary_expression "(*(byte *)((int)param_1 + 99) & 0x40) != 0" (parenthesized_expression "(*(byte *)((int)param_1 + 99) & 0x40)" ( (binary_expression "*(byte *)((int)param_1 + 99) & 0x40" (pointer_expression "*(byte *)((int)param_1 + 99)" * (cast_expression "(byte *)((int)param_1 + 99)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 99)" ( (binary_expression "(int)param_1 + 99" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" { (expression_statement "*(undefined1 *)(param_1 + 0x1c) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1c) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1c)" * (cast_expression "(undefined1 *)(param_1 + 0x1c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) == 1)" ( (binary_expression "*(int *)(param_2 + 0xa0) == 1" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x98);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x98)" identifier = (pointer_expression "*(int *)(param_2 + 0x98)" * (cast_expression "(int *)(param_2 + 0x98)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) ))))) ;) (if_statement "if (0x11 < iVar4) {\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" if (parenthesized_expression "(0x11 < iVar4)" ( (binary_expression "0x11 < iVar4" number_literal < identifier) )) (compound_statement "{\nFUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" { (labeled_statement "FUN_0003159e:\n                    /* WARNING: Subroutine does not return */\n      abort();" statement_identifier : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "puVar5 = (undefined4 *)local_9c[iVar4];" (assignment_expression "puVar5 = (undefined4 *)local_9c[iVar4]" identifier = (cast_expression "(undefined4 *)local_9c[iVar4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_9c[iVar4]" identifier [ identifier ]))) ;) (if_statement "if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" if (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(acStack_30[iVar4] == '\0')" ( (binary_expression "acStack_30[iVar4] == '\0'" (subscript_expression "acStack_30[iVar4]" identifier [ identifier ]) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" { (if_statement "if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;" if (parenthesized_expression "((&DAT_0030b02c)[iVar4] != '\x04')" ( (binary_expression "(&DAT_0030b02c)[iVar4] != '\x04'" (subscript_expression "(&DAT_0030b02c)[iVar4]" (parenthesized_expression "(&DAT_0030b02c)" ( (pointer_expression "&DAT_0030b02c" & identifier) )) [ identifier ]) != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto FUN_0003159e;" goto statement_identifier ;)) (expression_statement "puVar5 = (undefined4 *)*puVar5;" (assignment_expression "puVar5 = (undefined4 *)*puVar5" identifier = (cast_expression "(undefined4 *)*puVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) })) (expression_statement "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);" (assignment_expression "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94)" identifier = (binary_expression "(int)puVar5 + *(int *)(param_2 + 0x94)" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(param_2 + 0x94)" * (cast_expression "(int *)(param_2 + 0x94)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x94)" ( (binary_expression "param_2 + 0x94" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" else (compound_statement "{\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" { (if_statement "if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) != 2)" ( (binary_expression "*(int *)(param_2 + 0xa0) != 2" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pcVar2 = *(char **)(param_2 + 0x9c);" (assignment_expression "pcVar2 = *(char **)(param_2 + 0x9c)" identifier = (pointer_expression "*(char **)(param_2 + 0x9c)" * (cast_expression "(char **)(param_2 + 0x9c)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x9c)" ( (binary_expression "param_2 + 0x9c" identifier + number_literal) ))))) ;) (do_statement "do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');" do (compound_statement "{\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    }" { (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" identifier = (pointer_expression "*pcVar2" * identifier)) ;) (expression_statement "pcVar2 = pcVar2 + 1;" (assignment_expression "pcVar2 = pcVar2 + 1" identifier = (binary_expression "pcVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 < '\0')" ( (binary_expression "cVar1 < '\0'" identifier < (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar4 = FUN_00216380(0);" (assignment_expression "iVar4 = FUN_00216380(0)" identifier = (call_expression "FUN_00216380(0)" identifier (argument_list "(0)" ( number_literal )))) ;) }))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "param_1[0x12] = iVar4;" (assignment_expression "param_1[0x12] = iVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);" do (compound_statement "{\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  }" { (if_statement "if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" if (parenthesized_expression "(*(uint *)(param_2 + 4 + iVar6 * 8) < 6)" ( (binary_expression "*(uint *)(param_2 + 4 + iVar6 * 8) < 6" (pointer_expression "*(uint *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(uint *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" { comment comment (expression_statement "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);" (call_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9)" (parenthesized_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))" ( (pointer_expression "*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" * (cast_expression "(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (binary_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7" (subscript_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a]" identifier [ (binary_expression "*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a" (pointer_expression "*(int *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(int *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) + number_literal) ]) + (cast_expression "(int)ppuVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )))) )) (argument_list "(ppuVar7,iVar4,puVar9)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != 0x12)" ( (binary_expression "iVar6 != 0x12" identifier != number_literal) )) ;) (expression_statement "uVar3 = param_1[0x18] & 0x7fffffff;" (assignment_expression "uVar3 = param_1[0x18] & 0x7fffffff" identifier = (binary_expression "param_1[0x18] & 0x7fffffff" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" if (parenthesized_expression "(*(char *)(param_2 + 0xbb) != '\0')" ( (binary_expression "*(char *)(param_2 + 0xbb) != '\0'" (pointer_expression "*(char *)(param_2 + 0xbb)" * (cast_expression "(char *)(param_2 + 0xbb)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xbb)" ( (binary_expression "param_2 + 0xbb" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" { (expression_statement "uVar3 = param_1[0x18] | 0x80000000;" (assignment_expression "uVar3 = param_1[0x18] | 0x80000000" identifier = (binary_expression "param_1[0x18] | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) | number_literal)) ;) })) (expression_statement "pcVar2 = (char *)param_1[0x13];" (assignment_expression "pcVar2 = (char *)param_1[0x13]" identifier = (cast_expression "(char *)param_1[0x13]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x13]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x18] = uVar3;" (assignment_expression "param_1[0x18] = uVar3" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" if (parenthesized_expression "(((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))))" ( (binary_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" (parenthesized_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad))" ( (binary_expression "(*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)" (parenthesized_expression "(*pcVar2 == -0x48)" ( (binary_expression "*pcVar2 == -0x48" (pointer_expression "*pcVar2" * identifier) == number_literal) )) && (parenthesized_expression "(*(int *)(pcVar2 + 1) == 0xad)" ( (binary_expression "*(int *)(pcVar2 + 1) == 0xad" (pointer_expression "*(int *)(pcVar2 + 1)" * (cast_expression "(int *)(pcVar2 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) == number_literal) ))) )) && (parenthesized_expression "((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" ( (parenthesized_expression "(*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))" ( (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)" (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) || (parenthesized_expression "(*(short *)(pcVar2 + 5) == 0x50f)" ( (binary_expression "*(short *)(pcVar2 + 5) == 0x50f" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) ))) )) ))) )) (compound_statement "{\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" { (expression_statement "param_1[0x18] = uVar3 | 0x80000000;" (assignment_expression "param_1[0x18] = uVar3 | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = (binary_expression "uVar3 | 0x80000000" identifier | number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.si replaced with injection: get_pc_thunk_si */\n\nvoid __regparm3 uw_update_context_1(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &_GLOBAL_OFFSET_TABLE_;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 uw_update_context_1(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &_GLOBAL_OFFSET_TABLE_;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "uw_update_context_1(undefined4 *param_1,int param_2)" identifier (parameter_list "(undefined4 *param_1,int param_2)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &_GLOBAL_OFFSET_TABLE_;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined **ppuVar7;" type_identifier (pointer_declarator "**ppuVar7" * (pointer_declarator "*ppuVar7" * identifier)) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 local_a0;" type_identifier identifier ;) (declaration "undefined4 local_9c [4];" type_identifier (array_declarator "local_9c [4]" identifier [ number_literal ]) ;) (declaration "undefined4 *local_8c;" type_identifier (pointer_declarator "*local_8c" * identifier) ;) (declaration "uint local_3c;" type_identifier identifier ;) (declaration "char acStack_30 [4];" primitive_type (array_declarator "acStack_30 [4]" identifier [ number_literal ]) ;) (declaration "char local_2c;" primitive_type identifier ;) (expression_statement "ppuVar7 = &_GLOBAL_OFFSET_TABLE_;" (assignment_expression "ppuVar7 = &_GLOBAL_OFFSET_TABLE_" identifier = (pointer_expression "&_GLOBAL_OFFSET_TABLE_" & identifier)) ;) (expression_statement "puVar9 = local_9c;" (assignment_expression "puVar9 = local_9c" identifier = identifier) ;) (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" identifier = identifier) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (for_statement "for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" for ( (assignment_expression "iVar4 = 0x20" identifier = number_literal) ; (binary_expression "iVar4 != 0" identifier != number_literal) ; (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ) (compound_statement "{\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" { (expression_statement "*puVar8 = *puVar5;" (assignment_expression "*puVar8 = *puVar5" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) })) (if_statement "if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" if (parenthesized_expression "((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0))" ( (binary_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)" (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (local_2c == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_2c == '\0')" ( (binary_expression "local_2c == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(local_8c == (undefined4 *)0x0)" ( (binary_expression "local_8c == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" { (if_statement "if (DAT_0030b030 != '\x04') goto uw_update_context_1_cold_9;" if (parenthesized_expression "(DAT_0030b030 != '\x04')" ( (binary_expression "DAT_0030b030 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto uw_update_context_1_cold_9;" goto statement_identifier ;)) (if_statement "if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }" if (parenthesized_expression "((local_3c & 0x40000000) != 0)" ( (binary_expression "(local_3c & 0x40000000) != 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      local_2c = '\0';\n    }" { (expression_statement "local_2c = '\0';" (assignment_expression "local_2c = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) })) (expression_statement "local_8c = &local_a0;" (assignment_expression "local_8c = &local_a0" identifier = (pointer_expression "&local_a0" & identifier)) ;) (expression_statement "local_a0 = param_1[0x12];" (assignment_expression "local_a0 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) })) (if_statement "if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" if (parenthesized_expression "((*(byte *)((int)param_1 + 99) & 0x40) != 0)" ( (binary_expression "(*(byte *)((int)param_1 + 99) & 0x40) != 0" (parenthesized_expression "(*(byte *)((int)param_1 + 99) & 0x40)" ( (binary_expression "*(byte *)((int)param_1 + 99) & 0x40" (pointer_expression "*(byte *)((int)param_1 + 99)" * (cast_expression "(byte *)((int)param_1 + 99)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 99)" ( (binary_expression "(int)param_1 + 99" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" { (expression_statement "*(undefined1 *)(param_1 + 0x1c) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1c) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1c)" * (cast_expression "(undefined1 *)(param_1 + 0x1c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) == 1)" ( (binary_expression "*(int *)(param_2 + 0xa0) == 1" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x98);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x98)" identifier = (pointer_expression "*(int *)(param_2 + 0x98)" * (cast_expression "(int *)(param_2 + 0x98)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) ))))) ;) (if_statement "if (0x11 < iVar4) {\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" if (parenthesized_expression "(0x11 < iVar4)" ( (binary_expression "0x11 < iVar4" number_literal < identifier) )) (compound_statement "{\nuw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" { (labeled_statement "uw_update_context_1_cold_9:\n                    /* WARNING: Subroutine does not return */\n      abort();" statement_identifier : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "puVar5 = (undefined4 *)local_9c[iVar4];" (assignment_expression "puVar5 = (undefined4 *)local_9c[iVar4]" identifier = (cast_expression "(undefined4 *)local_9c[iVar4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_9c[iVar4]" identifier [ identifier ]))) ;) (if_statement "if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }" if (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(acStack_30[iVar4] == '\0')" ( (binary_expression "acStack_30[iVar4] == '\0'" (subscript_expression "acStack_30[iVar4]" identifier [ identifier ]) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;\n      puVar5 = (undefined4 *)*puVar5;\n    }" { (if_statement "if ((&dwarf_reg_size_table)[iVar4] != '\x04') goto uw_update_context_1_cold_9;" if (parenthesized_expression "((&dwarf_reg_size_table)[iVar4] != '\x04')" ( (binary_expression "(&dwarf_reg_size_table)[iVar4] != '\x04'" (subscript_expression "(&dwarf_reg_size_table)[iVar4]" (parenthesized_expression "(&dwarf_reg_size_table)" ( (pointer_expression "&dwarf_reg_size_table" & identifier) )) [ identifier ]) != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto uw_update_context_1_cold_9;" goto statement_identifier ;)) (expression_statement "puVar5 = (undefined4 *)*puVar5;" (assignment_expression "puVar5 = (undefined4 *)*puVar5" identifier = (cast_expression "(undefined4 *)*puVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) })) (expression_statement "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);" (assignment_expression "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94)" identifier = (binary_expression "(int)puVar5 + *(int *)(param_2 + 0x94)" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(param_2 + 0x94)" * (cast_expression "(int *)(param_2 + 0x94)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x94)" ( (binary_expression "param_2 + 0x94" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }" else (compound_statement "{\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = execute_stack_op(0);\n  }" { (if_statement "if (*(int *)(param_2 + 0xa0) != 2) {\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) != 2)" ( (binary_expression "*(int *)(param_2 + 0xa0) != 2" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      abort();\n    }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pcVar2 = *(char **)(param_2 + 0x9c);" (assignment_expression "pcVar2 = *(char **)(param_2 + 0x9c)" identifier = (pointer_expression "*(char **)(param_2 + 0x9c)" * (cast_expression "(char **)(param_2 + 0x9c)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x9c)" ( (binary_expression "param_2 + 0x9c" identifier + number_literal) ))))) ;) (do_statement "do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');" do (compound_statement "{\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    }" { (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" identifier = (pointer_expression "*pcVar2" * identifier)) ;) (expression_statement "pcVar2 = pcVar2 + 1;" (assignment_expression "pcVar2 = pcVar2 + 1" identifier = (binary_expression "pcVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 < '\0')" ( (binary_expression "cVar1 < '\0'" identifier < (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar4 = execute_stack_op(0);" (assignment_expression "iVar4 = execute_stack_op(0)" identifier = (call_expression "execute_stack_op(0)" identifier (argument_list "(0)" ( number_literal )))) ;) }))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "param_1[0x12] = iVar4;" (assignment_expression "param_1[0x12] = iVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);" do (compound_statement "{\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  }" { (if_statement "if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" if (parenthesized_expression "(*(uint *)(param_2 + 4 + iVar6 * 8) < 6)" ( (binary_expression "*(uint *)(param_2 + 4 + iVar6 * 8) < 6" (pointer_expression "*(uint *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(uint *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */\n                    /* WARNING: Treating indirect jump as call */\n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" { comment comment (expression_statement "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);" (call_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9)" (parenthesized_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))" ( (pointer_expression "*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" * (cast_expression "(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (binary_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7" (subscript_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a]" identifier [ (binary_expression "*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a" (pointer_expression "*(int *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(int *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) + number_literal) ]) + (cast_expression "(int)ppuVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )))) )) (argument_list "(ppuVar7,iVar4,puVar9)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != 0x12)" ( (binary_expression "iVar6 != 0x12" identifier != number_literal) )) ;) (expression_statement "uVar3 = param_1[0x18] & 0x7fffffff;" (assignment_expression "uVar3 = param_1[0x18] & 0x7fffffff" identifier = (binary_expression "param_1[0x18] & 0x7fffffff" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" if (parenthesized_expression "(*(char *)(param_2 + 0xbb) != '\0')" ( (binary_expression "*(char *)(param_2 + 0xbb) != '\0'" (pointer_expression "*(char *)(param_2 + 0xbb)" * (cast_expression "(char *)(param_2 + 0xbb)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xbb)" ( (binary_expression "param_2 + 0xbb" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" { (expression_statement "uVar3 = param_1[0x18] | 0x80000000;" (assignment_expression "uVar3 = param_1[0x18] | 0x80000000" identifier = (binary_expression "param_1[0x18] | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) | number_literal)) ;) })) (expression_statement "pcVar2 = (char *)param_1[0x13];" (assignment_expression "pcVar2 = (char *)param_1[0x13]" identifier = (cast_expression "(char *)param_1[0x13]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x13]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x18] = uVar3;" (assignment_expression "param_1[0x18] = uVar3" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" if (parenthesized_expression "(((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))))" ( (binary_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" (parenthesized_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad))" ( (binary_expression "(*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)" (parenthesized_expression "(*pcVar2 == -0x48)" ( (binary_expression "*pcVar2 == -0x48" (pointer_expression "*pcVar2" * identifier) == number_literal) )) && (parenthesized_expression "(*(int *)(pcVar2 + 1) == 0xad)" ( (binary_expression "*(int *)(pcVar2 + 1) == 0xad" (pointer_expression "*(int *)(pcVar2 + 1)" * (cast_expression "(int *)(pcVar2 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) == number_literal) ))) )) && (parenthesized_expression "((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" ( (parenthesized_expression "(*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))" ( (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)" (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) || (parenthesized_expression "(*(short *)(pcVar2 + 5) == 0x50f)" ( (binary_expression "*(short *)(pcVar2 + 5) == 0x50f" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) ))) )) ))) )) (compound_statement "{\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" { (expression_statement "param_1[0x18] = uVar3 | 0x80000000;" (assignment_expression "param_1[0x18] = uVar3 | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = (binary_expression "uVar3 | 0x80000000" identifier | number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00216a80(undefined4 *param_1,int param_2)" identifier (parameter_list "(undefined4 *param_1,int param_2)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined **ppuVar7;" type_identifier (pointer_declarator "**ppuVar7" * (pointer_declarator "*ppuVar7" * identifier)) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "undefined4 local_a0;" type_identifier identifier ;) (declaration "undefined4 local_9c [4];" type_identifier (array_declarator "local_9c [4]" identifier [ number_literal ]) ;) (declaration "undefined4 *local_8c;" type_identifier (pointer_declarator "*local_8c" * identifier) ;) (declaration "uint local_3c;" type_identifier identifier ;) (declaration "char acStack_30 [4];" primitive_type (array_declarator "acStack_30 [4]" identifier [ number_literal ]) ;) (declaration "char local_2c;" primitive_type identifier ;) (expression_statement "ppuVar7 = &__DT_PLTGOT;" (assignment_expression "ppuVar7 = &__DT_PLTGOT" identifier = (pointer_expression "&__DT_PLTGOT" & identifier)) ;) (expression_statement "puVar9 = local_9c;" (assignment_expression "puVar9 = local_9c" identifier = identifier) ;) (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" identifier = identifier) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (for_statement "for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" for ( (assignment_expression "iVar4 = 0x20" identifier = number_literal) ; (binary_expression "iVar4 != 0" identifier != number_literal) ; (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ) (compound_statement "{\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" { (expression_statement "*puVar8 = *puVar5;" (assignment_expression "*puVar8 = *puVar5" (pointer_expression "*puVar8" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) })) (if_statement "if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" if (parenthesized_expression "((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0))" ( (binary_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)" (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (local_2c == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_2c == '\0')" ( (binary_expression "local_2c == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) ))) )) && (parenthesized_expression "(local_8c == (undefined4 *)0x0)" ( (binary_expression "local_8c == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" { (if_statement "if (DAT_0030b030 != '\x04') goto FUN_0003159e;" if (parenthesized_expression "(DAT_0030b030 != '\x04')" ( (binary_expression "DAT_0030b030 != '\x04'" identifier != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto FUN_0003159e;" goto statement_identifier ;)) (if_statement "if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }" if (parenthesized_expression "((local_3c & 0x40000000) != 0)" ( (binary_expression "(local_3c & 0x40000000) != 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      local_2c = '\0';\n    }" { (expression_statement "local_2c = '\0';" (assignment_expression "local_2c = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) })) (expression_statement "local_8c = &local_a0;" (assignment_expression "local_8c = &local_a0" identifier = (pointer_expression "&local_a0" & identifier)) ;) (expression_statement "local_a0 = param_1[0x12];" (assignment_expression "local_a0 = param_1[0x12]" identifier = (subscript_expression "param_1[0x12]" identifier [ number_literal ])) ;) })) (if_statement "if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" if (parenthesized_expression "((*(byte *)((int)param_1 + 99) & 0x40) != 0)" ( (binary_expression "(*(byte *)((int)param_1 + 99) & 0x40) != 0" (parenthesized_expression "(*(byte *)((int)param_1 + 99) & 0x40)" ( (binary_expression "*(byte *)((int)param_1 + 99) & 0x40" (pointer_expression "*(byte *)((int)param_1 + 99)" * (cast_expression "(byte *)((int)param_1 + 99)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 99)" ( (binary_expression "(int)param_1 + 99" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" { (expression_statement "*(undefined1 *)(param_1 + 0x1c) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1c) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1c)" * (cast_expression "(undefined1 *)(param_1 + 0x1c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) == 1)" ( (binary_expression "*(int *)(param_2 + 0xa0) == 1" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }" { (expression_statement "iVar4 = *(int *)(param_2 + 0x98);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x98)" identifier = (pointer_expression "*(int *)(param_2 + 0x98)" * (cast_expression "(int *)(param_2 + 0x98)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) ))))) ;) (if_statement "if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }" if (parenthesized_expression "(0x11 < iVar4)" ( (binary_expression "0x11 < iVar4" number_literal < identifier) )) (compound_statement "{\nFUN_0003159e:\n                    \n      abort();\n    }" { (labeled_statement "FUN_0003159e:\n                    \n      abort();" statement_identifier : (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "puVar5 = (undefined4 *)local_9c[iVar4];" (assignment_expression "puVar5 = (undefined4 *)local_9c[iVar4]" identifier = (cast_expression "(undefined4 *)local_9c[iVar4]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "local_9c[iVar4]" identifier [ identifier ]))) ;) (if_statement "if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" if (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0'))" ( (binary_expression "((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" ( (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" ( (binary_expression "local_3c & 0x40000000" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(acStack_30[iVar4] == '\0')" ( (binary_expression "acStack_30[iVar4] == '\0'" (subscript_expression "acStack_30[iVar4]" identifier [ identifier ]) == (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" { (if_statement "if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;" if (parenthesized_expression "((&DAT_0030b02c)[iVar4] != '\x04')" ( (binary_expression "(&DAT_0030b02c)[iVar4] != '\x04'" (subscript_expression "(&DAT_0030b02c)[iVar4]" (parenthesized_expression "(&DAT_0030b02c)" ( (pointer_expression "&DAT_0030b02c" & identifier) )) [ identifier ]) != (char_literal "'\x04'" ' escape_sequence ')) )) (goto_statement "goto FUN_0003159e;" goto statement_identifier ;)) (expression_statement "puVar5 = (undefined4 *)*puVar5;" (assignment_expression "puVar5 = (undefined4 *)*puVar5" identifier = (cast_expression "(undefined4 *)*puVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) })) (expression_statement "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);" (assignment_expression "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94)" identifier = (binary_expression "(int)puVar5 + *(int *)(param_2 + 0x94)" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(param_2 + 0x94)" * (cast_expression "(int *)(param_2 + 0x94)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x94)" ( (binary_expression "param_2 + 0x94" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" else (compound_statement "{\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" { (if_statement "if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0xa0) != 2)" ( (binary_expression "*(int *)(param_2 + 0xa0) != 2" (pointer_expression "*(int *)(param_2 + 0xa0)" * (cast_expression "(int *)(param_2 + 0xa0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xa0)" ( (binary_expression "param_2 + 0xa0" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n                    \n      abort();\n    }" { (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pcVar2 = *(char **)(param_2 + 0x9c);" (assignment_expression "pcVar2 = *(char **)(param_2 + 0x9c)" identifier = (pointer_expression "*(char **)(param_2 + 0x9c)" * (cast_expression "(char **)(param_2 + 0x9c)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x9c)" ( (binary_expression "param_2 + 0x9c" identifier + number_literal) ))))) ;) (do_statement "do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');" do (compound_statement "{\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    }" { (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" identifier = (pointer_expression "*pcVar2" * identifier)) ;) (expression_statement "pcVar2 = pcVar2 + 1;" (assignment_expression "pcVar2 = pcVar2 + 1" identifier = (binary_expression "pcVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(cVar1 < '\0')" ( (binary_expression "cVar1 < '\0'" identifier < (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iVar4 = FUN_00216380(0);" (assignment_expression "iVar4 = FUN_00216380(0)" identifier = (call_expression "FUN_00216380(0)" identifier (argument_list "(0)" ( number_literal )))) ;) }))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "param_1[0x12] = iVar4;" (assignment_expression "param_1[0x12] = iVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (do_statement "do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);" do (compound_statement "{\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  }" { (if_statement "if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" if (parenthesized_expression "(*(uint *)(param_2 + 4 + iVar6 * 8) < 6)" ( (binary_expression "*(uint *)(param_2 + 4 + iVar6 * 8) < 6" (pointer_expression "*(uint *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(uint *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) < number_literal) )) (compound_statement "{\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" { (expression_statement "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);" (call_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9)" (parenthesized_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))" ( (pointer_expression "*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" * (cast_expression "(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" ( (binary_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7" (subscript_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a]" identifier [ (binary_expression "*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a" (pointer_expression "*(int *)(param_2 + 4 + iVar6 * 8)" * (cast_expression "(int *)(param_2 + 4 + iVar6 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" ( (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" identifier + number_literal) + (binary_expression "iVar6 * 8" identifier * number_literal)) )))) + number_literal) ]) + (cast_expression "(int)ppuVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )))) )) (argument_list "(ppuVar7,iVar4,puVar9)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 != 0x12)" ( (binary_expression "iVar6 != 0x12" identifier != number_literal) )) ;) (expression_statement "uVar3 = param_1[0x18] & 0x7fffffff;" (assignment_expression "uVar3 = param_1[0x18] & 0x7fffffff" identifier = (binary_expression "param_1[0x18] & 0x7fffffff" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" if (parenthesized_expression "(*(char *)(param_2 + 0xbb) != '\0')" ( (binary_expression "*(char *)(param_2 + 0xbb) != '\0'" (pointer_expression "*(char *)(param_2 + 0xbb)" * (cast_expression "(char *)(param_2 + 0xbb)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xbb)" ( (binary_expression "param_2 + 0xbb" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" { (expression_statement "uVar3 = param_1[0x18] | 0x80000000;" (assignment_expression "uVar3 = param_1[0x18] | 0x80000000" identifier = (binary_expression "param_1[0x18] | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) | number_literal)) ;) })) (expression_statement "pcVar2 = (char *)param_1[0x13];" (assignment_expression "pcVar2 = (char *)param_1[0x13]" identifier = (cast_expression "(char *)param_1[0x13]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x13]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x18] = uVar3;" (assignment_expression "param_1[0x18] = uVar3" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" if (parenthesized_expression "(((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))))" ( (binary_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" (parenthesized_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad))" ( (binary_expression "(*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)" (parenthesized_expression "(*pcVar2 == -0x48)" ( (binary_expression "*pcVar2 == -0x48" (pointer_expression "*pcVar2" * identifier) == number_literal) )) && (parenthesized_expression "(*(int *)(pcVar2 + 1) == 0xad)" ( (binary_expression "*(int *)(pcVar2 + 1) == 0xad" (pointer_expression "*(int *)(pcVar2 + 1)" * (cast_expression "(int *)(pcVar2 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 1)" ( (binary_expression "pcVar2 + 1" identifier + number_literal) )))) == number_literal) ))) )) && (parenthesized_expression "((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" ( (parenthesized_expression "(*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))" ( (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)" (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) || (parenthesized_expression "(*(short *)(pcVar2 + 5) == 0x50f)" ( (binary_expression "*(short *)(pcVar2 + 5) == 0x50f" (pointer_expression "*(short *)(pcVar2 + 5)" * (cast_expression "(short *)(pcVar2 + 5)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar2 + 5)" ( (binary_expression "pcVar2 + 5" identifier + number_literal) )))) == number_literal) ))) )) ))) )) (compound_statement "{\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" { (expression_statement "param_1[0x18] = uVar3 | 0x80000000;" (assignment_expression "param_1[0x18] = uVar3 | 0x80000000" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = (binary_expression "uVar3 | 0x80000000" identifier | number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) ))) )) && (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (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 (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ IDENT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == (char_literal ' escape_sequence ')) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ]) != (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (char_literal ' escape_sequence ')) )) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) < LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) + LIT) ]) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) | LIT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT | LIT)) ;) })) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_00216a80(undefined4 *param_1,int param_2)\n\n{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00216a80(undefined4 *param_1,int param_2)" (identifier "FUN_00216a80") (parameter_list "(undefined4 *param_1,int param_2)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  char cVar1;\n  char *pcVar2;\n  uint uVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined **ppuVar7;\n  undefined4 *puVar8;\n  undefined4 *puVar9;\n  undefined4 local_a0;\n  undefined4 local_9c [4];\n  undefined4 *local_8c;\n  uint local_3c;\n  char acStack_30 [4];\n  char local_2c;\n  \n  ppuVar7 = &__DT_PLTGOT;\n  puVar9 = local_9c;\n  puVar5 = param_1;\n  puVar8 = puVar9;\n  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }\n  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }\n  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }\n  param_1[4] = 0;\n  if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }\n  iVar6 = 0;\n  param_1[0x12] = iVar4;\n  do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);\n  uVar3 = param_1[0x18] & 0x7fffffff;\n  if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }\n  pcVar2 = (char *)param_1[0x13];\n  param_1[0x18] = uVar3;\n  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }\n  return;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "char *pcVar2;" (primitive_type "char") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined **ppuVar7;" (type_identifier "undefined") (pointer_declarator "**ppuVar7" (* "*") (pointer_declarator "*ppuVar7" (* "*") (identifier "ppuVar7"))) (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined4 *puVar9;" (type_identifier "undefined4") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "undefined4 local_a0;" (type_identifier "undefined4") (identifier "local_a0") (; ";")) (declaration "undefined4 local_9c [4];" (type_identifier "undefined4") (array_declarator "local_9c [4]" (identifier "local_9c") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "undefined4 *local_8c;" (type_identifier "undefined4") (pointer_declarator "*local_8c" (* "*") (identifier "local_8c")) (; ";")) (declaration "uint local_3c;" (type_identifier "uint") (identifier "local_3c") (; ";")) (declaration "char acStack_30 [4];" (primitive_type "char") (array_declarator "acStack_30 [4]" (identifier "acStack_30") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "char local_2c;" (primitive_type "char") (identifier "local_2c") (; ";")) (expression_statement "ppuVar7 = &__DT_PLTGOT;" (assignment_expression "ppuVar7 = &__DT_PLTGOT" (identifier "ppuVar7") (= "=") (pointer_expression "&__DT_PLTGOT" (& "&") (identifier "__DT_PLTGOT"))) (; ";")) (expression_statement "puVar9 = local_9c;" (assignment_expression "puVar9 = local_9c" (identifier "puVar9") (= "=") (identifier "local_9c")) (; ";")) (expression_statement "puVar5 = param_1;" (assignment_expression "puVar5 = param_1" (identifier "puVar5") (= "=") (identifier "param_1")) (; ";")) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (for_statement "for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" (for "for") (( "(") (assignment_expression "iVar4 = 0x20" (identifier "iVar4") (= "=") (number_literal "0x20")) (; ";") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "iVar4 = iVar4 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n    *puVar8 = *puVar5;\n    puVar5 = puVar5 + 1;\n    puVar8 = puVar8 + 1;\n  }" ({ "{") (expression_statement "*puVar8 = *puVar5;" (assignment_expression "*puVar8 = *puVar5" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" (if "if") (parenthesized_expression "((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0))" (( "(") (binary_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)" (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (local_2c == '\0'))" (( "(") (binary_expression "((local_3c & 0x40000000) == 0) || (local_2c == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" (( "(") (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" (( "(") (binary_expression "local_3c & 0x40000000" (identifier "local_3c") (& "&") (number_literal "0x40000000")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(local_2c == '\0')" (( "(") (binary_expression "local_2c == '\0'" (identifier "local_2c") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(local_8c == (undefined4 *)0x0)" (( "(") (binary_expression "local_8c == (undefined4 *)0x0" (identifier "local_8c") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if (DAT_0030b030 != '\x04') goto FUN_0003159e;\n    if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }\n    local_8c = &local_a0;\n    local_a0 = param_1[0x12];\n  }" ({ "{") (if_statement "if (DAT_0030b030 != '\x04') goto FUN_0003159e;" (if "if") (parenthesized_expression "(DAT_0030b030 != '\x04')" (( "(") (binary_expression "DAT_0030b030 != '\x04'" (identifier "DAT_0030b030") (!= "!=") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (goto_statement "goto FUN_0003159e;" (goto "goto") (statement_identifier "FUN_0003159e") (; ";"))) (if_statement "if ((local_3c & 0x40000000) != 0) {\n      local_2c = '\0';\n    }" (if "if") (parenthesized_expression "((local_3c & 0x40000000) != 0)" (( "(") (binary_expression "(local_3c & 0x40000000) != 0" (parenthesized_expression "(local_3c & 0x40000000)" (( "(") (binary_expression "local_3c & 0x40000000" (identifier "local_3c") (& "&") (number_literal "0x40000000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      local_2c = '\0';\n    }" ({ "{") (expression_statement "local_2c = '\0';" (assignment_expression "local_2c = '\0'" (identifier "local_2c") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}"))) (expression_statement "local_8c = &local_a0;" (assignment_expression "local_8c = &local_a0" (identifier "local_8c") (= "=") (pointer_expression "&local_a0" (& "&") (identifier "local_a0"))) (; ";")) (expression_statement "local_a0 = param_1[0x12];" (assignment_expression "local_a0 = param_1[0x12]" (identifier "local_a0") (= "=") (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]"))) (; ";")) (} "}"))) (if_statement "if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" (if "if") (parenthesized_expression "((*(byte *)((int)param_1 + 99) & 0x40) != 0)" (( "(") (binary_expression "(*(byte *)((int)param_1 + 99) & 0x40) != 0" (parenthesized_expression "(*(byte *)((int)param_1 + 99) & 0x40)" (( "(") (binary_expression "*(byte *)((int)param_1 + 99) & 0x40" (pointer_expression "*(byte *)((int)param_1 + 99)" (* "*") (cast_expression "(byte *)((int)param_1 + 99)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 99)" (( "(") (binary_expression "(int)param_1 + 99" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "99")) () ")")))) (& "&") (number_literal "0x40")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    *(undefined1 *)(param_1 + 0x1c) = 0;\n  }" ({ "{") (expression_statement "*(undefined1 *)(param_1 + 0x1c) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 0x1c) = 0" (pointer_expression "*(undefined1 *)(param_1 + 0x1c)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0x1c)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "param_1[4] = 0;" (assignment_expression "param_1[4] = 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(param_2 + 0xa0) == 1) {\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }\n  else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0xa0) == 1)" (( "(") (binary_expression "*(int *)(param_2 + 0xa0) == 1" (pointer_expression "*(int *)(param_2 + 0xa0)" (* "*") (cast_expression "(int *)(param_2 + 0xa0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xa0)" (( "(") (binary_expression "param_2 + 0xa0" (identifier "param_2") (+ "+") (number_literal "0xa0")) () ")")))) (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    iVar4 = *(int *)(param_2 + 0x98);\n    if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }\n    puVar5 = (undefined4 *)local_9c[iVar4];\n    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }\n    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);\n  }" ({ "{") (expression_statement "iVar4 = *(int *)(param_2 + 0x98);" (assignment_expression "iVar4 = *(int *)(param_2 + 0x98)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_2 + 0x98)" (* "*") (cast_expression "(int *)(param_2 + 0x98)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x98)" (( "(") (binary_expression "param_2 + 0x98" (identifier "param_2") (+ "+") (number_literal "0x98")) () ")"))))) (; ";")) (if_statement "if (0x11 < iVar4) {\nFUN_0003159e:\n                    \n      abort();\n    }" (if "if") (parenthesized_expression "(0x11 < iVar4)" (( "(") (binary_expression "0x11 < iVar4" (number_literal "0x11") (< "<") (identifier "iVar4")) () ")")) (compound_statement "{\nFUN_0003159e:\n                    \n      abort();\n    }" ({ "{") (labeled_statement "FUN_0003159e:\n                    \n      abort();" (statement_identifier "FUN_0003159e") (: ":") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}"))) (expression_statement "puVar5 = (undefined4 *)local_9c[iVar4];" (assignment_expression "puVar5 = (undefined4 *)local_9c[iVar4]" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)local_9c[iVar4]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "local_9c[iVar4]" (identifier "local_9c") ([ "[") (identifier "iVar4") (] "]")))) (; ";")) (if_statement "if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" (if "if") (parenthesized_expression "(((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0'))" (( "(") (binary_expression "((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')" (parenthesized_expression "((local_3c & 0x40000000) == 0)" (( "(") (binary_expression "(local_3c & 0x40000000) == 0" (parenthesized_expression "(local_3c & 0x40000000)" (( "(") (binary_expression "local_3c & 0x40000000" (identifier "local_3c") (& "&") (number_literal "0x40000000")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(acStack_30[iVar4] == '\0')" (( "(") (binary_expression "acStack_30[iVar4] == '\0'" (subscript_expression "acStack_30[iVar4]" (identifier "acStack_30") ([ "[") (identifier "iVar4") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;\n      puVar5 = (undefined4 *)*puVar5;\n    }" ({ "{") (if_statement "if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;" (if "if") (parenthesized_expression "((&DAT_0030b02c)[iVar4] != '\x04')" (( "(") (binary_expression "(&DAT_0030b02c)[iVar4] != '\x04'" (subscript_expression "(&DAT_0030b02c)[iVar4]" (parenthesized_expression "(&DAT_0030b02c)" (( "(") (pointer_expression "&DAT_0030b02c" (& "&") (identifier "DAT_0030b02c")) () ")")) ([ "[") (identifier "iVar4") (] "]")) (!= "!=") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (goto_statement "goto FUN_0003159e;" (goto "goto") (statement_identifier "FUN_0003159e") (; ";"))) (expression_statement "puVar5 = (undefined4 *)*puVar5;" (assignment_expression "puVar5 = (undefined4 *)*puVar5" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)*puVar5" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")))) (; ";")) (} "}"))) (expression_statement "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);" (assignment_expression "iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94)" (identifier "iVar4") (= "=") (binary_expression "(int)puVar5 + *(int *)(param_2 + 0x94)" (cast_expression "(int)puVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar5")) (+ "+") (pointer_expression "*(int *)(param_2 + 0x94)" (* "*") (cast_expression "(int *)(param_2 + 0x94)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x94)" (( "(") (binary_expression "param_2 + 0x94" (identifier "param_2") (+ "+") (number_literal "0x94")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" (else "else") (compound_statement "{\n    if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }\n    pcVar2 = *(char **)(param_2 + 0x9c);\n    do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');\n    iVar4 = FUN_00216380(0);\n  }" ({ "{") (if_statement "if (*(int *)(param_2 + 0xa0) != 2) {\n                    \n      abort();\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0xa0) != 2)" (( "(") (binary_expression "*(int *)(param_2 + 0xa0) != 2" (pointer_expression "*(int *)(param_2 + 0xa0)" (* "*") (cast_expression "(int *)(param_2 + 0xa0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xa0)" (( "(") (binary_expression "param_2 + 0xa0" (identifier "param_2") (+ "+") (number_literal "0xa0")) () ")")))) (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n                    \n      abort();\n    }" ({ "{") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "pcVar2 = *(char **)(param_2 + 0x9c);" (assignment_expression "pcVar2 = *(char **)(param_2 + 0x9c)" (identifier "pcVar2") (= "=") (pointer_expression "*(char **)(param_2 + 0x9c)" (* "*") (cast_expression "(char **)(param_2 + 0x9c)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x9c)" (( "(") (binary_expression "param_2 + 0x9c" (identifier "param_2") (+ "+") (number_literal "0x9c")) () ")"))))) (; ";")) (do_statement "do {\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    } while (cVar1 < '\0');" (do "do") (compound_statement "{\n      cVar1 = *pcVar2;\n      pcVar2 = pcVar2 + 1;\n    }" ({ "{") (expression_statement "cVar1 = *pcVar2;" (assignment_expression "cVar1 = *pcVar2" (identifier "cVar1") (= "=") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2"))) (; ";")) (expression_statement "pcVar2 = pcVar2 + 1;" (assignment_expression "pcVar2 = pcVar2 + 1" (identifier "pcVar2") (= "=") (binary_expression "pcVar2 + 1" (identifier "pcVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(cVar1 < '\0')" (( "(") (binary_expression "cVar1 < '\0'" (identifier "cVar1") (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (; ";")) (expression_statement "iVar4 = FUN_00216380(0);" (assignment_expression "iVar4 = FUN_00216380(0)" (identifier "iVar4") (= "=") (call_expression "FUN_00216380(0)" (identifier "FUN_00216380") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (} "}")))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x12] = iVar4;" (assignment_expression "param_1[0x12] = iVar4" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "iVar4")) (; ";")) (do_statement "do {\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  } while (iVar6 != 0x12);" (do "do") (compound_statement "{\n    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }\n    iVar6 = iVar6 + 1;\n  }" ({ "{") (if_statement "if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" (if "if") (parenthesized_expression "(*(uint *)(param_2 + 4 + iVar6 * 8) < 6)" (( "(") (binary_expression "*(uint *)(param_2 + 4 + iVar6 * 8) < 6" (pointer_expression "*(uint *)(param_2 + 4 + iVar6 * 8)" (* "*") (cast_expression "(uint *)(param_2 + 4 + iVar6 * 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" (( "(") (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8"))) () ")")))) (< "<") (number_literal "6")) () ")")) (compound_statement "{\n                    \n                    \n      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);\n      return;\n    }" ({ "{") (expression_statement "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9);" (call_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))\n                (ppuVar7,iVar4,puVar9)" (parenthesized_expression "(*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))" (( "(") (pointer_expression "*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" (* "*") (cast_expression "(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7)" (( "(") (binary_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7" (subscript_expression "ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a]" (identifier "ppuVar7") ([ "[") (binary_expression "*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a" (pointer_expression "*(int *)(param_2 + 4 + iVar6 * 8)" (* "*") (cast_expression "(int *)(param_2 + 4 + iVar6 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4 + iVar6 * 8)" (( "(") (binary_expression "param_2 + 4 + iVar6 * 8" (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar6 * 8" (identifier "iVar6") (* "*") (number_literal "8"))) () ")")))) (+ "+") (number_literal "-0x30b6a")) (] "]")) (+ "+") (cast_expression "(int)ppuVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "ppuVar7"))) () ")")))) () ")")) (argument_list "(ppuVar7,iVar4,puVar9)" (( "(") (identifier "ppuVar7") (, ",") (identifier "iVar4") (, ",") (identifier "puVar9") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar6 != 0x12)" (( "(") (binary_expression "iVar6 != 0x12" (identifier "iVar6") (!= "!=") (number_literal "0x12")) () ")")) (; ";")) (expression_statement "uVar3 = param_1[0x18] & 0x7fffffff;" (assignment_expression "uVar3 = param_1[0x18] & 0x7fffffff" (identifier "uVar3") (= "=") (binary_expression "param_1[0x18] & 0x7fffffff" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (& "&") (number_literal "0x7fffffff"))) (; ";")) (if_statement "if (*(char *)(param_2 + 0xbb) != '\0') {\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" (if "if") (parenthesized_expression "(*(char *)(param_2 + 0xbb) != '\0')" (( "(") (binary_expression "*(char *)(param_2 + 0xbb) != '\0'" (pointer_expression "*(char *)(param_2 + 0xbb)" (* "*") (cast_expression "(char *)(param_2 + 0xbb)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xbb)" (( "(") (binary_expression "param_2 + 0xbb" (identifier "param_2") (+ "+") (number_literal "0xbb")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar3 = param_1[0x18] | 0x80000000;\n  }" ({ "{") (expression_statement "uVar3 = param_1[0x18] | 0x80000000;" (assignment_expression "uVar3 = param_1[0x18] | 0x80000000" (identifier "uVar3") (= "=") (binary_expression "param_1[0x18] | 0x80000000" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (| "|") (number_literal "0x80000000"))) (; ";")) (} "}"))) (expression_statement "pcVar2 = (char *)param_1[0x13];" (assignment_expression "pcVar2 = (char *)param_1[0x13]" (identifier "pcVar2") (= "=") (cast_expression "(char *)param_1[0x13]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x13]" (identifier "param_1") ([ "[") (number_literal "0x13") (] "]")))) (; ";")) (expression_statement "param_1[0x18] = uVar3;" (assignment_expression "param_1[0x18] = uVar3" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" (if "if") (parenthesized_expression "(((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))))" (( "(") (binary_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&\n     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" (parenthesized_expression "((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad))" (( "(") (binary_expression "(*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)" (parenthesized_expression "(*pcVar2 == -0x48)" (( "(") (binary_expression "*pcVar2 == -0x48" (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) (== "==") (number_literal "-0x48")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(pcVar2 + 1) == 0xad)" (( "(") (binary_expression "*(int *)(pcVar2 + 1) == 0xad" (pointer_expression "*(int *)(pcVar2 + 1)" (* "*") (cast_expression "(int *)(pcVar2 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar2 + 1)" (( "(") (binary_expression "pcVar2 + 1" (identifier "pcVar2") (+ "+") (number_literal "1")) () ")")))) (== "==") (number_literal "0xad")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))" (( "(") (parenthesized_expression "(*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f))" (( "(") (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)" (binary_expression "*(short *)(pcVar2 + 5) == -0x7f33" (pointer_expression "*(short *)(pcVar2 + 5)" (* "*") (cast_expression "(short *)(pcVar2 + 5)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar2 + 5)" (( "(") (binary_expression "pcVar2 + 5" (identifier "pcVar2") (+ "+") (number_literal "5")) () ")")))) (== "==") (number_literal "-0x7f33")) (|| "||") (parenthesized_expression "(*(short *)(pcVar2 + 5) == 0x50f)" (( "(") (binary_expression "*(short *)(pcVar2 + 5) == 0x50f" (pointer_expression "*(short *)(pcVar2 + 5)" (* "*") (cast_expression "(short *)(pcVar2 + 5)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar2 + 5)" (( "(") (binary_expression "pcVar2 + 5" (identifier "pcVar2") (+ "+") (number_literal "5")) () ")")))) (== "==") (number_literal "0x50f")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    param_1[0x18] = uVar3 | 0x80000000;\n  }" ({ "{") (expression_statement "param_1[0x18] = uVar3 | 0x80000000;" (assignment_expression "param_1[0x18] = uVar3 | 0x80000000" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (binary_expression "uVar3 | 0x80000000" (identifier "uVar3") (| "|") (number_literal "0x80000000"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void __regparm3 function_1(type_1 *var_8,int var_9)

{
  char var_12;
  char *var_11;
  type_2 var_15;
  int var_1;
  type_1 *var_2;
  int var_14;
  type_3 **ppuVar7;
  type_1 *var_3;
  type_1 *puVar9;
  type_1 local_a0;
  type_1 local_9c [4];
  type_1 *var_6;
  type_2 var_4;
  char acStack_30 [4];
  char var_5;
  
  ppuVar7 = &_GLOBAL_OFFSET_TABLE_;
  puVar9 = local_9c;
  var_2 = var_8;
  var_3 = puVar9;
  for (var_1 = 0x20; var_1 != 0; var_1 = var_1 + -1) {
    *var_3 = *var_2;
    var_2 = var_2 + 1;
    var_3 = var_3 + 1;
  }
  if ((((var_4 & 0x40000000) == 0) || (var_5 == '\0')) && (var_6 == (type_1 *)0x0)) {
    if (var_7 != '\x04') goto uw_update_context_1_cold_9;
    if ((var_4 & 0x40000000) != 0) {
      var_5 = '\0';
    }
    var_6 = &local_a0;
    local_a0 = var_8[0x12];
  }
  if ((*(type_4 *)((int)var_8 + 99) & 0x40) != 0) {
    *(type_5 *)(var_8 + 0x1c) = 0;
  }
  var_8[4] = 0;
  if (*(int *)(var_9 + 0xa0) == 1) {
    var_1 = *(int *)(var_9 + 0x98);
    if (0x11 < var_1) {
uw_update_context_1_cold_9:
                    /* WARNING: Subroutine does not return */
      var_10();
    }
    var_2 = (type_1 *)local_9c[var_1];
    if (((var_4 & 0x40000000) == 0) || (acStack_30[var_1] == '\0')) {
      if ((&dwarf_reg_size_table)[var_1] != '\x04') goto uw_update_context_1_cold_9;
      var_2 = (type_1 *)*var_2;
    }
    var_1 = (int)var_2 + *(int *)(var_9 + 0x94);
  }
  else {
    if (*(int *)(var_9 + 0xa0) != 2) {
                    /* WARNING: Subroutine does not return */
      var_10();
    }
    var_11 = *(char **)(var_9 + 0x9c);
    do {
      var_12 = *var_11;
      var_11 = var_11 + 1;
    } while (var_12 < '\0');
    var_1 = var_13(0);
  }
  var_14 = 0;
  var_8[0x12] = var_1;
  do {
    if (*(type_2 *)(var_9 + 4 + var_14 * 8) < 6) {
                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*(type_6 *)(ppuVar7[*(int *)(var_9 + 4 + var_14 * 8) + -0x30b6a] + (int)ppuVar7))
                (ppuVar7,var_1,puVar9);
      return;
    }
    var_14 = var_14 + 1;
  } while (var_14 != 0x12);
  var_15 = var_8[0x18] & 0x7fffffff;
  if (*(char *)(var_9 + 0xbb) != '\0') {
    var_15 = var_8[0x18] | 0x80000000;
  }
  var_11 = (char *)var_8[0x13];
  var_8[0x18] = var_15;
  if (((*var_11 == -0x48) && (*(int *)(var_11 + 1) == 0xad)) &&
     ((*(short *)(var_11 + 5) == -0x7f33 || (*(short *)(var_11 + 5) == 0x50f)))) {
    var_8[0x18] = var_15 | 0x80000000;
  }
  return;
}


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

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

void __regparm3 MASKED(undefined4 *param_1,int param_2)

{
  char cVar1;
  char *pcVar2;
  uint uVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined **ppuVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  undefined4 local_a0;
  undefined4 local_9c [4];
  undefined4 *local_8c;
  uint local_3c;
  char acStack_30 [4];
  char local_2c;
  
  ppuVar7 = &__DT_PLTGOT;
  puVar9 = local_9c;
  puVar5 = param_1;
  puVar8 = puVar9;
  for (iVar4 = 0x20; iVar4 != 0; iVar4 = iVar4 + -1) {
    *puVar8 = *puVar5;
    puVar5 = puVar5 + 1;
    puVar8 = puVar8 + 1;
  }
  if ((((local_3c & 0x40000000) == 0) || (local_2c == '\0')) && (local_8c == (undefined4 *)0x0)) {
    if (DAT_0030b030 != '\x04') goto FUN_0003159e;
    if ((local_3c & 0x40000000) != 0) {
      local_2c = '\0';
    }
    local_8c = &local_a0;
    local_a0 = param_1[0x12];
  }
  if ((*(byte *)((int)param_1 + 99) & 0x40) != 0) {
    *(undefined1 *)(param_1 + 0x1c) = 0;
  }
  param_1[4] = 0;
  if (*(int *)(param_2 + 0xa0) == 1) {
    iVar4 = *(int *)(param_2 + 0x98);
    if (0x11 < iVar4) {
FUN_0003159e:
                    /* WARNING: Subroutine does not return */
      abort();
    }
    puVar5 = (undefined4 *)local_9c[iVar4];
    if (((local_3c & 0x40000000) == 0) || (acStack_30[iVar4] == '\0')) {
      if ((&DAT_0030b02c)[iVar4] != '\x04') goto FUN_0003159e;
      puVar5 = (undefined4 *)*puVar5;
    }
    iVar4 = (int)puVar5 + *(int *)(param_2 + 0x94);
  }
  else {
    if (*(int *)(param_2 + 0xa0) != 2) {
                    /* WARNING: Subroutine does not return */
      abort();
    }
    pcVar2 = *(char **)(param_2 + 0x9c);
    do {
      cVar1 = *pcVar2;
      pcVar2 = pcVar2 + 1;
    } while (cVar1 < '\0');
    iVar4 = FUN_00216380(0);
  }
  iVar6 = 0;
  param_1[0x12] = iVar4;
  do {
    if (*(uint *)(param_2 + 4 + iVar6 * 8) < 6) {
                    /* WARNING: Could not recover jumptable at 0x00216bb0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      (*(code *)(ppuVar7[*(int *)(param_2 + 4 + iVar6 * 8) + -0x30b6a] + (int)ppuVar7))
                (ppuVar7,iVar4,puVar9);
      return;
    }
    iVar6 = iVar6 + 1;
  } while (iVar6 != 0x12);
  uVar3 = param_1[0x18] & 0x7fffffff;
  if (*(char *)(param_2 + 0xbb) != '\0') {
    uVar3 = param_1[0x18] | 0x80000000;
  }
  pcVar2 = (char *)param_1[0x13];
  param_1[0x18] = uVar3;
  if (((*pcVar2 == -0x48) && (*(int *)(pcVar2 + 1) == 0xad)) &&
     ((*(short *)(pcVar2 + 5) == -0x7f33 || (*(short *)(pcVar2 + 5) == 0x50f)))) {
    param_1[0x18] = uVar3 | 0x80000000;
  }
  return;
}

