
/* DWARF original prototype: void update_flags_for_input_section(Output_section * this, Elf_Xword
   flags) */

void __thiscall
gold::Output_section::update_flags_for_input_section(Output_section *this,Elf_Xword flags)

{
  undefined1 *puVar1;
  undefined4 uVar2;
  uint uVar3;
  uint uVar4;
  
  uVar4 = (uint)this->flags_;
  uVar2 = *(undefined4 *)((int)&this->flags_ + 4);
  if (((uVar4 & 2) == 0) && ((flags & 2) != 0)) {
    puVar1 = &(this->super_Output_data).field_0x1c;
    *puVar1 = *puVar1 & 0xfe;
  }
  *(undefined4 *)((int)&this->flags_ + 4) = uVar2;
  uVar3 = uVar4 | (uint)flags & 7;
  *(uint *)&this->flags_ = uVar3;
  if ((flags & 0x10) == 0) {
    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;
    *(undefined4 *)((int)&this->flags_ + 4) = 0;
    *(uint *)&this->flags_ = uVar4;
    if ((flags & 0x20) != 0) {
      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||
          (int)(this->super_Output_data).data_size_ != 0) {
        return;
      }
      *(undefined4 *)((int)&this->flags_ + 4) = 0;
      *(uint *)&this->flags_ = uVar4 | 0x20;
      return;
    }
  }
  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&
           (int)(this->super_Output_data).data_size_ == 0) {
    *(uint *)&this->flags_ = uVar3 | 0x10;
    uVar4 = uVar3 | 0x10;
    if ((flags & 0x20) != 0) {
      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;
      *(uint *)&this->flags_ = uVar3 | 0x30;
      return;
    }
  }
  else {
    uVar4 = uVar3;
    if ((flags & 0x20) != 0) {
      return;
    }
  }
  *(undefined4 *)((int)&this->flags_ + 4) = 0;
  *(uint *)&this->flags_ = uVar4 & 0xffffffdf;
  return;
}



void FUN_000ee4c0(int param_1,uint param_2)

{
  undefined4 uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  
  uVar3 = *(uint *)(param_1 + 0x54);
  uVar1 = *(undefined4 *)(param_1 + 0x58);
  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {
    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;
  }
  *(undefined4 *)(param_1 + 0x58) = uVar1;
  uVar2 = uVar3 | param_2 & 7;
  uVar4 = param_2 & 0x20;
  *(uint *)(param_1 + 0x54) = uVar2;
  if ((param_2 & 0x10) == 0) {
    uVar3 = uVar3 & 0xffffffef | param_2 & 7;
    *(undefined4 *)(param_1 + 0x58) = 0;
    *(uint *)(param_1 + 0x54) = uVar3;
    if (uVar4 != 0) {
      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {
        return;
      }
      *(undefined4 *)(param_1 + 0x58) = 0;
      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;
      return;
    }
  }
  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {
    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;
    uVar3 = uVar2 | 0x10;
    if (uVar4 != 0) {
      *(undefined4 *)(param_1 + 0x58) = uVar1;
      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;
      return;
    }
  }
  else {
    uVar3 = uVar2;
    if (uVar4 != 0) {
      return;
    }
  }
  *(undefined4 *)(param_1 + 0x58) = 0;
  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;
  return;
}


