
/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* DWARF original prototype: void override_base_with_special(Symbol * this, Symbol * from) */

void __thiscall gold::Symbol::override_base_with_special(Symbol *this,Symbol *from)

{
  byte bVar1;
  char *pcVar2;
  byte bVar3;
  byte bVar4;
  
  pcVar2 = from->name_;
  bVar3 = this->field_0x2a;
  if ((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");
  }
  if ((bVar3 & 7) == 0) {
    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;
  }
  else if ((bVar3 & 7) != 4) goto LAB_0018f978;
  if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {
    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;
  }
LAB_0018f978:
  bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;
  this->field_0x2a = bVar3;
  bVar4 = from->field_0x2a & 7;
  if (bVar4 < 3) {
    this->u1_ = from->u1_;
    this->u2_ = from->u2_;
  }
  else if (4 < bVar4) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");
  }
  if (this->name_ == pcVar2) {
    this->version_ = from->version_;
  }
  bVar4 = from->field_0x28 & 0xf;
  this->field_0x28 = this->field_0x28 & 0xf0 | bVar4;
  this->field_0x28 = bVar4 | from->field_0x28 & 0xf0;
  bVar4 = from->field_0x29;
  if ((bVar4 & 3) != 0) {
    bVar1 = this->field_0x29;
    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {
      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;
      bVar4 = from->field_0x29;
    }
  }
  this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3;
  this->field_0x2a = bVar3 | 0x80;
  bVar4 = bVar3 | 0xc0;
  if ((from->field_0x2a & 0x40) == 0) {
    bVar4 = bVar3 | 0x80;
  }
  this->field_0x2a = bVar4;
  if ((from->field_0x2b & 2) != 0) {
    this->field_0x2b = this->field_0x2b | 2;
  }
  this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;
  if ((from->field_0x2a & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");
  }
  if (from->plt_offset_ != 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");
  }
  bVar3 = from->field_0x2b;
  if ((bVar3 & 4) != 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");
  }
  if ((bVar3 & 8) != 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");
  }
  if ((bVar3 & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");
  }
  return;
}



void FUN_0018f920(int *param_1,int *param_2)

{
  int iVar1;
  byte bVar2;
  byte bVar3;
  int unaff_EBP;
  byte bVar4;
  
  FUN_00058c4e();
  iVar1 = *param_2;
  bVar2 = *(byte *)((int)param_1 + 0x2a);
  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);
  }
  if ((bVar2 & 7) == 0) {
    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;
  }
  else if ((bVar2 & 7) != 4) goto LAB_0018f978;
  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {
    *(byte *)(param_1 + 0xb) =
         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;
  }
LAB_0018f978:
  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;
  *(byte *)((int)param_1 + 0x2a) = bVar2;
  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;
  if (bVar3 < 3) {
    param_1[2] = param_2[2];
    param_1[3] = param_2[3];
  }
  else if (4 < bVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);
  }
  if (*param_1 == iVar1) {
    param_1[1] = param_2[1];
  }
  bVar3 = *(byte *)(param_2 + 10);
  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;
  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;
  bVar3 = *(byte *)((int)param_2 + 0x29);
  if ((bVar3 & 3) != 0) {
    bVar4 = *(byte *)((int)param_1 + 0x29);
    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {
      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;
      bVar3 = *(byte *)((int)param_2 + 0x29);
    }
  }
  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;
  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;
  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;
  bVar3 = bVar2 | 0xc0;
  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {
    bVar3 = bVar2 | 0x80;
  }
  *(byte *)((int)param_1 + 0x2a) = bVar3;
  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {
    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;
  }
  bVar2 = *(byte *)(param_2 + 0xb);
  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;
  *(byte *)(param_1 + 0xb) = bVar3;
  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);
  }
  if (param_2[6] != -1) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);
  }
  bVar2 = *(byte *)((int)param_2 + 0x2b);
  if ((bVar2 & 4) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);
  }
  if ((bVar2 & 8) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);
  }
  if ((bVar2 & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);
  }
  return;
}