PUSH ESI
PUSH EBX
MOV EAX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [EAX + 0x54]
MOV ESI,dword ptr [EAX + 0x58]
TEST DL,0x2
JNZ 0x000ee4da
TEST CL,0x2
JNZ 0x000ee518
MOV EBX,ECX
MOV dword ptr [EAX + 0x58],ESI
AND EBX,0x7
OR EDX,EBX
MOV EBX,ECX
AND EBX,0x20
AND ECX,0x10
MOV dword ptr [EAX + 0x54],EDX
JNZ 0x000ee538
AND EDX,0xffffffef
XOR ECX,ECX
MOV dword ptr [EAX + 0x58],0x0
MOV dword ptr [EAX + 0x54],EDX
TEST EBX,EBX
JNZ 0x000ee520
AND EDX,0xffffffdf
MOV dword ptr [EAX + 0x58],0x0
MOV dword ptr [EAX + 0x54],EDX
POP EBX
POP ESI
RET
AND byte ptr [EAX + 0x1c],0xfe
JMP 0x000ee4da
MOV EBX,dword ptr [EAX + 0x10]
OR EBX,dword ptr [EAX + 0xc]
JNZ 0x000ee511
OR EDX,0x20
MOV dword ptr [EAX + 0x58],ECX
MOV dword ptr [EAX + 0x54],EDX
POP EBX
POP ESI
RET
MOV ECX,dword ptr [EAX + 0x10]
OR ECX,dword ptr [EAX + 0xc]
JNZ 0x000ee560
OR EDX,0x10
MOV ECX,ESI
MOV dword ptr [EAX + 0x54],EDX
TEST EBX,EBX
JZ 0x000ee504
OR EDX,0x20
MOV dword ptr [EAX + 0x58],ECX
MOV dword ptr [EAX + 0x54],EDX
JMP 0x000ee531
TEST EBX,EBX
JZ 0x000ee504
POP EBX
POP ESI
RET
(translation_unit "void FUN_000ee4c0(int param_1,uint param_2)\n\n{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}\n\n" (function_definition "void FUN_000ee4c0(int param_1,uint param_2)\n\n{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" primitive_type (function_declarator "FUN_000ee4c0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar3 = *(uint *)(param_1 + 0x54);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x54)" identifier = (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x58);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x58)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" if (parenthesized_expression "(((uVar3 & 2) == 0) && ((param_2 & 2) != 0))" ( (binary_expression "((uVar3 & 2) == 0) && ((param_2 & 2) != 0)" (parenthesized_expression "((uVar3 & 2) == 0)" ( (binary_expression "(uVar3 & 2) == 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "((param_2 & 2) != 0)" ( (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" ( (binary_expression "param_2 & 2" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" { (expression_statement "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;" (assignment_expression "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) & number_literal)) ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = uVar3 | param_2 & 7;" (assignment_expression "uVar2 = uVar3 | param_2 & 7" identifier = (binary_expression "uVar3 | param_2 & 7" identifier | (binary_expression "param_2 & 7" identifier & number_literal))) ;) (expression_statement "uVar4 = param_2 & 0x20;" (assignment_expression "uVar4 = param_2 & 0x20" identifier = (binary_expression "param_2 & 0x20" identifier & number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }" { (expression_statement "uVar3 = uVar3 & 0xffffffef | param_2 & 7;" (assignment_expression "uVar3 = uVar3 & 0xffffffef | param_2 & 7" identifier = (binary_expression "uVar3 & 0xffffffef | param_2 & 7" (binary_expression "uVar3 & 0xffffffef" identifier & number_literal) | (binary_expression "param_2 & 7" identifier & number_literal))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" { (if_statement "if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0" (binary_expression "*(int *)(param_1 + 0x10) != 0" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) != number_literal) || (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 | 0x20;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 | 0x20" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar3 | 0x20" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" else (if_statement "if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0)" ( (binary_expression "*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0" (binary_expression "*(int *)(param_1 + 0x10) == 0" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) && (binary_expression "*(int *)(param_1 + 0xc) == 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }" { (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x10;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x10" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar2 | 0x10" identifier | number_literal)) ;) (expression_statement "uVar3 = uVar2 | 0x10;" (assignment_expression "uVar3 = uVar2 | 0x10" identifier = (binary_expression "uVar2 | 0x10" identifier | number_literal)) ;) (if_statement "if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x30;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x30" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar2 | 0x30" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" else (compound_statement "{\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" { (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (if_statement "if (uVar4 != 0) {\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }))))) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar3 & 0xffffffdf" identifier & number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void update_flags_for_input_section(Output_section * this, Elf_Xword\n   flags) */\n\nvoid __thiscall\ngold::Output_section::update_flags_for_input_section(Output_section *this,Elf_Xword flags)\n\n{\n  undefined1 *puVar1;\n  undefined4 uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = (uint)this->flags_;\n  uVar2 = *(undefined4 *)((int)&this->flags_ + 4);\n  if (((uVar4 & 2) == 0) && ((flags & 2) != 0)) {\n    puVar1 = &(this->super_Output_data).field_0x1c;\n    *puVar1 = *puVar1 & 0xfe;\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n  uVar3 = uVar4 | (uint)flags & 7;\n  *(uint *)&this->flags_ = uVar3;\n  if ((flags & 0x10) == 0) {\n    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;\n    *(undefined4 *)((int)&this->flags_ + 4) = 0;\n    *(uint *)&this->flags_ = uVar4;\n    if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = 0;\n  *(uint *)&this->flags_ = uVar4 & 0xffffffdf;\n  return;\n}\n\n" comment (function_definition "void __thiscall\ngold::Output_section::update_flags_for_input_section(Output_section *this,Elf_Xword flags)\n\n{\n  undefined1 *puVar1;\n  undefined4 uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = (uint)this->flags_;\n  uVar2 = *(undefined4 *)((int)&this->flags_ + 4);\n  if (((uVar4 & 2) == 0) && ((flags & 2) != 0)) {\n    puVar1 = &(this->super_Output_data).field_0x1c;\n    *puVar1 = *puVar1 & 0xfe;\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n  uVar3 = uVar4 | (uint)flags & 7;\n  *(uint *)&this->flags_ = uVar3;\n  if ((flags & 0x10) == 0) {\n    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;\n    *(undefined4 *)((int)&this->flags_ + 4) = 0;\n    *(uint *)&this->flags_ = uVar4;\n    if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = 0;\n  *(uint *)&this->flags_ = uVar4 & 0xffffffdf;\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_section::" identifier : : identifier : :) (function_declarator "update_flags_for_input_section(Output_section *this,Elf_Xword flags)" identifier (parameter_list "(Output_section *this,Elf_Xword flags)" ( (parameter_declaration "Output_section *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Elf_Xword flags" type_identifier identifier) ))) (compound_statement "{\n  undefined1 *puVar1;\n  undefined4 uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar4 = (uint)this->flags_;\n  uVar2 = *(undefined4 *)((int)&this->flags_ + 4);\n  if (((uVar4 & 2) == 0) && ((flags & 2) != 0)) {\n    puVar1 = &(this->super_Output_data).field_0x1c;\n    *puVar1 = *puVar1 & 0xfe;\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n  uVar3 = uVar4 | (uint)flags & 7;\n  *(uint *)&this->flags_ = uVar3;\n  if ((flags & 0x10) == 0) {\n    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;\n    *(undefined4 *)((int)&this->flags_ + 4) = 0;\n    *(uint *)&this->flags_ = uVar4;\n    if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)((int)&this->flags_ + 4) = 0;\n  *(uint *)&this->flags_ = uVar4 & 0xffffffdf;\n  return;\n}" { (declaration "undefined1 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar4 = (uint)this->flags_;" (assignment_expression "uVar4 = (uint)this->flags_" identifier = (cast_expression "(uint)this->flags_" ( (type_descriptor "uint" type_identifier) ) (field_expression "this->flags_" identifier -> field_identifier))) ;) (expression_statement "uVar2 = *(undefined4 *)((int)&this->flags_ + 4);" (assignment_expression "uVar2 = *(undefined4 *)((int)&this->flags_ + 4)" identifier = (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) ))))) ;) (if_statement "if (((uVar4 & 2) == 0) && ((flags & 2) != 0)) {\n    puVar1 = &(this->super_Output_data).field_0x1c;\n    *puVar1 = *puVar1 & 0xfe;\n  }" if (parenthesized_expression "(((uVar4 & 2) == 0) && ((flags & 2) != 0))" ( (binary_expression "((uVar4 & 2) == 0) && ((flags & 2) != 0)" (parenthesized_expression "((uVar4 & 2) == 0)" ( (binary_expression "(uVar4 & 2) == 0" (parenthesized_expression "(uVar4 & 2)" ( (binary_expression "uVar4 & 2" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "((flags & 2) != 0)" ( (binary_expression "(flags & 2) != 0" (parenthesized_expression "(flags & 2)" ( (binary_expression "flags & 2" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    puVar1 = &(this->super_Output_data).field_0x1c;\n    *puVar1 = *puVar1 & 0xfe;\n  }" { (expression_statement "puVar1 = &(this->super_Output_data).field_0x1c;" (assignment_expression "puVar1 = &(this->super_Output_data).field_0x1c" identifier = (pointer_expression "&(this->super_Output_data).field_0x1c" & (field_expression "(this->super_Output_data).field_0x1c" (parenthesized_expression "(this->super_Output_data)" ( (field_expression "this->super_Output_data" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "*puVar1 = *puVar1 & 0xfe;" (assignment_expression "*puVar1 = *puVar1 & 0xfe" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 & 0xfe" (pointer_expression "*puVar1" * identifier) & number_literal)) ;) })) (expression_statement "*(undefined4 *)((int)&this->flags_ + 4) = uVar2;" (assignment_expression "*(undefined4 *)((int)&this->flags_ + 4) = uVar2" (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "uVar3 = uVar4 | (uint)flags & 7;" (assignment_expression "uVar3 = uVar4 | (uint)flags & 7" identifier = (binary_expression "uVar4 | (uint)flags & 7" identifier | (binary_expression "(uint)flags & 7" (cast_expression "(uint)flags" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal))) ;) (expression_statement "*(uint *)&this->flags_ = uVar3;" (assignment_expression "*(uint *)&this->flags_ = uVar3" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = identifier) ;) (if_statement "if ((flags & 0x10) == 0) {\n    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;\n    *(undefined4 *)((int)&this->flags_ + 4) = 0;\n    *(uint *)&this->flags_ = uVar4;\n    if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "((flags & 0x10) == 0)" ( (binary_expression "(flags & 0x10) == 0" (parenthesized_expression "(flags & 0x10)" ( (binary_expression "flags & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;\n    *(undefined4 *)((int)&this->flags_ + 4) = 0;\n    *(uint *)&this->flags_ = uVar4;\n    if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }\n  }" { (expression_statement "uVar4 = uVar4 & 0xffffffef | (uint)flags & 7;" (assignment_expression "uVar4 = uVar4 & 0xffffffef | (uint)flags & 7" identifier = (binary_expression "uVar4 & 0xffffffef | (uint)flags & 7" (binary_expression "uVar4 & 0xffffffef" identifier & number_literal) | (binary_expression "(uint)flags & 7" (cast_expression "(uint)flags" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal))) ;) (expression_statement "*(undefined4 *)((int)&this->flags_ + 4) = 0;" (assignment_expression "*(undefined4 *)((int)&this->flags_ + 4) = 0" (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)&this->flags_ = uVar4;" (assignment_expression "*(uint *)&this->flags_ = uVar4" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = identifier) ;) (if_statement "if ((flags & 0x20) != 0) {\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }" if (parenthesized_expression "((flags & 0x20) != 0)" ( (binary_expression "(flags & 0x20) != 0" (parenthesized_expression "(flags & 0x20)" ( (binary_expression "flags & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }\n      *(undefined4 *)((int)&this->flags_ + 4) = 0;\n      *(uint *)&this->flags_ = uVar4 | 0x20;\n      return;\n    }" { (if_statement "if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0) {\n        return;\n      }" if (parenthesized_expression "(*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0)" ( (binary_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||\n          (int)(this->super_Output_data).data_size_ != 0" (binary_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0" (pointer_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4)" * (cast_expression "(int *)((int)&(this->super_Output_data).data_size_ + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(this->super_Output_data).data_size_ + 4)" ( (binary_expression "(int)&(this->super_Output_data).data_size_ + 4" (cast_expression "(int)&(this->super_Output_data).data_size_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(this->super_Output_data).data_size_" & (field_expression "(this->super_Output_data).data_size_" (parenthesized_expression "(this->super_Output_data)" ( (field_expression "this->super_Output_data" identifier -> field_identifier) )) . field_identifier))) + number_literal) )))) != number_literal) || (binary_expression "(int)(this->super_Output_data).data_size_ != 0" (cast_expression "(int)(this->super_Output_data).data_size_" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->super_Output_data).data_size_" (parenthesized_expression "(this->super_Output_data)" ( (field_expression "this->super_Output_data" identifier -> field_identifier) )) . field_identifier)) != number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "*(undefined4 *)((int)&this->flags_ + 4) = 0;" (assignment_expression "*(undefined4 *)((int)&this->flags_ + 4) = 0" (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)&this->flags_ = uVar4 | 0x20;" (assignment_expression "*(uint *)&this->flags_ = uVar4 | 0x20" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = (binary_expression "uVar4 | 0x20" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }" else (if_statement "if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0) {\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "(*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0)" ( (binary_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&\n           (int)(this->super_Output_data).data_size_ == 0" (binary_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0" (pointer_expression "*(int *)((int)&(this->super_Output_data).data_size_ + 4)" * (cast_expression "(int *)((int)&(this->super_Output_data).data_size_ + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(this->super_Output_data).data_size_ + 4)" ( (binary_expression "(int)&(this->super_Output_data).data_size_ + 4" (cast_expression "(int)&(this->super_Output_data).data_size_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(this->super_Output_data).data_size_" & (field_expression "(this->super_Output_data).data_size_" (parenthesized_expression "(this->super_Output_data)" ( (field_expression "this->super_Output_data" identifier -> field_identifier) )) . field_identifier))) + number_literal) )))) == number_literal) && (binary_expression "(int)(this->super_Output_data).data_size_ == 0" (cast_expression "(int)(this->super_Output_data).data_size_" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->super_Output_data).data_size_" (parenthesized_expression "(this->super_Output_data)" ( (field_expression "this->super_Output_data" identifier -> field_identifier) )) . field_identifier)) == number_literal)) )) (compound_statement "{\n    *(uint *)&this->flags_ = uVar3 | 0x10;\n    uVar4 = uVar3 | 0x10;\n    if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }\n  }" { (expression_statement "*(uint *)&this->flags_ = uVar3 | 0x10;" (assignment_expression "*(uint *)&this->flags_ = uVar3 | 0x10" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = (binary_expression "uVar3 | 0x10" identifier | number_literal)) ;) (expression_statement "uVar4 = uVar3 | 0x10;" (assignment_expression "uVar4 = uVar3 | 0x10" identifier = (binary_expression "uVar3 | 0x10" identifier | number_literal)) ;) (if_statement "if ((flags & 0x20) != 0) {\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }" if (parenthesized_expression "((flags & 0x20) != 0)" ( (binary_expression "(flags & 0x20) != 0" (parenthesized_expression "(flags & 0x20)" ( (binary_expression "flags & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      *(undefined4 *)((int)&this->flags_ + 4) = uVar2;\n      *(uint *)&this->flags_ = uVar3 | 0x30;\n      return;\n    }" { (expression_statement "*(undefined4 *)((int)&this->flags_ + 4) = uVar2;" (assignment_expression "*(undefined4 *)((int)&this->flags_ + 4) = uVar2" (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)&this->flags_ = uVar3 | 0x30;" (assignment_expression "*(uint *)&this->flags_ = uVar3 | 0x30" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = (binary_expression "uVar3 | 0x30" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }" else (compound_statement "{\n    uVar4 = uVar3;\n    if ((flags & 0x20) != 0) {\n      return;\n    }\n  }" { (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) (if_statement "if ((flags & 0x20) != 0) {\n      return;\n    }" if (parenthesized_expression "((flags & 0x20) != 0)" ( (binary_expression "(flags & 0x20) != 0" (parenthesized_expression "(flags & 0x20)" ( (binary_expression "flags & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }))))) (expression_statement "*(undefined4 *)((int)&this->flags_ + 4) = 0;" (assignment_expression "*(undefined4 *)((int)&this->flags_ + 4) = 0" (pointer_expression "*(undefined4 *)((int)&this->flags_ + 4)" * (cast_expression "(undefined4 *)((int)&this->flags_ + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->flags_ + 4)" ( (binary_expression "(int)&this->flags_ + 4" (cast_expression "(int)&this->flags_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)&this->flags_ = uVar4 & 0xffffffdf;" (assignment_expression "*(uint *)&this->flags_ = uVar4 & 0xffffffdf" (pointer_expression "*(uint *)&this->flags_" * (cast_expression "(uint *)&this->flags_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->flags_" & (field_expression "this->flags_" identifier -> field_identifier)))) = (binary_expression "uVar4 & 0xffffffdf" identifier & number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_000ee4c0(int param_1,uint param_2)\n\n{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}\n\n" (function_definition "void FUN_000ee4c0(int param_1,uint param_2)\n\n{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" primitive_type (function_declarator "FUN_000ee4c0(int param_1,uint param_2)" identifier (parameter_list "(int param_1,uint param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint param_2" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "uVar3 = *(uint *)(param_1 + 0x54);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x54)" identifier = (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x58);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x58)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" if (parenthesized_expression "(((uVar3 & 2) == 0) && ((param_2 & 2) != 0))" ( (binary_expression "((uVar3 & 2) == 0) && ((param_2 & 2) != 0)" (parenthesized_expression "((uVar3 & 2) == 0)" ( (binary_expression "(uVar3 & 2) == 0" (parenthesized_expression "(uVar3 & 2)" ( (binary_expression "uVar3 & 2" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "((param_2 & 2) != 0)" ( (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" ( (binary_expression "param_2 & 2" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" { (expression_statement "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;" (assignment_expression "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" * (cast_expression "(byte *)(param_1 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) & number_literal)) ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = uVar3 | param_2 & 7;" (assignment_expression "uVar2 = uVar3 | param_2 & 7" identifier = (binary_expression "uVar3 | param_2 & 7" identifier | (binary_expression "param_2 & 7" identifier & number_literal))) ;) (expression_statement "uVar4 = param_2 & 0x20;" (assignment_expression "uVar4 = param_2 & 0x20" identifier = (binary_expression "param_2 & 0x20" identifier & number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "((param_2 & 0x10) == 0)" ( (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" ( (binary_expression "param_2 & 0x10" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }" { (expression_statement "uVar3 = uVar3 & 0xffffffef | param_2 & 7;" (assignment_expression "uVar3 = uVar3 & 0xffffffef | param_2 & 7" identifier = (binary_expression "uVar3 & 0xffffffef | param_2 & 7" (binary_expression "uVar3 & 0xffffffef" identifier & number_literal) | (binary_expression "param_2 & 7" identifier & number_literal))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" { (if_statement "if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0)" ( (binary_expression "*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0" (binary_expression "*(int *)(param_1 + 0x10) != 0" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) != number_literal) || (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) != number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 | 0x20;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 | 0x20" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar3 | 0x20" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" else (if_statement "if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0)" ( (binary_expression "*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0" (binary_expression "*(int *)(param_1 + 0x10) == 0" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) == number_literal) && (binary_expression "*(int *)(param_1 + 0xc) == 0" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }" { (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x10;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x10" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar2 | 0x10" identifier | number_literal)) ;) (expression_statement "uVar3 = uVar2 | 0x10;" (assignment_expression "uVar3 = uVar2 | 0x10" identifier = (binary_expression "uVar2 | 0x10" identifier | number_literal)) ;) (if_statement "if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x30;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x30" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar2 | 0x30" identifier | number_literal)) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" else (compound_statement "{\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" { (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (if_statement "if (uVar4 != 0) {\n      return;\n    }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) }))))) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "uVar3 & 0xffffffdf" identifier & number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression 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) )) != 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression IDENT & LIT))) ;) (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 IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT & 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) )))) = 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 IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) || (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT)) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT | LIT)) ;) (return_statement return ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) && (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT | LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) (if_statement if (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 IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT | LIT)) ;) (return_statement return ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return ;) })) }))))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT & LIT)) ;) (return_statement return ;) })))
(function_definition "void FUN_000ee4c0(int param_1,uint param_2)\n\n{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000ee4c0(int param_1,uint param_2)" (identifier "FUN_000ee4c0") (parameter_list "(int param_1,uint param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  \n  uVar3 = *(uint *)(param_1 + 0x54);\n  uVar1 = *(undefined4 *)(param_1 + 0x58);\n  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }\n  *(undefined4 *)(param_1 + 0x58) = uVar1;\n  uVar2 = uVar3 | param_2 & 7;\n  uVar4 = param_2 & 0x20;\n  *(uint *)(param_1 + 0x54) = uVar2;\n  if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }\n  *(undefined4 *)(param_1 + 0x58) = 0;\n  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;\n  return;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (expression_statement "uVar3 = *(uint *)(param_1 + 0x54);" (assignment_expression "uVar3 = *(uint *)(param_1 + 0x54)" (identifier "uVar3") (= "=") (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x58);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x58)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (if_statement "if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" (if "if") (parenthesized_expression "(((uVar3 & 2) == 0) && ((param_2 & 2) != 0))" (( "(") (binary_expression "((uVar3 & 2) == 0) && ((param_2 & 2) != 0)" (parenthesized_expression "((uVar3 & 2) == 0)" (( "(") (binary_expression "(uVar3 & 2) == 0" (parenthesized_expression "(uVar3 & 2)" (( "(") (binary_expression "uVar3 & 2" (identifier "uVar3") (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((param_2 & 2) != 0)" (( "(") (binary_expression "(param_2 & 2) != 0" (parenthesized_expression "(param_2 & 2)" (( "(") (binary_expression "param_2 & 2" (identifier "param_2") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;\n  }" ({ "{") (expression_statement "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;" (assignment_expression "*(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" (* "*") (cast_expression "(byte *)(param_1 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 0x1c) & 0xfe" (pointer_expression "*(byte *)(param_1 + 0x1c)" (* "*") (cast_expression "(byte *)(param_1 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (& "&") (number_literal "0xfe"))) (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "uVar2 = uVar3 | param_2 & 7;" (assignment_expression "uVar2 = uVar3 | param_2 & 7" (identifier "uVar2") (= "=") (binary_expression "uVar3 | param_2 & 7" (identifier "uVar3") (| "|") (binary_expression "param_2 & 7" (identifier "param_2") (& "&") (number_literal "7")))) (; ";")) (expression_statement "uVar4 = param_2 & 0x20;" (assignment_expression "uVar4 = param_2 & 0x20" (identifier "uVar4") (= "=") (binary_expression "param_2 & 0x20" (identifier "param_2") (& "&") (number_literal "0x20"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if ((param_2 & 0x10) == 0) {\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }\n  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" (if "if") (parenthesized_expression "((param_2 & 0x10) == 0)" (( "(") (binary_expression "(param_2 & 0x10) == 0" (parenthesized_expression "(param_2 & 0x10)" (( "(") (binary_expression "param_2 & 0x10" (identifier "param_2") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar3 = uVar3 & 0xffffffef | param_2 & 7;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n    *(uint *)(param_1 + 0x54) = uVar3;\n    if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }\n  }" ({ "{") (expression_statement "uVar3 = uVar3 & 0xffffffef | param_2 & 7;" (assignment_expression "uVar3 = uVar3 & 0xffffffef | param_2 & 7" (identifier "uVar3") (= "=") (binary_expression "uVar3 & 0xffffffef | param_2 & 7" (binary_expression "uVar3 & 0xffffffef" (identifier "uVar3") (& "&") (number_literal "0xffffffef")) (| "|") (binary_expression "param_2 & 7" (identifier "param_2") (& "&") (number_literal "7")))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (uVar4 != 0) {\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }\n      *(undefined4 *)(param_1 + 0x58) = 0;\n      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;\n      return;\n    }" ({ "{") (if_statement "if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {\n        return;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0" (binary_expression "*(int *)(param_1 + 0x10) != 0" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) (|| "||") (binary_expression "*(int *)(param_1 + 0xc) != 0" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 | 0x20;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 | 0x20" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "uVar3 | 0x20" (identifier "uVar3") (| "|") (number_literal "0x20"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" (else "else") (if_statement "if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }\n  else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0" (binary_expression "*(int *)(param_1 + 0x10) == 0" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) (&& "&&") (binary_expression "*(int *)(param_1 + 0xc) == 0" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;\n    uVar3 = uVar2 | 0x10;\n    if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }\n  }" ({ "{") (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x10;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x10" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "uVar2 | 0x10" (identifier "uVar2") (| "|") (number_literal "0x10"))) (; ";")) (expression_statement "uVar3 = uVar2 | 0x10;" (assignment_expression "uVar3 = uVar2 | 0x10" (identifier "uVar3") (= "=") (binary_expression "uVar2 | 0x10" (identifier "uVar2") (| "|") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar4 != 0) {\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x58) = uVar1;\n      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;\n      return;\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) = uVar2 | 0x30;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar2 | 0x30" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "uVar2 | 0x30" (identifier "uVar2") (| "|") (number_literal "0x30"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" (else "else") (compound_statement "{\n    uVar3 = uVar2;\n    if (uVar4 != 0) {\n      return;\n    }\n  }" ({ "{") (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" (identifier "uVar3") (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (uVar4 != 0) {\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")))))) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;" (assignment_expression "*(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "uVar3 & 0xffffffdf" (identifier "uVar3") (& "&") (number_literal "0xffffffdf"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void update_flags_for_input_section(Output_section * this, Elf_Xword
   flags) */

void __thiscall
gold::type_1::function_1(type_1 *this,type_2 var_2)

{
  type_3 *puVar1;
  type_4 uVar2;
  type_5 var_3;
  type_5 var_1;
  
  var_1 = (type_5)this->flags_;
  uVar2 = *(type_4 *)((int)&this->flags_ + 4);
  if (((var_1 & 2) == 0) && ((var_2 & 2) != 0)) {
    puVar1 = &(this->super_Output_data).field_0x1c;
    *puVar1 = *puVar1 & 0xfe;
  }
  *(type_4 *)((int)&this->flags_ + 4) = uVar2;
  var_3 = var_1 | (type_5)var_2 & 7;
  *(type_5 *)&this->flags_ = var_3;
  if ((var_2 & 0x10) == 0) {
    var_1 = var_1 & 0xffffffef | (type_5)var_2 & 7;
    *(type_4 *)((int)&this->flags_ + 4) = 0;
    *(type_5 *)&this->flags_ = var_1;
    if ((var_2 & 0x20) != 0) {
      if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) != 0 ||
          (int)(this->super_Output_data).data_size_ != 0) {
        return;
      }
      *(type_4 *)((int)&this->flags_ + 4) = 0;
      *(type_5 *)&this->flags_ = var_1 | 0x20;
      return;
    }
  }
  else if (*(int *)((int)&(this->super_Output_data).data_size_ + 4) == 0 &&
           (int)(this->super_Output_data).data_size_ == 0) {
    *(type_5 *)&this->flags_ = var_3 | 0x10;
    var_1 = var_3 | 0x10;
    if ((var_2 & 0x20) != 0) {
      *(type_4 *)((int)&this->flags_ + 4) = uVar2;
      *(type_5 *)&this->flags_ = var_3 | 0x30;
      return;
    }
  }
  else {
    var_1 = var_3;
    if ((var_2 & 0x20) != 0) {
      return;
    }
  }
  *(type_4 *)((int)&this->flags_ + 4) = 0;
  *(type_5 *)&this->flags_ = var_1 & 0xffffffdf;
  return;
}


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

void MASKED(int param_1,uint param_2)

{
  undefined4 uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  
  uVar3 = *(uint *)(param_1 + 0x54);
  uVar1 = *(undefined4 *)(param_1 + 0x58);
  if (((uVar3 & 2) == 0) && ((param_2 & 2) != 0)) {
    *(byte *)(param_1 + 0x1c) = *(byte *)(param_1 + 0x1c) & 0xfe;
  }
  *(undefined4 *)(param_1 + 0x58) = uVar1;
  uVar2 = uVar3 | param_2 & 7;
  uVar4 = param_2 & 0x20;
  *(uint *)(param_1 + 0x54) = uVar2;
  if ((param_2 & 0x10) == 0) {
    uVar3 = uVar3 & 0xffffffef | param_2 & 7;
    *(undefined4 *)(param_1 + 0x58) = 0;
    *(uint *)(param_1 + 0x54) = uVar3;
    if (uVar4 != 0) {
      if (*(int *)(param_1 + 0x10) != 0 || *(int *)(param_1 + 0xc) != 0) {
        return;
      }
      *(undefined4 *)(param_1 + 0x58) = 0;
      *(uint *)(param_1 + 0x54) = uVar3 | 0x20;
      return;
    }
  }
  else if (*(int *)(param_1 + 0x10) == 0 && *(int *)(param_1 + 0xc) == 0) {
    *(uint *)(param_1 + 0x54) = uVar2 | 0x10;
    uVar3 = uVar2 | 0x10;
    if (uVar4 != 0) {
      *(undefined4 *)(param_1 + 0x58) = uVar1;
      *(uint *)(param_1 + 0x54) = uVar2 | 0x30;
      return;
    }
  }
  else {
    uVar3 = uVar2;
    if (uVar4 != 0) {
      return;
    }
  }
  *(undefined4 *)(param_1 + 0x58) = 0;
  *(uint *)(param_1 + 0x54) = uVar3 & 0xffffffdf;
  return;
}