PUSH EBP
CALL 0x00058c4e
ADD EBP,0x1af6da
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EAX,dword ptr [ESP + 0x30]
MOV EDX,dword ptr [ESP + 0x34]
MOV ESI,dword ptr [EAX]
MOV EBX,dword ptr [EDX]
MOVZX ECX,byte ptr [EAX + 0x2a]
CMP ESI,EBX
JZ 0x0018f94f
TEST CL,0x20
JZ 0x0018fbaa
AND ECX,0x7
JZ 0x0018fa90
CMP CL,0x4
JNZ 0x0018f978
MOVZX ECX,byte ptr [EAX + 0x2c]
TEST CL,0x1
JZ 0x0018fac8
AND ECX,0x2
JNZ 0x0018fac8
LEA ESI,[ESI]
NOP
MOVZX EDI,byte ptr [EAX + 0x2a]
MOVZX ECX,byte ptr [EDX + 0x2a]
AND EDI,0xfffffff8
AND ECX,0x7
OR ECX,EDI
MOV byte ptr [ESP + 0xe],CL
MOV byte ptr [EAX + 0x2a],CL
MOVZX EDI,byte ptr [EDX + 0x2a]
AND EDI,0x7
MOV ECX,EDI
CMP CL,0x2
JA 0x0018faf0
MOV EDI,dword ptr [EDX + 0x8]
MOV dword ptr [EAX + 0x8],EDI
MOV EDI,dword ptr [EDX + 0xc]
MOV dword ptr [EAX + 0xc],EDI
CMP ESI,EBX
JZ 0x0018fb18
MOVZX ESI,byte ptr [EDX + 0x28]
MOVZX EBX,byte ptr [EAX + 0x28]
AND ESI,0xf
AND EBX,0xfffffff0
OR EBX,ESI
MOV byte ptr [EAX + 0x28],BL
MOVZX ESI,byte ptr [EDX + 0x28]
AND EBX,0xf
AND ESI,0xfffffff0
OR EBX,ESI
MOV byte ptr [EAX + 0x28],BL
MOVZX EBX,byte ptr [EDX + 0x29]
MOV EDI,EBX
AND EDI,0x3
JZ 0x0018fa08
MOVZX ESI,byte ptr [EAX + 0x29]
MOV ECX,ESI
AND ECX,0x3
MOV byte ptr [ESP + 0xf],CL
JZ 0x0018fab0
MOV ECX,EDI
CMP CL,byte ptr [ESP + 0xf]
JC 0x0018fab0
LEA ESI,[ESI]
MOVZX ESI,byte ptr [EAX + 0x29]
AND EBX,0xfffffffc
AND ESI,0x3
OR EBX,ESI
MOV byte ptr [EAX + 0x29],BL
MOVZX ECX,byte ptr [ESP + 0xe]
MOV EBX,ECX
OR ECX,0xffffffc0
OR EBX,0xffffff80
MOV byte ptr [EAX + 0x2a],BL
TEST byte ptr [EDX + 0x2a],0x40
CMOVZ ECX,EBX
MOV byte ptr [EAX + 0x2a],CL
TEST byte ptr [EDX + 0x2b],0x2
JZ 0x0018fa3b
OR byte ptr [EAX + 0x2b],0x2
MOVZX EBX,byte ptr [EDX + 0x2c]
MOVZX ECX,byte ptr [EAX + 0x2c]
AND EBX,0x4
AND ECX,0xfffffffb
OR ECX,EBX
MOV byte ptr [EAX + 0x2c],CL
TEST byte ptr [EDX + 0x2a],0x10
JNZ 0x0018fb23
CMP dword ptr [EDX + 0x18],-0x1
JNZ 0x0018fb3e
MOVZX EAX,byte ptr [EDX + 0x2b]
TEST AL,0x4
JNZ 0x0018fb59
TEST AL,0x8
JNZ 0x0018fb74
TEST AL,0x10
JNZ 0x0018fb8f
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,dword ptr [EAX + 0xc]
TEST ECX,ECX
JNZ 0x0018f978
TEST byte ptr [EAX + 0x2b],0x20
JZ 0x0018f978
JMP 0x0018f95d
AND ESI,0xfffffffc
OR EDI,ESI
MOV ECX,EDI
MOV byte ptr [EAX + 0x29],CL
MOVZX EBX,byte ptr [EDX + 0x29]
JMP 0x0018fa08
MOVZX ECX,byte ptr [EAX + 0x28]
SHR CL,0x4
CMP CL,0x2
SETZ CL
LEA EDI,[ECX + ECX*0x1]
MOVZX ECX,byte ptr [EAX + 0x2c]
AND ECX,0xfffffffd
OR ECX,EDI
OR ECX,0x1
MOV byte ptr [EAX + 0x2c],CL
JMP 0x0018f978
CMP CL,0x4
JBE 0x0018f9ad
LEA EAX,[EBP + 0xfff2a2a8]
PUSH EDI
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x41a
PUSH EAX
CALL 0x0008b620
MOV EBX,dword ptr [EDX + 0x4]
MOV dword ptr [EAX + 0x4],EBX
JMP 0x0018f9b5
LEA EAX,[EBP + 0xfff2a2a8]
PUSH ESI
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x439
PUSH EAX
CALL 0x0008b620
LEA EAX,[EBP + 0xfff2a2a8]
PUSH EBX
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x43a
PUSH EAX
CALL 0x0008b620
LEA EAX,[EBP + 0xfff2a2a8]
PUSH ECX
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x43b
PUSH EAX
CALL 0x0008b620
LEA EAX,[EBP + 0xfff2a2a8]
PUSH EDX
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x43c
PUSH EAX
CALL 0x0008b620
PUSH EAX
LEA EAX,[EBP + 0xfff2a2a8]
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x43d
PUSH EAX
CALL 0x0008b620
LEA EAX,[EBP + 0xfff2a2a8]
PUSH EBX
MOV EBX,EBP
PUSH EAX
LEA EAX,[EBP + 0xfff29e6c]
PUSH 0x407
PUSH EAX
CALL 0x0008b620
(translation_unit "void FUN_0018f920(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018f920(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018f920(int *param_1,int *param_2)" identifier (parameter_list "(int *param_1,int *param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (expression_statement "FUN_00058c4e();" (call_expression "FUN_00058c4e()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "bVar2 = *(byte *)((int)param_1 + 0x2a);" (assignment_expression "bVar2 = *(byte *)((int)param_1 + 0x2a)" identifier = (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" if (parenthesized_expression "((*param_1 != iVar1) && ((bVar2 & 0x20) == 0))" ( (binary_expression "(*param_1 != iVar1) && ((bVar2 & 0x20) == 0)" (parenthesized_expression "(*param_1 != iVar1)" ( (binary_expression "*param_1 != iVar1" (pointer_expression "*param_1" * identifier) != identifier) )) && (parenthesized_expression "((bVar2 & 0x20) == 0)" ( (binary_expression "(bVar2 & 0x20) == 0" (parenthesized_expression "(bVar2 & 0x20)" ( (binary_expression "bVar2 & 0x20" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" identifier (argument_list "(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar2 & 7) == 0)" ( (binary_expression "(bVar2 & 7) == 0" (parenthesized_expression "(bVar2 & 7)" ( (binary_expression "bVar2 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }" { (if_statement "if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;" if (parenthesized_expression "((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0))" ( (binary_expression "(param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" ( (binary_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)((int)param_1 + 0x2b) & 0x20" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)) }) (else_clause "else if ((bVar2 & 7) != 4) goto LAB_0018f978;" else (if_statement "if ((bVar2 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar2 & 7) != 4)" ( (binary_expression "(bVar2 & 7) != 4" (parenthesized_expression "(bVar2 & 7)" ( (binary_expression "bVar2 & 7" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)))) (if_statement "if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0))" ( (binary_expression "((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)" (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0xb) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 1)" ( (binary_expression "*(byte *)(param_1 + 0xb) & 1" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 2) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0xb) & 2) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 2)" ( (binary_expression "*(byte *)(param_1 + 0xb) & 2" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" { (expression_statement "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;" (assignment_expression "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) | (binary_expression "(*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (parenthesized_expression "(*(byte *)(param_1 + 10) >> 4 == 2)" ( (binary_expression "*(byte *)(param_1 + 10) >> 4 == 2" (binary_expression "*(byte *)(param_1 + 10) >> 4" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) >> number_literal) == number_literal) )) * (char_literal "'\x02'" ' escape_sequence '))) | number_literal)) ;) })) (labeled_statement "LAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" statement_identifier : (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" identifier = (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) | (binary_expression "*(byte *)((int)param_1 + 0x2a) & 0xf8" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal))) ;)) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7" identifier = (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) (if_statement "if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "(bVar3 < 3)" ( (binary_expression "bVar3 < 3" identifier < number_literal) )) (compound_statement "{\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }" { (expression_statement "param_1[2] = param_2[2];" (assignment_expression "param_1[2] = param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = param_2[3];" (assignment_expression "param_1[3] = param_2[3]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) }) (else_clause "else if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" else (if_statement "if (4 < bVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" identifier (argument_list "(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })))) (if_statement "if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }" if (parenthesized_expression "(*param_1 == iVar1)" ( (binary_expression "*param_1 == iVar1" (pointer_expression "*param_1" * identifier) == identifier) )) (compound_statement "{\n    param_1[1] = param_2[1];\n  }" { (expression_statement "param_1[1] = param_2[1];" (assignment_expression "param_1[1] = param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) })) (expression_statement "bVar3 = *(byte *)(param_2 + 10);" (assignment_expression "bVar3 = *(byte *)(param_2 + 10)" identifier = (pointer_expression "*(byte *)(param_2 + 10)" * (cast_expression "(byte *)(param_2 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 10)" ( (binary_expression "param_2 + 10" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;" (assignment_expression "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (binary_expression "*(byte *)(param_1 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) & number_literal) | (binary_expression "bVar3 & 0xf" identifier & number_literal))) ;) (expression_statement "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;" (assignment_expression "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = (binary_expression "bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (binary_expression "bVar3 & 0xf" identifier & number_literal) | (binary_expression "*(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_2 + 10)" * (cast_expression "(byte *)(param_2 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 10)" ( (binary_expression "param_2 + 10" identifier + number_literal) )))) & number_literal))) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x29)" * (cast_expression "(byte *)((int)param_2 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x29)" ( (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" if (parenthesized_expression "((bVar3 & 3) != 0)" ( (binary_expression "(bVar3 & 3) != 0" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" { (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29);" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" if (parenthesized_expression "(((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3)))" ( (binary_expression "((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))" (parenthesized_expression "((bVar4 & 3) == 0)" ( (binary_expression "(bVar4 & 3) == 0" (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((bVar3 & 3) < (bVar4 & 3))" ( (binary_expression "(bVar3 & 3) < (bVar4 & 3)" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) < (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) ))) ))) )) (compound_statement "{\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" { (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar3 & 3 | bVar4 & 0xfc" (binary_expression "bVar3 & 3" identifier & number_literal) | (binary_expression "bVar4 & 0xfc" identifier & number_literal))) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x29)" * (cast_expression "(byte *)((int)param_2 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x29)" ( (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) })) })) (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29) & 3;" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29) & 3" identifier = (binary_expression "*(byte *)((int)param_1 + 0x29) & 3" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar3 & 0xfc | bVar4" (binary_expression "bVar3 & 0xfc" identifier & number_literal) | identifier)) ;) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar2 | 0x80" identifier | number_literal)) ;) (expression_statement "bVar3 = bVar2 | 0xc0;" (assignment_expression "bVar3 = bVar2 | 0xc0" identifier = (binary_expression "bVar2 | 0xc0" identifier | number_literal)) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40) == 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40)" ( (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x40" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar3 = bVar2 | 0x80;\n  }" { (expression_statement "bVar3 = bVar2 | 0x80;" (assignment_expression "bVar3 = bVar2 | 0x80" identifier = (binary_expression "bVar2 | 0x80" identifier | number_literal)) ;) })) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar3;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar3" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2b) & 2) != 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2b) & 2) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2b) & 2)" ( (binary_expression "*(byte *)((int)param_2 + 0x2b) & 2" (pointer_expression "*(byte *)((int)param_2 + 0x2b)" * (cast_expression "(byte *)((int)param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2b)" ( (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" { (expression_statement "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;" (assignment_expression "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "*(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) | number_literal)) ;) })) (expression_statement "bVar2 = *(byte *)(param_2 + 0xb);" (assignment_expression "bVar2 = *(byte *)(param_2 + 0xb)" identifier = (pointer_expression "*(byte *)(param_2 + 0xb)" * (cast_expression "(byte *)(param_2 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xb)" ( (binary_expression "param_2 + 0xb" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" identifier = (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) | (binary_expression "bVar2 & 4" identifier & number_literal))) ;) (expression_statement "*(byte *)(param_1 + 0xb) = bVar3;" (assignment_expression "*(byte *)(param_1 + 0xb) = bVar3" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10)" ( (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x10" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" identifier (argument_list "(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if (param_2[6] != -1) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" if (parenthesized_expression "(param_2[6] != -1)" ( (binary_expression "param_2[6] != -1" (subscript_expression "param_2[6]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , (binary_expression "bVar2 & 4" identifier & number_literal) ))) ;) })) (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2b);" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2b)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x2b)" * (cast_expression "(byte *)((int)param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2b)" ( (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((bVar2 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "((bVar2 & 4) != 0)" ( (binary_expression "(bVar2 & 4) != 0" (parenthesized_expression "(bVar2 & 4)" ( (binary_expression "bVar2 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" if (parenthesized_expression "((bVar2 & 8) != 0)" ( (binary_expression "(bVar2 & 8) != 0" (parenthesized_expression "(bVar2 & 8)" ( (binary_expression "bVar2 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" if (parenthesized_expression "((bVar2 & 0x10) != 0)" ( (binary_expression "(bVar2 & 0x10) != 0" (parenthesized_expression "(bVar2 & 0x10)" ( (binary_expression "bVar2 & 0x10" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" { comment (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */\n/* DWARF original prototype: void override_base_with_special(Symbol * this, Symbol * from) */\n\nvoid __thiscall gold::Symbol::override_base_with_special(Symbol *this,Symbol *from)\n\n{\n  byte bVar1;\n  char *pcVar2;\n  byte bVar3;\n  byte bVar4;\n  \n  pcVar2 = from->name_;\n  bVar3 = this->field_0x2a;\n  if ((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");\n  }\n  if ((bVar3 & 7) == 0) {\n    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar3 & 7) != 4) goto LAB_0018f978;\n  if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {\n    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;\n  this->field_0x2a = bVar3;\n  bVar4 = from->field_0x2a & 7;\n  if (bVar4 < 3) {\n    this->u1_ = from->u1_;\n    this->u2_ = from->u2_;\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }\n  if (this->name_ == pcVar2) {\n    this->version_ = from->version_;\n  }\n  bVar4 = from->field_0x28 & 0xf;\n  this->field_0x28 = this->field_0x28 & 0xf0 | bVar4;\n  this->field_0x28 = bVar4 | from->field_0x28 & 0xf0;\n  bVar4 = from->field_0x29;\n  if ((bVar4 & 3) != 0) {\n    bVar1 = this->field_0x29;\n    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }\n  }\n  this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3;\n  this->field_0x2a = bVar3 | 0x80;\n  bVar4 = bVar3 | 0xc0;\n  if ((from->field_0x2a & 0x40) == 0) {\n    bVar4 = bVar3 | 0x80;\n  }\n  this->field_0x2a = bVar4;\n  if ((from->field_0x2b & 2) != 0) {\n    this->field_0x2b = this->field_0x2b | 2;\n  }\n  this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;\n  if ((from->field_0x2a & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");\n  }\n  if (from->plt_offset_ != 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");\n  }\n  bVar3 = from->field_0x2b;\n  if ((bVar3 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");\n  }\n  if ((bVar3 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");\n  }\n  if ((bVar3 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");\n  }\n  return;\n}\n\n" comment comment (function_definition "void __thiscall gold::Symbol::override_base_with_special(Symbol *this,Symbol *from)\n\n{\n  byte bVar1;\n  char *pcVar2;\n  byte bVar3;\n  byte bVar4;\n  \n  pcVar2 = from->name_;\n  bVar3 = this->field_0x2a;\n  if ((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");\n  }\n  if ((bVar3 & 7) == 0) {\n    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar3 & 7) != 4) goto LAB_0018f978;\n  if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {\n    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;\n  this->field_0x2a = bVar3;\n  bVar4 = from->field_0x2a & 7;\n  if (bVar4 < 3) {\n    this->u1_ = from->u1_;\n    this->u2_ = from->u2_;\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }\n  if (this->name_ == pcVar2) {\n    this->version_ = from->version_;\n  }\n  bVar4 = from->field_0x28 & 0xf;\n  this->field_0x28 = this->field_0x28 & 0xf0 | bVar4;\n  this->field_0x28 = bVar4 | from->field_0x28 & 0xf0;\n  bVar4 = from->field_0x29;\n  if ((bVar4 & 3) != 0) {\n    bVar1 = this->field_0x29;\n    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }\n  }\n  this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3;\n  this->field_0x2a = bVar3 | 0x80;\n  bVar4 = bVar3 | 0xc0;\n  if ((from->field_0x2a & 0x40) == 0) {\n    bVar4 = bVar3 | 0x80;\n  }\n  this->field_0x2a = bVar4;\n  if ((from->field_0x2b & 2) != 0) {\n    this->field_0x2b = this->field_0x2b | 2;\n  }\n  this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;\n  if ((from->field_0x2a & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");\n  }\n  if (from->plt_offset_ != 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");\n  }\n  bVar3 = from->field_0x2b;\n  if ((bVar3 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");\n  }\n  if ((bVar3 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");\n  }\n  if ((bVar3 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Symbol::" identifier : : identifier : :) (function_declarator "override_base_with_special(Symbol *this,Symbol *from)" identifier (parameter_list "(Symbol *this,Symbol *from)" ( (parameter_declaration "Symbol *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol *from" type_identifier (pointer_declarator "*from" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  char *pcVar2;\n  byte bVar3;\n  byte bVar4;\n  \n  pcVar2 = from->name_;\n  bVar3 = this->field_0x2a;\n  if ((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");\n  }\n  if ((bVar3 & 7) == 0) {\n    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar3 & 7) != 4) goto LAB_0018f978;\n  if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {\n    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;\n  this->field_0x2a = bVar3;\n  bVar4 = from->field_0x2a & 7;\n  if (bVar4 < 3) {\n    this->u1_ = from->u1_;\n    this->u2_ = from->u2_;\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }\n  if (this->name_ == pcVar2) {\n    this->version_ = from->version_;\n  }\n  bVar4 = from->field_0x28 & 0xf;\n  this->field_0x28 = this->field_0x28 & 0xf0 | bVar4;\n  this->field_0x28 = bVar4 | from->field_0x28 & 0xf0;\n  bVar4 = from->field_0x29;\n  if ((bVar4 & 3) != 0) {\n    bVar1 = this->field_0x29;\n    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }\n  }\n  this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3;\n  this->field_0x2a = bVar3 | 0x80;\n  bVar4 = bVar3 | 0xc0;\n  if ((from->field_0x2a & 0x40) == 0) {\n    bVar4 = bVar3 | 0x80;\n  }\n  this->field_0x2a = bVar4;\n  if ((from->field_0x2b & 2) != 0) {\n    this->field_0x2b = this->field_0x2b | 2;\n  }\n  this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;\n  if ((from->field_0x2a & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");\n  }\n  if (from->plt_offset_ != 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");\n  }\n  bVar3 = from->field_0x2b;\n  if ((bVar3 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");\n  }\n  if ((bVar3 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");\n  }\n  if ((bVar3 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (expression_statement "pcVar2 = from->name_;" (assignment_expression "pcVar2 = from->name_" identifier = (field_expression "from->name_" identifier -> field_identifier)) ;) (expression_statement "bVar3 = this->field_0x2a;" (assignment_expression "bVar3 = this->field_0x2a" identifier = (field_expression "this->field_0x2a" identifier -> field_identifier)) ;) (if_statement "if ((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");\n  }" if (parenthesized_expression "((this->name_ != pcVar2) && ((bVar3 & 0x20) == 0))" ( (binary_expression "(this->name_ != pcVar2) && ((bVar3 & 0x20) == 0)" (parenthesized_expression "(this->name_ != pcVar2)" ( (binary_expression "this->name_ != pcVar2" (field_expression "this->name_" identifier -> field_identifier) != identifier) )) && (parenthesized_expression "((bVar3 & 0x20) == 0)" ( (binary_expression "(bVar3 & 0x20) == 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x407,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x407,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (if_statement "if ((bVar3 & 7) == 0) {\n    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar3 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar3 & 7) == 0)" ( (binary_expression "(bVar3 & 7) == 0" (parenthesized_expression "(bVar3 & 7)" ( (binary_expression "bVar3 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;\n  }" { (if_statement "if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;" if (parenthesized_expression "(((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0))" ( (binary_expression "((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)" (parenthesized_expression "((this->u2_).shndx != 0)" ( (binary_expression "(this->u2_).shndx != 0" (field_expression "(this->u2_).shndx" (parenthesized_expression "(this->u2_)" ( (field_expression "this->u2_" identifier -> field_identifier) )) . field_identifier) != number_literal) )) || (parenthesized_expression "((this->field_0x2b & 0x20) == 0)" ( (binary_expression "(this->field_0x2b & 0x20) == 0" (parenthesized_expression "(this->field_0x2b & 0x20)" ( (binary_expression "this->field_0x2b & 0x20" (field_expression "this->field_0x2b" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)) }) (else_clause "else if ((bVar3 & 7) != 4) goto LAB_0018f978;" else (if_statement "if ((bVar3 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar3 & 7) != 4)" ( (binary_expression "(bVar3 & 7) != 4" (parenthesized_expression "(bVar3 & 7)" ( (binary_expression "bVar3 & 7" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)))) (if_statement "if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {\n    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;\n  }" if (parenthesized_expression "(((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0))" ( (binary_expression "((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)" (parenthesized_expression "((this->field_0x2c & 1) == 0)" ( (binary_expression "(this->field_0x2c & 1) == 0" (parenthesized_expression "(this->field_0x2c & 1)" ( (binary_expression "this->field_0x2c & 1" (field_expression "this->field_0x2c" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((this->field_0x2c & 2) != 0)" ( (binary_expression "(this->field_0x2c & 2) != 0" (parenthesized_expression "(this->field_0x2c & 2)" ( (binary_expression "this->field_0x2c & 2" (field_expression "this->field_0x2c" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;\n  }" { (expression_statement "this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1;" (assignment_expression "this->field_0x2c = this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1" (field_expression "this->field_0x2c" identifier -> field_identifier) = (binary_expression "this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02' | 1" (binary_expression "this->field_0x2c & 0xfd | ((byte)this->field_0x28 >> 4 == 2) * '\x02'" (binary_expression "this->field_0x2c & 0xfd" (field_expression "this->field_0x2c" identifier -> field_identifier) & number_literal) | (binary_expression "((byte)this->field_0x28 >> 4 == 2) * '\x02'" (parenthesized_expression "((byte)this->field_0x28 >> 4 == 2)" ( (binary_expression "(byte)this->field_0x28 >> 4 == 2" (binary_expression "(byte)this->field_0x28 >> 4" (cast_expression "(byte)this->field_0x28" ( (type_descriptor "byte" type_identifier) ) (field_expression "this->field_0x28" identifier -> field_identifier)) >> number_literal) == number_literal) )) * (char_literal "'\x02'" ' escape_sequence '))) | number_literal)) ;) })) (labeled_statement "LAB_0018f978:\n  bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;" statement_identifier : (expression_statement "bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;" (assignment_expression "bVar3 = from->field_0x2a & 7 | this->field_0x2a & 0xf8" identifier = (binary_expression "from->field_0x2a & 7 | this->field_0x2a & 0xf8" (binary_expression "from->field_0x2a & 7" (field_expression "from->field_0x2a" identifier -> field_identifier) & number_literal) | (binary_expression "this->field_0x2a & 0xf8" (field_expression "this->field_0x2a" identifier -> field_identifier) & number_literal))) ;)) (expression_statement "this->field_0x2a = bVar3;" (assignment_expression "this->field_0x2a = bVar3" (field_expression "this->field_0x2a" identifier -> field_identifier) = identifier) ;) (expression_statement "bVar4 = from->field_0x2a & 7;" (assignment_expression "bVar4 = from->field_0x2a & 7" identifier = (binary_expression "from->field_0x2a & 7" (field_expression "from->field_0x2a" identifier -> field_identifier) & number_literal)) ;) (if_statement "if (bVar4 < 3) {\n    this->u1_ = from->u1_;\n    this->u2_ = from->u2_;\n  }\n  else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }" if (parenthesized_expression "(bVar4 < 3)" ( (binary_expression "bVar4 < 3" identifier < number_literal) )) (compound_statement "{\n    this->u1_ = from->u1_;\n    this->u2_ = from->u2_;\n  }" { (expression_statement "this->u1_ = from->u1_;" (assignment_expression "this->u1_ = from->u1_" (field_expression "this->u1_" identifier -> field_identifier) = (field_expression "from->u1_" identifier -> field_identifier)) ;) (expression_statement "this->u2_ = from->u2_;" (assignment_expression "this->u2_ = from->u2_" (field_expression "this->u2_" identifier -> field_identifier) = (field_expression "from->u2_" identifier -> field_identifier)) ;) }) (else_clause "else if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }" else (if_statement "if (4 < bVar4) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }" if (parenthesized_expression "(4 < bVar4)" ( (binary_expression "4 < bVar4" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x41a,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x41a,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })))) (if_statement "if (this->name_ == pcVar2) {\n    this->version_ = from->version_;\n  }" if (parenthesized_expression "(this->name_ == pcVar2)" ( (binary_expression "this->name_ == pcVar2" (field_expression "this->name_" identifier -> field_identifier) == identifier) )) (compound_statement "{\n    this->version_ = from->version_;\n  }" { (expression_statement "this->version_ = from->version_;" (assignment_expression "this->version_ = from->version_" (field_expression "this->version_" identifier -> field_identifier) = (field_expression "from->version_" identifier -> field_identifier)) ;) })) (expression_statement "bVar4 = from->field_0x28 & 0xf;" (assignment_expression "bVar4 = from->field_0x28 & 0xf" identifier = (binary_expression "from->field_0x28 & 0xf" (field_expression "from->field_0x28" identifier -> field_identifier) & number_literal)) ;) (expression_statement "this->field_0x28 = this->field_0x28 & 0xf0 | bVar4;" (assignment_expression "this->field_0x28 = this->field_0x28 & 0xf0 | bVar4" (field_expression "this->field_0x28" identifier -> field_identifier) = (binary_expression "this->field_0x28 & 0xf0 | bVar4" (binary_expression "this->field_0x28 & 0xf0" (field_expression "this->field_0x28" identifier -> field_identifier) & number_literal) | identifier)) ;) (expression_statement "this->field_0x28 = bVar4 | from->field_0x28 & 0xf0;" (assignment_expression "this->field_0x28 = bVar4 | from->field_0x28 & 0xf0" (field_expression "this->field_0x28" identifier -> field_identifier) = (binary_expression "bVar4 | from->field_0x28 & 0xf0" identifier | (binary_expression "from->field_0x28 & 0xf0" (field_expression "from->field_0x28" identifier -> field_identifier) & number_literal))) ;) (expression_statement "bVar4 = from->field_0x29;" (assignment_expression "bVar4 = from->field_0x29" identifier = (field_expression "from->field_0x29" identifier -> field_identifier)) ;) (if_statement "if ((bVar4 & 3) != 0) {\n    bVar1 = this->field_0x29;\n    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }\n  }" if (parenthesized_expression "((bVar4 & 3) != 0)" ( (binary_expression "(bVar4 & 3) != 0" (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    bVar1 = this->field_0x29;\n    if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }\n  }" { (expression_statement "bVar1 = this->field_0x29;" (assignment_expression "bVar1 = this->field_0x29" identifier = (field_expression "this->field_0x29" identifier -> field_identifier)) ;) (if_statement "if (((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))) {\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }" if (parenthesized_expression "(((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3)))" ( (binary_expression "((bVar1 & 3) == 0) || ((bVar4 & 3) < (bVar1 & 3))" (parenthesized_expression "((bVar1 & 3) == 0)" ( (binary_expression "(bVar1 & 3) == 0" (parenthesized_expression "(bVar1 & 3)" ( (binary_expression "bVar1 & 3" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((bVar4 & 3) < (bVar1 & 3))" ( (binary_expression "(bVar4 & 3) < (bVar1 & 3)" (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) )) < (parenthesized_expression "(bVar1 & 3)" ( (binary_expression "bVar1 & 3" identifier & number_literal) ))) ))) )) (compound_statement "{\n      this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;\n      bVar4 = from->field_0x29;\n    }" { (expression_statement "this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc;" (assignment_expression "this->field_0x29 = bVar4 & 3 | bVar1 & 0xfc" (field_expression "this->field_0x29" identifier -> field_identifier) = (binary_expression "bVar4 & 3 | bVar1 & 0xfc" (binary_expression "bVar4 & 3" identifier & number_literal) | (binary_expression "bVar1 & 0xfc" identifier & number_literal))) ;) (expression_statement "bVar4 = from->field_0x29;" (assignment_expression "bVar4 = from->field_0x29" identifier = (field_expression "from->field_0x29" identifier -> field_identifier)) ;) })) })) (expression_statement "this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3;" (assignment_expression "this->field_0x29 = bVar4 & 0xfc | this->field_0x29 & 3" (field_expression "this->field_0x29" identifier -> field_identifier) = (binary_expression "bVar4 & 0xfc | this->field_0x29 & 3" (binary_expression "bVar4 & 0xfc" identifier & number_literal) | (binary_expression "this->field_0x29 & 3" (field_expression "this->field_0x29" identifier -> field_identifier) & number_literal))) ;) (expression_statement "this->field_0x2a = bVar3 | 0x80;" (assignment_expression "this->field_0x2a = bVar3 | 0x80" (field_expression "this->field_0x2a" identifier -> field_identifier) = (binary_expression "bVar3 | 0x80" identifier | number_literal)) ;) (expression_statement "bVar4 = bVar3 | 0xc0;" (assignment_expression "bVar4 = bVar3 | 0xc0" identifier = (binary_expression "bVar3 | 0xc0" identifier | number_literal)) ;) (if_statement "if ((from->field_0x2a & 0x40) == 0) {\n    bVar4 = bVar3 | 0x80;\n  }" if (parenthesized_expression "((from->field_0x2a & 0x40) == 0)" ( (binary_expression "(from->field_0x2a & 0x40) == 0" (parenthesized_expression "(from->field_0x2a & 0x40)" ( (binary_expression "from->field_0x2a & 0x40" (field_expression "from->field_0x2a" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar4 = bVar3 | 0x80;\n  }" { (expression_statement "bVar4 = bVar3 | 0x80;" (assignment_expression "bVar4 = bVar3 | 0x80" identifier = (binary_expression "bVar3 | 0x80" identifier | number_literal)) ;) })) (expression_statement "this->field_0x2a = bVar4;" (assignment_expression "this->field_0x2a = bVar4" (field_expression "this->field_0x2a" identifier -> field_identifier) = identifier) ;) (if_statement "if ((from->field_0x2b & 2) != 0) {\n    this->field_0x2b = this->field_0x2b | 2;\n  }" if (parenthesized_expression "((from->field_0x2b & 2) != 0)" ( (binary_expression "(from->field_0x2b & 2) != 0" (parenthesized_expression "(from->field_0x2b & 2)" ( (binary_expression "from->field_0x2b & 2" (field_expression "from->field_0x2b" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    this->field_0x2b = this->field_0x2b | 2;\n  }" { (expression_statement "this->field_0x2b = this->field_0x2b | 2;" (assignment_expression "this->field_0x2b = this->field_0x2b | 2" (field_expression "this->field_0x2b" identifier -> field_identifier) = (binary_expression "this->field_0x2b | 2" (field_expression "this->field_0x2b" identifier -> field_identifier) | number_literal)) ;) })) (expression_statement "this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;" (assignment_expression "this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4" (field_expression "this->field_0x2c" identifier -> field_identifier) = (binary_expression "this->field_0x2c & 0xfb | from->field_0x2c & 4" (binary_expression "this->field_0x2c & 0xfb" (field_expression "this->field_0x2c" identifier -> field_identifier) & number_literal) | (binary_expression "from->field_0x2c & 4" (field_expression "from->field_0x2c" identifier -> field_identifier) & number_literal))) ;) (if_statement "if ((from->field_0x2a & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");\n  }" if (parenthesized_expression "((from->field_0x2a & 0x10) != 0)" ( (binary_expression "(from->field_0x2a & 0x10) != 0" (parenthesized_expression "(from->field_0x2a & 0x10)" ( (binary_expression "from->field_0x2a & 0x10" (field_expression "from->field_0x2a" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x439,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x439,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (if_statement "if (from->plt_offset_ != 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");\n  }" if (parenthesized_expression "(from->plt_offset_ != 0xffffffff)" ( (binary_expression "from->plt_offset_ != 0xffffffff" (field_expression "from->plt_offset_" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x43a,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x43a,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (expression_statement "bVar3 = from->field_0x2b;" (assignment_expression "bVar3 = from->field_0x2b" identifier = (field_expression "from->field_0x2b" identifier -> field_identifier)) ;) (if_statement "if ((bVar3 & 4) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");\n  }" if (parenthesized_expression "((bVar3 & 4) != 0)" ( (binary_expression "(bVar3 & 4) != 0" (parenthesized_expression "(bVar3 & 4)" ( (binary_expression "bVar3 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x43b,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x43b,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (if_statement "if ((bVar3 & 8) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");\n  }" if (parenthesized_expression "((bVar3 & 8) != 0)" ( (binary_expression "(bVar3 & 8) != 0" (parenthesized_expression "(bVar3 & 8)" ( (binary_expression "bVar3 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x43c,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x43c,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (if_statement "if ((bVar3 & 0x10) != 0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");\n  }" if (parenthesized_expression "((bVar3 & 0x10) != 0)" ( (binary_expression "(bVar3 & 0x10) != 0" (parenthesized_expression "(bVar3 & 0x10)" ( (binary_expression "bVar3 & 0x10" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special");" (call_expression "do_gold_unreachable("../../gold/resolve.cc",0x43d,"override_base_with_special")" identifier (argument_list "("../../gold/resolve.cc",0x43d,"override_base_with_special")" ( (string_literal ""../../gold/resolve.cc"" " string_content ") , number_literal , (string_literal ""override_base_with_special"" " string_content ") ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0018f920(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0018f920(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0018f920(int *param_1,int *param_2)" identifier (parameter_list "(int *param_1,int *param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int unaff_EBP;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (expression_statement "FUN_00058c4e();" (call_expression "FUN_00058c4e()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "bVar2 = *(byte *)((int)param_1 + 0x2a);" (assignment_expression "bVar2 = *(byte *)((int)param_1 + 0x2a)" identifier = (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" if (parenthesized_expression "((*param_1 != iVar1) && ((bVar2 & 0x20) == 0))" ( (binary_expression "(*param_1 != iVar1) && ((bVar2 & 0x20) == 0)" (parenthesized_expression "(*param_1 != iVar1)" ( (binary_expression "*param_1 != iVar1" (pointer_expression "*param_1" * identifier) != identifier) )) && (parenthesized_expression "((bVar2 & 0x20) == 0)" ( (binary_expression "(bVar2 & 0x20) == 0" (parenthesized_expression "(bVar2 & 0x20)" ( (binary_expression "bVar2 & 0x20" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" identifier (argument_list "(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar2 & 7) == 0)" ( (binary_expression "(bVar2 & 7) == 0" (parenthesized_expression "(bVar2 & 7)" ( (binary_expression "bVar2 & 7" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }" { (if_statement "if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;" if (parenthesized_expression "((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0))" ( (binary_expression "(param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" (parenthesized_expression "(param_1[3] != 0)" ( (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) != number_literal) )) || (parenthesized_expression "((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" ( (binary_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20)" ( (binary_expression "*(byte *)((int)param_1 + 0x2b) & 0x20" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)) }) (else_clause "else if ((bVar2 & 7) != 4) goto LAB_0018f978;" else (if_statement "if ((bVar2 & 7) != 4) goto LAB_0018f978;" if (parenthesized_expression "((bVar2 & 7) != 4)" ( (binary_expression "(bVar2 & 7) != 4" (parenthesized_expression "(bVar2 & 7)" ( (binary_expression "bVar2 & 7" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0018f978;" goto statement_identifier ;)))) (if_statement "if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0))" ( (binary_expression "((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)" (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0xb) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 1)" ( (binary_expression "*(byte *)(param_1 + 0xb) & 1" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 2) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0xb) & 2) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 2)" ( (binary_expression "*(byte *)(param_1 + 0xb) & 2" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" { (expression_statement "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;" (assignment_expression "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) | (binary_expression "(*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (parenthesized_expression "(*(byte *)(param_1 + 10) >> 4 == 2)" ( (binary_expression "*(byte *)(param_1 + 10) >> 4 == 2" (binary_expression "*(byte *)(param_1 + 10) >> 4" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) >> number_literal) == number_literal) )) * (char_literal "'\x02'" ' escape_sequence '))) | number_literal)) ;) })) (labeled_statement "LAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" statement_identifier : (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" identifier = (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) | (binary_expression "*(byte *)((int)param_1 + 0x2a) & 0xf8" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal))) ;)) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7" identifier = (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) (if_statement "if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "(bVar3 < 3)" ( (binary_expression "bVar3 < 3" identifier < number_literal) )) (compound_statement "{\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }" { (expression_statement "param_1[2] = param_2[2];" (assignment_expression "param_1[2] = param_2[2]" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "param_1[3] = param_2[3];" (assignment_expression "param_1[3] = param_2[3]" (subscript_expression "param_1[3]" identifier [ number_literal ]) = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) }) (else_clause "else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" else (if_statement "if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "(4 < bVar3)" ( (binary_expression "4 < bVar3" number_literal < identifier) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" identifier (argument_list "(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })))) (if_statement "if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }" if (parenthesized_expression "(*param_1 == iVar1)" ( (binary_expression "*param_1 == iVar1" (pointer_expression "*param_1" * identifier) == identifier) )) (compound_statement "{\n    param_1[1] = param_2[1];\n  }" { (expression_statement "param_1[1] = param_2[1];" (assignment_expression "param_1[1] = param_2[1]" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) })) (expression_statement "bVar3 = *(byte *)(param_2 + 10);" (assignment_expression "bVar3 = *(byte *)(param_2 + 10)" identifier = (pointer_expression "*(byte *)(param_2 + 10)" * (cast_expression "(byte *)(param_2 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 10)" ( (binary_expression "param_2 + 10" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;" (assignment_expression "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (binary_expression "*(byte *)(param_1 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) & number_literal) | (binary_expression "bVar3 & 0xf" identifier & number_literal))) ;) (expression_statement "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;" (assignment_expression "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" * (cast_expression "(byte *)(param_1 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 10)" ( (binary_expression "param_1 + 10" identifier + number_literal) )))) = (binary_expression "bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (binary_expression "bVar3 & 0xf" identifier & number_literal) | (binary_expression "*(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_2 + 10)" * (cast_expression "(byte *)(param_2 + 10)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 10)" ( (binary_expression "param_2 + 10" identifier + number_literal) )))) & number_literal))) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x29)" * (cast_expression "(byte *)((int)param_2 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x29)" ( (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" if (parenthesized_expression "((bVar3 & 3) != 0)" ( (binary_expression "(bVar3 & 3) != 0" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" { (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29);" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" if (parenthesized_expression "(((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3)))" ( (binary_expression "((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))" (parenthesized_expression "((bVar4 & 3) == 0)" ( (binary_expression "(bVar4 & 3) == 0" (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((bVar3 & 3) < (bVar4 & 3))" ( (binary_expression "(bVar3 & 3) < (bVar4 & 3)" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) < (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) ))) ))) )) (compound_statement "{\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" { (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar3 & 3 | bVar4 & 0xfc" (binary_expression "bVar3 & 3" identifier & number_literal) | (binary_expression "bVar4 & 0xfc" identifier & number_literal))) ;) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x29)" * (cast_expression "(byte *)((int)param_2 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x29)" ( (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) })) })) (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29) & 3;" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29) & 3" identifier = (binary_expression "*(byte *)((int)param_1 + 0x29) & 3" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4" (pointer_expression "*(byte *)((int)param_1 + 0x29)" * (cast_expression "(byte *)((int)param_1 + 0x29)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x29)" ( (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar3 & 0xfc | bVar4" (binary_expression "bVar3 & 0xfc" identifier & number_literal) | identifier)) ;) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "bVar2 | 0x80" identifier | number_literal)) ;) (expression_statement "bVar3 = bVar2 | 0xc0;" (assignment_expression "bVar3 = bVar2 | 0xc0" identifier = (binary_expression "bVar2 | 0xc0" identifier | number_literal)) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40) == 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40)" ( (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x40" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    bVar3 = bVar2 | 0x80;\n  }" { (expression_statement "bVar3 = bVar2 | 0x80;" (assignment_expression "bVar3 = bVar2 | 0x80" identifier = (binary_expression "bVar2 | 0x80" identifier | number_literal)) ;) })) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar3;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar3" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" * (cast_expression "(byte *)((int)param_1 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2a)" ( (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2b) & 2) != 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2b) & 2) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2b) & 2)" ( (binary_expression "*(byte *)((int)param_2 + 0x2b) & 2" (pointer_expression "*(byte *)((int)param_2 + 0x2b)" * (cast_expression "(byte *)((int)param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2b)" ( (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" { (expression_statement "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;" (assignment_expression "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "*(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" * (cast_expression "(byte *)((int)param_1 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x2b)" ( (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) | number_literal)) ;) })) (expression_statement "bVar2 = *(byte *)(param_2 + 0xb);" (assignment_expression "bVar2 = *(byte *)(param_2 + 0xb)" identifier = (pointer_expression "*(byte *)(param_2 + 0xb)" * (cast_expression "(byte *)(param_2 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xb)" ( (binary_expression "param_2 + 0xb" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" identifier = (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) & number_literal) | (binary_expression "bVar2 & 4" identifier & number_literal))) ;) (expression_statement "*(byte *)(param_1 + 0xb) = bVar3;" (assignment_expression "*(byte *)(param_1 + 0xb) = bVar3" (pointer_expression "*(byte *)(param_1 + 0xb)" * (cast_expression "(byte *)(param_1 + 0xb)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb)" ( (binary_expression "param_1 + 0xb" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" if (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0)" ( (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10)" ( (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x10" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" * (cast_expression "(byte *)((int)param_2 + 0x2a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2a)" ( (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" identifier (argument_list "(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" if (parenthesized_expression "(param_2[6] != -1)" ( (binary_expression "param_2[6] != -1" (subscript_expression "param_2[6]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , (binary_expression "bVar2 & 4" identifier & number_literal) ))) ;) })) (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2b);" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2b)" identifier = (pointer_expression "*(byte *)((int)param_2 + 0x2b)" * (cast_expression "(byte *)((int)param_2 + 0x2b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_2 + 0x2b)" ( (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" if (parenthesized_expression "((bVar2 & 4) != 0)" ( (binary_expression "(bVar2 & 4) != 0" (parenthesized_expression "(bVar2 & 4)" ( (binary_expression "bVar2 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" if (parenthesized_expression "((bVar2 & 8) != 0)" ( (binary_expression "(bVar2 & 8) != 0" (parenthesized_expression "(bVar2 & 8)" ( (binary_expression "bVar2 & 8" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (if_statement "if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" if (parenthesized_expression "((bVar2 & 0x10) != 0)" ( (binary_expression "(bVar2 & 0x10) != 0" (parenthesized_expression "(bVar2 & 0x10)" ( (binary_expression "bVar2 & 0x10" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" { (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" identifier (argument_list "(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" ( (binary_expression "unaff_EBP + 0xd9546" identifier + number_literal) , number_literal , (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" & identifier) + identifier) , identifier ))) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != IDENT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) || (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) ))) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression 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) )))) = (binary_expression (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) == LIT) )) * (char_literal ' escape_sequence '))) | LIT)) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_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) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (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 (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) < (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression IDENT | LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_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 IDENT = (binary_expression IDENT | LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = IDENT) ;) (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 (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) | LIT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (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 (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , (binary_expression IDENT & LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression (pointer_expression & IDENT) + IDENT) , IDENT ))) ;) })) (return_statement return ;) })))
(function_definition "void FUN_0018f920(int *param_1,int *param_2)\n\n{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0018f920(int *param_1,int *param_2)" (identifier "FUN_0018f920") (parameter_list "(int *param_1,int *param_2)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  int iVar1;\n  byte bVar2;\n  byte bVar3;\n  int unaff_EBP;\n  byte bVar4;\n  \n  FUN_00058c4e();\n  iVar1 = *param_2;\n  bVar2 = *(byte *)((int)param_1 + 0x2a);\n  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }\n  if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;\n  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }\nLAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;\n  *(byte *)((int)param_1 + 0x2a) = bVar2;\n  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;\n  if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }\n  bVar3 = *(byte *)(param_2 + 10);\n  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;\n  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;\n  bVar3 = *(byte *)((int)param_2 + 0x29);\n  if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }\n  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;\n  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;\n  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;\n  bVar3 = bVar2 | 0xc0;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }\n  *(byte *)((int)param_1 + 0x2a) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }\n  bVar2 = *(byte *)(param_2 + 0xb);\n  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;\n  *(byte *)(param_1 + 0xb) = bVar3;\n  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }\n  if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }\n  bVar2 = *(byte *)((int)param_2 + 0x2b);\n  if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }\n  if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }\n  if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "int unaff_EBP;" (primitive_type "int") (identifier "unaff_EBP") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (expression_statement "FUN_00058c4e();" (call_expression "FUN_00058c4e()" (identifier "FUN_00058c4e") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar1 = *param_2;" (assignment_expression "iVar1 = *param_2" (identifier "iVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "bVar2 = *(byte *)((int)param_1 + 0x2a);" (assignment_expression "bVar2 = *(byte *)((int)param_1 + 0x2a)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)((int)param_1 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2a)" (( "(") (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2a")) () ")"))))) (; ";")) (if_statement "if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" (if "if") (parenthesized_expression "((*param_1 != iVar1) && ((bVar2 & 0x20) == 0))" (( "(") (binary_expression "(*param_1 != iVar1) && ((bVar2 & 0x20) == 0)" (parenthesized_expression "(*param_1 != iVar1)" (( "(") (binary_expression "*param_1 != iVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (identifier "iVar1")) () ")")) (&& "&&") (parenthesized_expression "((bVar2 & 0x20) == 0)" (( "(") (binary_expression "(bVar2 & 0x20) == 0" (parenthesized_expression "(bVar2 & 0x20)" (( "(") (binary_expression "bVar2 & 0x20" (identifier "bVar2") (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x407") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "iVar1") () ")"))) (; ";")) (} "}"))) (if_statement "if ((bVar2 & 7) == 0) {\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }\n  else if ((bVar2 & 7) != 4) goto LAB_0018f978;" (if "if") (parenthesized_expression "((bVar2 & 7) == 0)" (( "(") (binary_expression "(bVar2 & 7) == 0" (parenthesized_expression "(bVar2 & 7)" (( "(") (binary_expression "bVar2 & 7" (identifier "bVar2") (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;\n  }" ({ "{") (if_statement "if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;" (if "if") (parenthesized_expression "((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0))" (( "(") (binary_expression "(param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" (parenthesized_expression "(param_1[3] != 0)" (( "(") (binary_expression "param_1[3] != 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)" (( "(") (binary_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((int)param_1 + 0x2b) & 0x20)" (( "(") (binary_expression "*(byte *)((int)param_1 + 0x2b) & 0x20" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2b)" (( "(") (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_0018f978;" (goto "goto") (statement_identifier "LAB_0018f978") (; ";"))) (} "}")) (else_clause "else if ((bVar2 & 7) != 4) goto LAB_0018f978;" (else "else") (if_statement "if ((bVar2 & 7) != 4) goto LAB_0018f978;" (if "if") (parenthesized_expression "((bVar2 & 7) != 4)" (( "(") (binary_expression "(bVar2 & 7) != 4" (parenthesized_expression "(bVar2 & 7)" (( "(") (binary_expression "bVar2 & 7" (identifier "bVar2") (& "&") (number_literal "7")) () ")")) (!= "!=") (number_literal "4")) () ")")) (goto_statement "goto LAB_0018f978;" (goto "goto") (statement_identifier "LAB_0018f978") (; ";"))))) (if_statement "if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" (if "if") (parenthesized_expression "(((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0))" (( "(") (binary_expression "((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)" (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0xb) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 1)" (( "(") (binary_expression "*(byte *)(param_1 + 0xb) & 1" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(param_1 + 0xb) & 2) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0xb) & 2) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xb) & 2)" (( "(") (binary_expression "*(byte *)(param_1 + 0xb) & 2" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    *(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;\n  }" ({ "{") (expression_statement "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;" (assignment_expression "*(byte *)(param_1 + 0xb) =\n         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfd" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (& "&") (number_literal "0xfd")) (| "|") (binary_expression "(*(byte *)(param_1 + 10) >> 4 == 2) * '\x02'" (parenthesized_expression "(*(byte *)(param_1 + 10) >> 4 == 2)" (( "(") (binary_expression "*(byte *)(param_1 + 10) >> 4 == 2" (binary_expression "*(byte *)(param_1 + 10) >> 4" (pointer_expression "*(byte *)(param_1 + 10)" (* "*") (cast_expression "(byte *)(param_1 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 10)" (( "(") (binary_expression "param_1 + 10" (identifier "param_1") (+ "+") (number_literal "10")) () ")")))) (>> ">>") (number_literal "4")) (== "==") (number_literal "2")) () ")")) (* "*") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'")))) (| "|") (number_literal "1"))) (; ";")) (} "}"))) (labeled_statement "LAB_0018f978:\n  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" (statement_identifier "LAB_0018f978") (: ":") (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" (identifier "bVar2") (= "=") (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8" (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2a)" (( "(") (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "7")) (| "|") (binary_expression "*(byte *)((int)param_1 + 0x2a) & 0xf8" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2a)" (( "(") (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "0xf8")))) (; ";"))) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2a)" (( "(") (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2a")) () ")")))) (= "=") (identifier "bVar2")) (; ";")) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x2a) & 7" (identifier "bVar3") (= "=") (binary_expression "*(byte *)((int)param_2 + 0x2a) & 7" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2a)" (( "(") (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "7"))) (; ";")) (if_statement "if (bVar3 < 3) {\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }\n  else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" (if "if") (parenthesized_expression "(bVar3 < 3)" (( "(") (binary_expression "bVar3 < 3" (identifier "bVar3") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n    param_1[2] = param_2[2];\n    param_1[3] = param_2[3];\n  }" ({ "{") (expression_statement "param_1[2] = param_2[2];" (assignment_expression "param_1[2] = param_2[2]" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "param_1[3] = param_2[3];" (assignment_expression "param_1[3] = param_2[3]" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]"))) (; ";")) (} "}")) (else_clause "else if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" (else "else") (if_statement "if (4 < bVar3) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" (if "if") (parenthesized_expression "(4 < bVar3)" (( "(") (binary_expression "4 < bVar3" (number_literal "4") (< "<") (identifier "bVar3")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x41a") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "bVar3") () ")"))) (; ";")) (} "}"))))) (if_statement "if (*param_1 == iVar1) {\n    param_1[1] = param_2[1];\n  }" (if "if") (parenthesized_expression "(*param_1 == iVar1)" (( "(") (binary_expression "*param_1 == iVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (identifier "iVar1")) () ")")) (compound_statement "{\n    param_1[1] = param_2[1];\n  }" ({ "{") (expression_statement "param_1[1] = param_2[1];" (assignment_expression "param_1[1] = param_2[1]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}"))) (expression_statement "bVar3 = *(byte *)(param_2 + 10);" (assignment_expression "bVar3 = *(byte *)(param_2 + 10)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)(param_2 + 10)" (* "*") (cast_expression "(byte *)(param_2 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 10)" (( "(") (binary_expression "param_2 + 10" (identifier "param_2") (+ "+") (number_literal "10")) () ")"))))) (; ";")) (expression_statement "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;" (assignment_expression "*(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (pointer_expression "*(byte *)(param_1 + 10)" (* "*") (cast_expression "(byte *)(param_1 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 10)" (( "(") (binary_expression "param_1 + 10" (identifier "param_1") (+ "+") (number_literal "10")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf" (binary_expression "*(byte *)(param_1 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" (* "*") (cast_expression "(byte *)(param_1 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 10)" (( "(") (binary_expression "param_1 + 10" (identifier "param_1") (+ "+") (number_literal "10")) () ")")))) (& "&") (number_literal "0xf0")) (| "|") (binary_expression "bVar3 & 0xf" (identifier "bVar3") (& "&") (number_literal "0xf")))) (; ";")) (expression_statement "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;" (assignment_expression "*(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_1 + 10)" (* "*") (cast_expression "(byte *)(param_1 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 10)" (( "(") (binary_expression "param_1 + 10" (identifier "param_1") (+ "+") (number_literal "10")) () ")")))) (= "=") (binary_expression "bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0" (binary_expression "bVar3 & 0xf" (identifier "bVar3") (& "&") (number_literal "0xf")) (| "|") (binary_expression "*(byte *)(param_2 + 10) & 0xf0" (pointer_expression "*(byte *)(param_2 + 10)" (* "*") (cast_expression "(byte *)(param_2 + 10)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 10)" (( "(") (binary_expression "param_2 + 10" (identifier "param_2") (+ "+") (number_literal "10")) () ")")))) (& "&") (number_literal "0xf0")))) (; ";")) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)((int)param_2 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x29)" (( "(") (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x29")) () ")"))))) (; ";")) (if_statement "if ((bVar3 & 3) != 0) {\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" (if "if") (parenthesized_expression "((bVar3 & 3) != 0)" (( "(") (binary_expression "(bVar3 & 3) != 0" (parenthesized_expression "(bVar3 & 3)" (( "(") (binary_expression "bVar3 & 3" (identifier "bVar3") (& "&") (number_literal "3")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    bVar4 = *(byte *)((int)param_1 + 0x29);\n    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }\n  }" ({ "{") (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29);" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29)" (identifier "bVar4") (= "=") (pointer_expression "*(byte *)((int)param_1 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x29)" (( "(") (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x29")) () ")"))))) (; ";")) (if_statement "if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" (if "if") (parenthesized_expression "(((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3)))" (( "(") (binary_expression "((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))" (parenthesized_expression "((bVar4 & 3) == 0)" (( "(") (binary_expression "(bVar4 & 3) == 0" (parenthesized_expression "(bVar4 & 3)" (( "(") (binary_expression "bVar4 & 3" (identifier "bVar4") (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((bVar3 & 3) < (bVar4 & 3))" (( "(") (binary_expression "(bVar3 & 3) < (bVar4 & 3)" (parenthesized_expression "(bVar3 & 3)" (( "(") (binary_expression "bVar3 & 3" (identifier "bVar3") (& "&") (number_literal "3")) () ")")) (< "<") (parenthesized_expression "(bVar4 & 3)" (( "(") (binary_expression "bVar4 & 3" (identifier "bVar4") (& "&") (number_literal "3")) () ")"))) () ")"))) () ")")) (compound_statement "{\n      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;\n      bVar3 = *(byte *)((int)param_2 + 0x29);\n    }" ({ "{") (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc" (pointer_expression "*(byte *)((int)param_1 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x29)" (( "(") (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x29")) () ")")))) (= "=") (binary_expression "bVar3 & 3 | bVar4 & 0xfc" (binary_expression "bVar3 & 3" (identifier "bVar3") (& "&") (number_literal "3")) (| "|") (binary_expression "bVar4 & 0xfc" (identifier "bVar4") (& "&") (number_literal "0xfc")))) (; ";")) (expression_statement "bVar3 = *(byte *)((int)param_2 + 0x29);" (assignment_expression "bVar3 = *(byte *)((int)param_2 + 0x29)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)((int)param_2 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x29)" (( "(") (binary_expression "(int)param_2 + 0x29" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x29")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (expression_statement "bVar4 = *(byte *)((int)param_1 + 0x29) & 3;" (assignment_expression "bVar4 = *(byte *)((int)param_1 + 0x29) & 3" (identifier "bVar4") (= "=") (binary_expression "*(byte *)((int)param_1 + 0x29) & 3" (pointer_expression "*(byte *)((int)param_1 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x29)" (( "(") (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x29")) () ")")))) (& "&") (number_literal "3"))) (; ";")) (expression_statement "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;" (assignment_expression "*(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4" (pointer_expression "*(byte *)((int)param_1 + 0x29)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x29)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x29)" (( "(") (binary_expression "(int)param_1 + 0x29" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x29")) () ")")))) (= "=") (binary_expression "bVar3 & 0xfc | bVar4" (binary_expression "bVar3 & 0xfc" (identifier "bVar3") (& "&") (number_literal "0xfc")) (| "|") (identifier "bVar4"))) (; ";")) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2a)" (( "(") (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2a")) () ")")))) (= "=") (binary_expression "bVar2 | 0x80" (identifier "bVar2") (| "|") (number_literal "0x80"))) (; ";")) (expression_statement "bVar3 = bVar2 | 0xc0;" (assignment_expression "bVar3 = bVar2 | 0xc0" (identifier "bVar3") (= "=") (binary_expression "bVar2 | 0xc0" (identifier "bVar2") (| "|") (number_literal "0xc0"))) (; ";")) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {\n    bVar3 = bVar2 | 0x80;\n  }" (if "if") (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0)" (( "(") (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40) == 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x40)" (( "(") (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x40" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2a)" (( "(") (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "0x40")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    bVar3 = bVar2 | 0x80;\n  }" ({ "{") (expression_statement "bVar3 = bVar2 | 0x80;" (assignment_expression "bVar3 = bVar2 | 0x80" (identifier "bVar3") (= "=") (binary_expression "bVar2 | 0x80" (identifier "bVar2") (| "|") (number_literal "0x80"))) (; ";")) (} "}"))) (expression_statement "*(byte *)((int)param_1 + 0x2a) = bVar3;" (assignment_expression "*(byte *)((int)param_1 + 0x2a) = bVar3" (pointer_expression "*(byte *)((int)param_1 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2a)" (( "(") (binary_expression "(int)param_1 + 0x2a" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2a")) () ")")))) (= "=") (identifier "bVar3")) (; ";")) (if_statement "if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" (if "if") (parenthesized_expression "((*(byte *)((int)param_2 + 0x2b) & 2) != 0)" (( "(") (binary_expression "(*(byte *)((int)param_2 + 0x2b) & 2) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2b) & 2)" (( "(") (binary_expression "*(byte *)((int)param_2 + 0x2b) & 2" (pointer_expression "*(byte *)((int)param_2 + 0x2b)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2b)" (( "(") (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2b")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;\n  }" ({ "{") (expression_statement "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;" (assignment_expression "*(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2b)" (( "(") (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2b")) () ")")))) (= "=") (binary_expression "*(byte *)((int)param_1 + 0x2b) | 2" (pointer_expression "*(byte *)((int)param_1 + 0x2b)" (* "*") (cast_expression "(byte *)((int)param_1 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x2b)" (( "(") (binary_expression "(int)param_1 + 0x2b" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2b")) () ")")))) (| "|") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "bVar2 = *(byte *)(param_2 + 0xb);" (assignment_expression "bVar2 = *(byte *)(param_2 + 0xb)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(param_2 + 0xb)" (* "*") (cast_expression "(byte *)(param_2 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xb)" (( "(") (binary_expression "param_2 + 0xb" (identifier "param_2") (+ "+") (number_literal "0xb")) () ")"))))) (; ";")) (expression_statement "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;" (assignment_expression "bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" (identifier "bVar3") (= "=") (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4" (binary_expression "*(byte *)(param_1 + 0xb) & 0xfb" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (& "&") (number_literal "0xfb")) (| "|") (binary_expression "bVar2 & 4" (identifier "bVar2") (& "&") (number_literal "4")))) (; ";")) (expression_statement "*(byte *)(param_1 + 0xb) = bVar3;" (assignment_expression "*(byte *)(param_1 + 0xb) = bVar3" (pointer_expression "*(byte *)(param_1 + 0xb)" (* "*") (cast_expression "(byte *)(param_1 + 0xb)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb)" (( "(") (binary_expression "param_1 + 0xb" (identifier "param_1") (+ "+") (number_literal "0xb")) () ")")))) (= "=") (identifier "bVar3")) (; ";")) (if_statement "if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" (if "if") (parenthesized_expression "((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0)" (( "(") (binary_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10) != 0" (parenthesized_expression "(*(byte *)((int)param_2 + 0x2a) & 0x10)" (( "(") (binary_expression "*(byte *)((int)param_2 + 0x2a) & 0x10" (pointer_expression "*(byte *)((int)param_2 + 0x2a)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2a)" (( "(") (binary_expression "(int)param_2 + 0x2a" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2a")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x439") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "bVar4") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2[6] != -1) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" (if "if") (parenthesized_expression "(param_2[6] != -1)" (( "(") (binary_expression "param_2[6] != -1" (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")) (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x43a") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (binary_expression "bVar2 & 4" (identifier "bVar2") (& "&") (number_literal "4")) () ")"))) (; ";")) (} "}"))) (expression_statement "bVar2 = *(byte *)((int)param_2 + 0x2b);" (assignment_expression "bVar2 = *(byte *)((int)param_2 + 0x2b)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)((int)param_2 + 0x2b)" (* "*") (cast_expression "(byte *)((int)param_2 + 0x2b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_2 + 0x2b)" (( "(") (binary_expression "(int)param_2 + 0x2b" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (+ "+") (number_literal "0x2b")) () ")"))))) (; ";")) (if_statement "if ((bVar2 & 4) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" (if "if") (parenthesized_expression "((bVar2 & 4) != 0)" (( "(") (binary_expression "(bVar2 & 4) != 0" (parenthesized_expression "(bVar2 & 4)" (( "(") (binary_expression "bVar2 & 4" (identifier "bVar2") (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x43b") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "bVar3") () ")"))) (; ";")) (} "}"))) (if_statement "if ((bVar2 & 8) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" (if "if") (parenthesized_expression "((bVar2 & 8) != 0)" (( "(") (binary_expression "(bVar2 & 8) != 0" (parenthesized_expression "(bVar2 & 8)" (( "(") (binary_expression "bVar2 & 8" (identifier "bVar2") (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x43c") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}"))) (if_statement "if ((bVar2 & 0x10) != 0) {\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" (if "if") (parenthesized_expression "((bVar2 & 0x10) != 0)" (( "(") (binary_expression "(bVar2 & 0x10) != 0" (parenthesized_expression "(bVar2 & 0x10)" (( "(") (binary_expression "bVar2 & 0x10" (identifier "bVar2") (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);\n  }" ({ "{") (expression_statement "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);" (call_expression "FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" (identifier "FUN_0008b620") (argument_list "(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2)" (( "(") (binary_expression "unaff_EBP + 0xd9546" (identifier "unaff_EBP") (+ "+") (number_literal "0xd9546")) (, ",") (number_literal "0x43d") (, ",") (binary_expression "&LAB_000d9982 + unaff_EBP" (pointer_expression "&LAB_000d9982" (& "&") (identifier "LAB_000d9982")) (+ "+") (identifier "unaff_EBP")) (, ",") (identifier "bVar2") () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bp replaced with injection: get_pc_thunk.bp */
/* DWARF original prototype: void override_base_with_special(Symbol * this, Symbol * from) */

void __thiscall gold::type_1::function_1(type_1 *this,type_1 *from)

{
  type_2 var_5;
  char *var_1;
  type_2 var_2;
  type_2 var_4;
  
  var_1 = from->name_;
  var_2 = this->field_0x2a;
  if ((this->name_ != var_1) && ((var_2 & 0x20) == 0)) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x407,"override_base_with_special");
  }
  if ((var_2 & 7) == 0) {
    if (((this->u2_).shndx != 0) || ((this->field_0x2b & 0x20) == 0)) goto LAB_0018f978;
  }
  else if ((var_2 & 7) != 4) goto LAB_0018f978;
  if (((this->field_0x2c & 1) == 0) || ((this->field_0x2c & 2) != 0)) {
    this->field_0x2c = this->field_0x2c & 0xfd | ((type_2)this->field_0x28 >> 4 == 2) * '\x02' | 1;
  }
LAB_0018f978:
  var_2 = from->field_0x2a & 7 | this->field_0x2a & 0xf8;
  this->field_0x2a = var_2;
  var_4 = from->field_0x2a & 7;
  if (var_4 < 3) {
    this->u1_ = from->u1_;
    this->u2_ = from->u2_;
  }
  else if (4 < var_4) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x41a,"override_base_with_special");
  }
  if (this->name_ == var_1) {
    this->version_ = from->version_;
  }
  var_4 = from->field_0x28 & 0xf;
  this->field_0x28 = this->field_0x28 & 0xf0 | var_4;
  this->field_0x28 = var_4 | from->field_0x28 & 0xf0;
  var_4 = from->field_0x29;
  if ((var_4 & 3) != 0) {
    var_5 = this->field_0x29;
    if (((var_5 & 3) == 0) || ((var_4 & 3) < (var_5 & 3))) {
      this->field_0x29 = var_4 & 3 | var_5 & 0xfc;
      var_4 = from->field_0x29;
    }
  }
  this->field_0x29 = var_4 & 0xfc | this->field_0x29 & 3;
  this->field_0x2a = var_2 | 0x80;
  var_4 = var_2 | 0xc0;
  if ((from->field_0x2a & 0x40) == 0) {
    var_4 = var_2 | 0x80;
  }
  this->field_0x2a = var_4;
  if ((from->field_0x2b & 2) != 0) {
    this->field_0x2b = this->field_0x2b | 2;
  }
  this->field_0x2c = this->field_0x2c & 0xfb | from->field_0x2c & 4;
  if ((from->field_0x2a & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x439,"override_base_with_special");
  }
  if (from->plt_offset_ != 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x43a,"override_base_with_special");
  }
  var_2 = from->field_0x2b;
  if ((var_2 & 4) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x43b,"override_base_with_special");
  }
  if ((var_2 & 8) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x43c,"override_base_with_special");
  }
  if ((var_2 & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    var_3("../../gold/resolve.cc",0x43d,"override_base_with_special");
  }
  return;
}


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

void MASKED(int *param_1,int *param_2)

{
  int iVar1;
  byte bVar2;
  byte bVar3;
  int unaff_EBP;
  byte bVar4;
  
  FUN_00058c4e();
  iVar1 = *param_2;
  bVar2 = *(byte *)((int)param_1 + 0x2a);
  if ((*param_1 != iVar1) && ((bVar2 & 0x20) == 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x407,&LAB_000d9982 + unaff_EBP,iVar1);
  }
  if ((bVar2 & 7) == 0) {
    if ((param_1[3] != 0) || ((*(byte *)((int)param_1 + 0x2b) & 0x20) == 0)) goto LAB_0018f978;
  }
  else if ((bVar2 & 7) != 4) goto LAB_0018f978;
  if (((*(byte *)(param_1 + 0xb) & 1) == 0) || ((*(byte *)(param_1 + 0xb) & 2) != 0)) {
    *(byte *)(param_1 + 0xb) =
         *(byte *)(param_1 + 0xb) & 0xfd | (*(byte *)(param_1 + 10) >> 4 == 2) * '\x02' | 1;
  }
LAB_0018f978:
  bVar2 = *(byte *)((int)param_2 + 0x2a) & 7 | *(byte *)((int)param_1 + 0x2a) & 0xf8;
  *(byte *)((int)param_1 + 0x2a) = bVar2;
  bVar3 = *(byte *)((int)param_2 + 0x2a) & 7;
  if (bVar3 < 3) {
    param_1[2] = param_2[2];
    param_1[3] = param_2[3];
  }
  else if (4 < bVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x41a,&LAB_000d9982 + unaff_EBP,bVar3);
  }
  if (*param_1 == iVar1) {
    param_1[1] = param_2[1];
  }
  bVar3 = *(byte *)(param_2 + 10);
  *(byte *)(param_1 + 10) = *(byte *)(param_1 + 10) & 0xf0 | bVar3 & 0xf;
  *(byte *)(param_1 + 10) = bVar3 & 0xf | *(byte *)(param_2 + 10) & 0xf0;
  bVar3 = *(byte *)((int)param_2 + 0x29);
  if ((bVar3 & 3) != 0) {
    bVar4 = *(byte *)((int)param_1 + 0x29);
    if (((bVar4 & 3) == 0) || ((bVar3 & 3) < (bVar4 & 3))) {
      *(byte *)((int)param_1 + 0x29) = bVar3 & 3 | bVar4 & 0xfc;
      bVar3 = *(byte *)((int)param_2 + 0x29);
    }
  }
  bVar4 = *(byte *)((int)param_1 + 0x29) & 3;
  *(byte *)((int)param_1 + 0x29) = bVar3 & 0xfc | bVar4;
  *(byte *)((int)param_1 + 0x2a) = bVar2 | 0x80;
  bVar3 = bVar2 | 0xc0;
  if ((*(byte *)((int)param_2 + 0x2a) & 0x40) == 0) {
    bVar3 = bVar2 | 0x80;
  }
  *(byte *)((int)param_1 + 0x2a) = bVar3;
  if ((*(byte *)((int)param_2 + 0x2b) & 2) != 0) {
    *(byte *)((int)param_1 + 0x2b) = *(byte *)((int)param_1 + 0x2b) | 2;
  }
  bVar2 = *(byte *)(param_2 + 0xb);
  bVar3 = *(byte *)(param_1 + 0xb) & 0xfb | bVar2 & 4;
  *(byte *)(param_1 + 0xb) = bVar3;
  if ((*(byte *)((int)param_2 + 0x2a) & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x439,&LAB_000d9982 + unaff_EBP,bVar4);
  }
  if (param_2[6] != -1) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43a,&LAB_000d9982 + unaff_EBP,bVar2 & 4);
  }
  bVar2 = *(byte *)((int)param_2 + 0x2b);
  if ((bVar2 & 4) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43b,&LAB_000d9982 + unaff_EBP,bVar3);
  }
  if ((bVar2 & 8) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43c,&LAB_000d9982 + unaff_EBP,param_2);
  }
  if ((bVar2 & 0x10) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0008b620(unaff_EBP + 0xd9546,0x43d,&LAB_000d9982 + unaff_EBP,bVar2);
  }
  return;
}

