
/* DWARF original prototype: void write(Object_attribute * this, int tag,
   vector<unsigned_char,_std::allocator<unsigned_char>_> * buffer) */

ssize_t __thiscall
gold::Object_attribute::write(Object_attribute *this,int __fd,void *__buf,size_t __n)

{
  uint uVar1;
  size_type sVar2;
  ssize_t sVar3;
  pointer pcVar4;
  
  uVar1 = this->type_;
  if (((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&
      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))
  {
    return 0;
  }
  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd);
  if ((this->type_ & 1U) == 0) {
    uVar1 = this->type_ & 2;
    if (uVar1 != 0) {
      sVar2 = (this->string_value_)._M_string_length;
LAB_00152b0c:
      pcVar4 = (this->string_value_)._M_dataplus._M_p;
      sVar3 = sVar2 + 1;
      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::
      _M_range_insert<unsigned_char_const*>
                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,
                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);
      return sVar3;
    }
  }
  else {
    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);
    uVar1 = this->type_ & 2;
    if (uVar1 != 0) {
      sVar2 = (this->string_value_)._M_string_length;
      goto LAB_00152b0c;
    }
  }
  return uVar1;
}



/* gold::Object_attribute::write(int, std::vector<unsigned char, std::allocator<unsigned char> >*)
   const */

void __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)

{
  uint uVar1;
  int iVar2;
  
  uVar1 = *(uint *)this;
  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&
      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {
    return;
  }
  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);
  if ((*(uint *)this & 1) == 0) {
    if ((*(uint *)this & 2) != 0) {
      iVar2 = *(int *)(this + 0xc);
LAB_00152b0c:
      std::vector<unsigned_char,std::allocator<unsigned_char>>::
      _M_range_insert<unsigned_char_const*>
                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),
                 *(int *)(this + 8) + iVar2 + 1);
      return;
    }
  }
  else {
    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);
    if ((*(uint *)this & 2) != 0) {
      iVar2 = *(int *)(this + 0xc);
      goto LAB_00152b0c;
    }
  }
  return;
}


lui gp,0x37
addiu gp,gp,0x67e8
addu gp,gp,t9
lw v0,0x0(a0)
andi v1,v0,0x1
beq v1,zero,0x00152a80
_andi v1,v0,0x2
lw v1,0x4(a0)
bne v1,zero,0x00152aa8
_andi v1,v0,0x2
beq v1,zero,0x00152a94
_nop
lw v1,0xc(a0)
bne v1,zero,0x00152aa8
_nop
andi v0,v0,0x4
bne v0,zero,0x00152aa8
_nop
jr ra
_nop
addiu sp,sp,-0x30
lw t9,-0x5db8(gp)
or a3,a1,zero
sw s1,0x28(sp)
or s1,a2,zero
sw s0,0x24(sp)
sra a2,a1,0x1f
or s0,a0,zero
sw gp,0x18(sp)
sw ra,0x2c(sp)
jalr t9
_or a0,s1,zero
lw v0,0x0(s0)
andi v1,v0,0x1
bne v1,zero,0x00152b44
_lw gp,0x18(sp)
andi v0,v0,0x2
bne v0,zero,0x00152b08
_nop
lw ra,0x2c(sp)
lw s1,0x28(sp)
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x30
lw v0,0xc(s0)
or a0,s1,zero
lw a3,0x8(s0)
lw a1,0x4(s1)
addiu v0,v0,0x1
lw t9,-0x5db4(gp)
or a2,a3,zero
sb zero,0x10(sp)
bal 0x00153d78
_addu a3,a3,v0
lw ra,0x2c(sp)
lw s1,0x28(sp)
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x30
lw a3,0x4(s0)
or a0,s1,zero
lw t9,-0x5db8(gp)
jalr t9
_sra a2,a3,0x1f
lw v0,0x0(s0)
andi v0,v0,0x2
beq v0,zero,0x00152af4
_lw gp,0x18(sp)
b 0x00152b0c
_lw v0,0xc(s0)
(translation_unit "/* gold::Object_attribute::write(int, std::vector<unsigned char, std::allocator<unsigned char> >*)\n   const */\n\nvoid __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Object_attribute::" identifier : : identifier : :) (function_declarator "write(Object_attribute *this,int param_1,vector *param_2)" identifier (parameter_list "(Object_attribute *this,int param_1,vector *param_2)" ( (parameter_declaration "Object_attribute *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "vector *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (expression_statement "uVar1 = *(uint *)this;" (assignment_expression "uVar1 = *(uint *)this" identifier = (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }" if (parenthesized_expression "(((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0))" ( (binary_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)" (parenthesized_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))))" ( (binary_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" (parenthesized_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0))" ( (binary_expression "((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)" (parenthesized_expression "((uVar1 & 1) == 0)" ( (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(*(int *)(this + 4) == 0)" ( (binary_expression "*(int *)(this + 4) == 0" (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) == number_literal) ))) )) && (parenthesized_expression "(((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" ( (parenthesized_expression "((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))" ( (binary_expression "(uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)" (binary_expression "(uVar1 & 2) == 0" (parenthesized_expression "(uVar1 & 2)" ( (binary_expression "uVar1 & 2" identifier & number_literal) )) == number_literal) || (parenthesized_expression "(*(int *)(this + 0xc) == 0)" ( (binary_expression "*(int *)(this + 0xc) == 0" (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) )))) == number_literal) ))) )) ))) )) && (parenthesized_expression "((uVar1 & 4) == 0)" ( (binary_expression "(uVar1 & 4) == 0" (parenthesized_expression "(uVar1 & 4)" ( (binary_expression "uVar1 & 4" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2,param_1,param_1 >> 0x1f,param_1)" ( identifier , identifier , (binary_expression "param_1 >> 0x1f" identifier >> number_literal) , identifier ))) ;) (if_statement "if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" if (parenthesized_expression "((*(uint *)this & 1) == 0)" ( (binary_expression "(*(uint *)this & 1) == 0" (parenthesized_expression "(*(uint *)this & 1)" ( (binary_expression "*(uint *)this & 1" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }" { (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" if (parenthesized_expression "((*(uint *)this & 2) != 0)" ( (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" ( (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" { (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" identifier = (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" statement_identifier : (labeled_statement "std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" statement_identifier (ERROR "::vector<unsigned_char,std:" : : (comma_expression "vector<unsigned_char,std" (binary_expression "vector<unsigned_char" identifier < identifier) , identifier) :) : (expression_statement "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert" identifier < (binary_expression "unsigned_char>>::\n      _M_range_insert" identifier >> (ERROR "::" : :) identifier)) < identifier) (ERROR "*" *) > (parenthesized_expression "(param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" ( (comma_expression "param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" identifier , (comma_expression "*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (comma_expression "*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(int *)(this + 8)" * (cast_expression "(int *)(this + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) , (binary_expression "*(int *)(this + 8) + iVar2 + 1" (binary_expression "*(int *)(this + 8) + iVar2" (pointer_expression "*(int *)(this + 8)" * (cast_expression "(int *)(this + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) + identifier) + number_literal)))) ))) ;))) (return_statement "return;" return ;) })) }) (else_clause "else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" else (compound_statement "{\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" { (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2)" ( identifier ))) ;) (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" if (parenthesized_expression "((*(uint *)this & 2) != 0)" ( (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" ( (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" { (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" identifier = (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_00152b0c;" goto statement_identifier ;) })) }))) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void write(Object_attribute * this, int tag,\n   vector<unsigned_char,_std::allocator<unsigned_char>_> * buffer) */\n\nssize_t __thiscall\ngold::Object_attribute::write(Object_attribute *this,int __fd,void *__buf,size_t __n)\n\n{\n  uint uVar1;\n  size_type sVar2;\n  ssize_t sVar3;\n  pointer pcVar4;\n  \n  uVar1 = this->type_;\n  if (((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))\n  {\n    return 0;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd);\n  if ((this->type_ & 1U) == 0) {\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }\n  return uVar1;\n}\n\n" comment (function_definition "ssize_t __thiscall\ngold::Object_attribute::write(Object_attribute *this,int __fd,void *__buf,size_t __n)\n\n{\n  uint uVar1;\n  size_type sVar2;\n  ssize_t sVar3;\n  pointer pcVar4;\n  \n  uVar1 = this->type_;\n  if (((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))\n  {\n    return 0;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd);\n  if ((this->type_ & 1U) == 0) {\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }\n  return uVar1;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Object_attribute::" identifier : : identifier : :) (function_declarator "write(Object_attribute *this,int __fd,void *__buf,size_t __n)" identifier (parameter_list "(Object_attribute *this,int __fd,void *__buf,size_t __n)" ( (parameter_declaration "Object_attribute *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "int __fd" primitive_type identifier) , (parameter_declaration "void *__buf" primitive_type (pointer_declarator "*__buf" * identifier)) , (parameter_declaration "size_t __n" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  size_type sVar2;\n  ssize_t sVar3;\n  pointer pcVar4;\n  \n  uVar1 = this->type_;\n  if (((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))\n  {\n    return 0;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd);\n  if ((this->type_ & 1U) == 0) {\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }\n  return uVar1;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "size_type sVar2;" type_identifier identifier ;) (declaration "ssize_t sVar3;" primitive_type identifier ;) (declaration "pointer pcVar4;" type_identifier identifier ;) (expression_statement "uVar1 = this->type_;" (assignment_expression "uVar1 = this->type_" identifier = (field_expression "this->type_" identifier -> field_identifier)) ;) (if_statement "if (((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))\n  {\n    return 0;\n  }" if (parenthesized_expression "(((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0))" ( (binary_expression "((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((uVar1 & 4) == 0)" (parenthesized_expression "((((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0))))" ( (binary_expression "(((uVar1 & 1) == 0) || (this->int_value_ == 0)) &&\n      (((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))" (parenthesized_expression "(((uVar1 & 1) == 0) || (this->int_value_ == 0))" ( (binary_expression "((uVar1 & 1) == 0) || (this->int_value_ == 0)" (parenthesized_expression "((uVar1 & 1) == 0)" ( (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(this->int_value_ == 0)" ( (binary_expression "this->int_value_ == 0" (field_expression "this->int_value_" identifier -> field_identifier) == number_literal) ))) )) && (parenthesized_expression "(((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))" ( (parenthesized_expression "((uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0))" ( (binary_expression "(uVar1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)" (binary_expression "(uVar1 & 2) == 0" (parenthesized_expression "(uVar1 & 2)" ( (binary_expression "uVar1 & 2" identifier & number_literal) )) == number_literal) || (parenthesized_expression "((this->string_value_)._M_string_length == 0)" ( (binary_expression "(this->string_value_)._M_string_length == 0" (field_expression "(this->string_value_)._M_string_length" (parenthesized_expression "(this->string_value_)" ( (field_expression "this->string_value_" identifier -> field_identifier) )) . field_identifier) == number_literal) ))) )) ))) )) && (parenthesized_expression "((uVar1 & 4) == 0)" ( (binary_expression "(uVar1 & 4) == 0" (parenthesized_expression "(uVar1 & 4)" ( (binary_expression "uVar1 & 4" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf,__fd,__fd >> 0x1f,__fd)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(__buf,__fd,__fd >> 0x1f,__fd)" ( identifier , identifier , (binary_expression "__fd >> 0x1f" identifier >> number_literal) , identifier ))) ;) (if_statement "if ((this->type_ & 1U) == 0) {\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }" if (parenthesized_expression "((this->type_ & 1U) == 0)" ( (binary_expression "(this->type_ & 1U) == 0" (parenthesized_expression "(this->type_ & 1U)" ( (binary_expression "this->type_ & 1U" (field_expression "this->type_" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }\n  }" { (expression_statement "uVar1 = this->type_ & 2;" (assignment_expression "uVar1 = this->type_ & 2" identifier = (binary_expression "this->type_ & 2" (field_expression "this->type_" identifier -> field_identifier) & number_literal)) ;) (if_statement "if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }" if (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      sVar2 = (this->string_value_)._M_string_length;\nLAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;\n      sVar3 = sVar2 + 1;\n      std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);\n      return sVar3;\n    }" { (expression_statement "sVar2 = (this->string_value_)._M_string_length;" (assignment_expression "sVar2 = (this->string_value_)._M_string_length" identifier = (field_expression "(this->string_value_)._M_string_length" (parenthesized_expression "(this->string_value_)" ( (field_expression "this->string_value_" identifier -> field_identifier) )) . field_identifier)) ;) (labeled_statement "LAB_00152b0c:\n      pcVar4 = (this->string_value_)._M_dataplus._M_p;" statement_identifier : (expression_statement "pcVar4 = (this->string_value_)._M_dataplus._M_p;" (assignment_expression "pcVar4 = (this->string_value_)._M_dataplus._M_p" identifier = (field_expression "(this->string_value_)._M_dataplus._M_p" (field_expression "(this->string_value_)._M_dataplus" (parenthesized_expression "(this->string_value_)" ( (field_expression "this->string_value_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;)) (expression_statement "sVar3 = sVar2 + 1;" (assignment_expression "sVar3 = sVar2 + 1" identifier = (binary_expression "sVar2 + 1" identifier + number_literal)) ;) (labeled_statement "std::vector<unsigned_char,_std::allocator<unsigned_char>_>::\n      _M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);" statement_identifier (ERROR "::vector<unsigned_char,_std::allocator<unsigned_char>_>:" : : (comma_expression "vector<unsigned_char,_std" (binary_expression "vector<unsigned_char" identifier < identifier) , identifier) : : (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > :) : (expression_statement "_M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3);" (binary_expression "_M_range_insert<unsigned_char_const*>\n                ((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3)" (binary_expression "_M_range_insert<unsigned_char_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "((vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3)" ( (parenthesized_expression "(vector<unsigned_char,_std::allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3)" ( (ERROR "vector<unsigned_char,_std::" (comma_expression "vector<unsigned_char,_std" (binary_expression "vector<unsigned_char" identifier < identifier) , identifier) : :) (comma_expression "allocator<unsigned_char>_> *)__buf,\n                 *(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3" (binary_expression "allocator<unsigned_char>_> *)__buf" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > (pointer_expression "*)__buf" * (ERROR ")" )) identifier)) , (comma_expression "*(undefined4 *)((int)__buf + 4),pcVar4,pcVar4 + sVar3" (pointer_expression "*(undefined4 *)((int)__buf + 4)" * (cast_expression "(undefined4 *)((int)__buf + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__buf + 4)" ( (binary_expression "(int)__buf + 4" (cast_expression "(int)__buf" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) , (comma_expression "pcVar4,pcVar4 + sVar3" identifier , (binary_expression "pcVar4 + sVar3" identifier + identifier)))) )) ))) ;)) (return_statement "return sVar3;" return identifier ;) })) }) (else_clause "else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }" else (compound_statement "{\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);\n    uVar1 = this->type_ & 2;\n    if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }\n  }" { (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(__buf)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(__buf)" ( identifier ))) ;) (expression_statement "uVar1 = this->type_ & 2;" (assignment_expression "uVar1 = this->type_ & 2" identifier = (binary_expression "this->type_ & 2" (field_expression "this->type_" identifier -> field_identifier) & number_literal)) ;) (if_statement "if (uVar1 != 0) {\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }" if (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      sVar2 = (this->string_value_)._M_string_length;\n      goto LAB_00152b0c;\n    }" { (expression_statement "sVar2 = (this->string_value_)._M_string_length;" (assignment_expression "sVar2 = (this->string_value_)._M_string_length" identifier = (field_expression "(this->string_value_)._M_string_length" (parenthesized_expression "(this->string_value_)" ( (field_expression "this->string_value_" identifier -> field_identifier) )) . field_identifier)) ;) (goto_statement "goto LAB_00152b0c;" goto statement_identifier ;) })) }))) (return_statement "return uVar1;" return identifier ;) })))
(translation_unit "void __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}\n\n" (function_definition "void __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Object_attribute::" identifier : : identifier : :) (function_declarator "write(Object_attribute *this,int param_1,vector *param_2)" identifier (parameter_list "(Object_attribute *this,int param_1,vector *param_2)" ( (parameter_declaration "Object_attribute *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "vector *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (expression_statement "uVar1 = *(uint *)this;" (assignment_expression "uVar1 = *(uint *)this" identifier = (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }" if (parenthesized_expression "(((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0))" ( (binary_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)" (parenthesized_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))))" ( (binary_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" (parenthesized_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0))" ( (binary_expression "((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)" (parenthesized_expression "((uVar1 & 1) == 0)" ( (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(*(int *)(this + 4) == 0)" ( (binary_expression "*(int *)(this + 4) == 0" (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) == number_literal) ))) )) && (parenthesized_expression "(((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" ( (parenthesized_expression "((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))" ( (binary_expression "(uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)" (binary_expression "(uVar1 & 2) == 0" (parenthesized_expression "(uVar1 & 2)" ( (binary_expression "uVar1 & 2" identifier & number_literal) )) == number_literal) || (parenthesized_expression "(*(int *)(this + 0xc) == 0)" ( (binary_expression "*(int *)(this + 0xc) == 0" (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) )))) == number_literal) ))) )) ))) )) && (parenthesized_expression "((uVar1 & 4) == 0)" ( (binary_expression "(uVar1 & 4) == 0" (parenthesized_expression "(uVar1 & 4)" ( (binary_expression "uVar1 & 4" identifier & number_literal) )) == number_literal) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2,param_1,param_1 >> 0x1f,param_1)" ( identifier , identifier , (binary_expression "param_1 >> 0x1f" identifier >> number_literal) , identifier ))) ;) (if_statement "if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" if (parenthesized_expression "((*(uint *)this & 1) == 0)" ( (binary_expression "(*(uint *)this & 1) == 0" (parenthesized_expression "(*(uint *)this & 1)" ( (binary_expression "*(uint *)this & 1" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }" { (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" if (parenthesized_expression "((*(uint *)this & 2) != 0)" ( (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" ( (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" { (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" identifier = (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" statement_identifier : (labeled_statement "std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" statement_identifier (ERROR "::vector<unsigned_char,std:" : : (comma_expression "vector<unsigned_char,std" (binary_expression "vector<unsigned_char" identifier < identifier) , identifier) :) : (expression_statement "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert" identifier < (binary_expression "unsigned_char>>::\n      _M_range_insert" identifier >> (ERROR "::" : :) identifier)) < identifier) (ERROR "*" *) > (parenthesized_expression "(param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" ( (comma_expression "param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" identifier , (comma_expression "*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (comma_expression "*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(int *)(this + 8)" * (cast_expression "(int *)(this + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) , (binary_expression "*(int *)(this + 8) + iVar2 + 1" (binary_expression "*(int *)(this + 8) + iVar2" (pointer_expression "*(int *)(this + 8)" * (cast_expression "(int *)(this + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) + identifier) + number_literal)))) ))) ;))) (return_statement "return;" return ;) })) }) (else_clause "else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" else (compound_statement "{\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" { (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" ( (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" * (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2)" ( identifier ))) ;) (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" if (parenthesized_expression "((*(uint *)this & 2) != 0)" ( (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" ( (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" * (cast_expression "(uint *)this" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" { (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" identifier = (pointer_expression "*(int *)(this + 0xc)" * (cast_expression "(int *)(this + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_00152b0c;" goto statement_identifier ;) })) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ms_call_modifier __thiscall) (ERROR IDENT : : IDENT : :) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , (binary_expression IDENT >> LIT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (labeled_statement statement_identifier : (labeled_statement statement_identifier (ERROR : : (comma_expression (binary_expression IDENT < IDENT) , IDENT) :) : (expression_statement (binary_expression (binary_expression (binary_expression IDENT < (binary_expression IDENT >> (ERROR : :) IDENT)) < IDENT) (ERROR *) > (parenthesized_expression ( (comma_expression IDENT , (comma_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (comma_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) + LIT)))) ))) ;))) (return_statement return ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) })) }))) (return_statement return ;) })))
(function_definition "void __thiscall gold::Object_attribute::write(Object_attribute *this,int param_1,vector *param_2)\n\n{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" (primitive_type "void") (ms_call_modifier "__thiscall" (__thiscall "__thiscall")) (ERROR "gold::Object_attribute::" (identifier "gold") (: ":") (: ":") (identifier "Object_attribute") (: ":") (: ":")) (function_declarator "write(Object_attribute *this,int param_1,vector *param_2)" (identifier "write") (parameter_list "(Object_attribute *this,int param_1,vector *param_2)" (( "(") (parameter_declaration "Object_attribute *this" (type_identifier "Object_attribute") (pointer_declarator "*this" (* "*") (identifier "this"))) (, ",") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "vector *param_2" (type_identifier "vector") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  \n  uVar1 = *(uint *)this;\n  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }\n  (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);\n  if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (expression_statement "uVar1 = *(uint *)this;" (assignment_expression "uVar1 = *(uint *)this" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)this" (* "*") (cast_expression "(uint *)this" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this")))) (; ";")) (if_statement "if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {\n    return;\n  }" (if "if") (parenthesized_expression "(((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0))" (( "(") (binary_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)" (parenthesized_expression "((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))))" (( "(") (binary_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&\n      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" (parenthesized_expression "(((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0))" (( "(") (binary_expression "((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)" (parenthesized_expression "((uVar1 & 1) == 0)" (( "(") (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" (( "(") (binary_expression "uVar1 & 1" (identifier "uVar1") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*(int *)(this + 4) == 0)" (( "(") (binary_expression "*(int *)(this + 4) == 0" (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))" (( "(") (parenthesized_expression "((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0))" (( "(") (binary_expression "(uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)" (binary_expression "(uVar1 & 2) == 0" (parenthesized_expression "(uVar1 & 2)" (( "(") (binary_expression "uVar1 & 2" (identifier "uVar1") (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(*(int *)(this + 0xc) == 0)" (( "(") (binary_expression "*(int *)(this + 0xc) == 0" (pointer_expression "*(int *)(this + 0xc)" (* "*") (cast_expression "(int *)(this + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0xc)" (( "(") (binary_expression "this + 0xc" (identifier "this") (+ "+") (number_literal "0xc")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((uVar1 & 4) == 0)" (( "(") (binary_expression "(uVar1 & 4) == 0" (parenthesized_expression "(uVar1 & 4)" (( "(") (binary_expression "uVar1 & 4" (identifier "uVar1") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" (( "(") (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" (* "*") (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_write_unsigned_LEB_128_004c3488"))) () ")")) (argument_list "(param_2,param_1,param_1 >> 0x1f,param_1)" (( "(") (identifier "param_2") (, ",") (identifier "param_1") (, ",") (binary_expression "param_1 >> 0x1f" (identifier "param_1") (>> ">>") (number_literal "0x1f")) (, ",") (identifier "param_1") () ")"))) (; ";")) (if_statement "if ((*(uint *)this & 1) == 0) {\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }\n  else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" (if "if") (parenthesized_expression "((*(uint *)this & 1) == 0)" (( "(") (binary_expression "(*(uint *)this & 1) == 0" (parenthesized_expression "(*(uint *)this & 1)" (( "(") (binary_expression "*(uint *)this & 1" (pointer_expression "*(uint *)this" (* "*") (cast_expression "(uint *)this" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }\n  }" ({ "{") (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" (if "if") (parenthesized_expression "((*(uint *)this & 2) != 0)" (( "(") (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" (( "(") (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" (* "*") (cast_expression "(uint *)this" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\nLAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);\n      return;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(this + 0xc)" (* "*") (cast_expression "(int *)(this + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0xc)" (( "(") (binary_expression "this + 0xc" (identifier "this") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (labeled_statement "LAB_00152b0c:\n      std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" (statement_identifier "LAB_00152b0c") (: ":") (labeled_statement "std::vector<unsigned_char,std::allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" (statement_identifier "std") (ERROR "::vector<unsigned_char,std:" (: ":") (: ":") (comma_expression "vector<unsigned_char,std" (binary_expression "vector<unsigned_char" (identifier "vector") (< "<") (identifier "unsigned_char")) (, ",") (identifier "std")) (: ":")) (: ":") (expression_statement "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1);" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const*>\n                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert<unsigned_char_const" (binary_expression "allocator<unsigned_char>>::\n      _M_range_insert" (identifier "allocator") (< "<") (binary_expression "unsigned_char>>::\n      _M_range_insert" (identifier "unsigned_char") (>> ">>") (ERROR "::" (: ":") (: ":")) (identifier "_M_range_insert"))) (< "<") (identifier "unsigned_char_const")) (ERROR "*" (* "*")) (> ">") (parenthesized_expression "(param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1)" (( "(") (comma_expression "param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (identifier "param_2") (, ",") (comma_expression "*(undefined4 *)(param_2 + 4),*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(undefined4 *)(param_2 + 4)" (* "*") (cast_expression "(undefined4 *)(param_2 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (, ",") (comma_expression "*(int *)(this + 8),\n                 *(int *)(this + 8) + iVar2 + 1" (pointer_expression "*(int *)(this + 8)" (* "*") (cast_expression "(int *)(this + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 8)" (( "(") (binary_expression "this + 8" (identifier "this") (+ "+") (number_literal "8")) () ")")))) (, ",") (binary_expression "*(int *)(this + 8) + iVar2 + 1" (binary_expression "*(int *)(this + 8) + iVar2" (pointer_expression "*(int *)(this + 8)" (* "*") (cast_expression "(int *)(this + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 8)" (( "(") (binary_expression "this + 8" (identifier "this") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar2")) (+ "+") (number_literal "1"))))) () ")"))) (; ";")))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" (else "else") (compound_statement "{\n    (*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);\n    if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }\n  }" ({ "{") (expression_statement "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2);" (call_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)(param_2)" (parenthesized_expression "(*(code *)PTR_write_unsigned_LEB_128_004c3488)" (( "(") (pointer_expression "*(code *)PTR_write_unsigned_LEB_128_004c3488" (* "*") (cast_expression "(code *)PTR_write_unsigned_LEB_128_004c3488" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_write_unsigned_LEB_128_004c3488"))) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))) (; ";")) (if_statement "if ((*(uint *)this & 2) != 0) {\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" (if "if") (parenthesized_expression "((*(uint *)this & 2) != 0)" (( "(") (binary_expression "(*(uint *)this & 2) != 0" (parenthesized_expression "(*(uint *)this & 2)" (( "(") (binary_expression "*(uint *)this & 2" (pointer_expression "*(uint *)this" (* "*") (cast_expression "(uint *)this" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar2 = *(int *)(this + 0xc);\n      goto LAB_00152b0c;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(this + 0xc);" (assignment_expression "iVar2 = *(int *)(this + 0xc)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(this + 0xc)" (* "*") (cast_expression "(int *)(this + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0xc)" (( "(") (binary_expression "this + 0xc" (identifier "this") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (goto_statement "goto LAB_00152b0c;" (goto "goto") (statement_identifier "LAB_00152b0c") (; ";")) (} "}"))) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void write(Object_attribute * this, int tag,
   vector<unsigned_char,_std::allocator<unsigned_char>_> * buffer) */

ssize_t __thiscall
gold::type_1::function_1(type_1 *this,int var_2,void *__buf,size_t __n)

{
  type_2 var_1;
  type_3 var_3;
  ssize_t var_10;
  type_4 var_9;
  
  var_1 = this->type_;
  if (((((var_1 & 1) == 0) || (this->int_value_ == 0)) &&
      (((var_1 & 2) == 0 || ((this->string_value_)._M_string_length == 0)))) && ((var_1 & 4) == 0))
  {
    return 0;
  }
  (*(type_5 *)PTR_write_unsigned_LEB_128_004c3488)(__buf,var_2,var_2 >> 0x1f,var_2);
  if ((this->type_ & 1U) == 0) {
    var_1 = this->type_ & 2;
    if (var_1 != 0) {
      var_3 = (this->string_value_)._M_string_length;
LAB_00152b0c:
      var_9 = (this->string_value_)._M_dataplus._M_p;
      var_10 = var_3 + 1;
      std::vector<var_7,_std::var_6<var_7>var_8>::
      var_4<var_5*>
                ((vector<var_7,_std::var_6<var_7>var_8> *)__buf,
                 *(type_6 *)((int)__buf + 4),var_9,var_9 + var_10);
      return var_10;
    }
  }
  else {
    (*(type_5 *)PTR_write_unsigned_LEB_128_004c3488)(__buf);
    var_1 = this->type_ & 2;
    if (var_1 != 0) {
      var_3 = (this->string_value_)._M_string_length;
      goto LAB_00152b0c;
    }
  }
  return var_1;
}


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

/* gold::Object_attribute::MASKED(int, std::vector<unsigned char, std::allocator<unsigned char> >*)
   const */

void __thiscall gold::Object_attribute::MASKED(Object_attribute *this,int param_1,vector *param_2)

{
  uint uVar1;
  int iVar2;
  
  uVar1 = *(uint *)this;
  if (((((uVar1 & 1) == 0) || (*(int *)(this + 4) == 0)) &&
      (((uVar1 & 2) == 0 || (*(int *)(this + 0xc) == 0)))) && ((uVar1 & 4) == 0)) {
    return;
  }
  (*(code *)PTR_MASKED_unsigned_LEB_128_004c3488)(param_2,param_1,param_1 >> 0x1f,param_1);
  if ((*(uint *)this & 1) == 0) {
    if ((*(uint *)this & 2) != 0) {
      iVar2 = *(int *)(this + 0xc);
LAB_00152b0c:
      std::vector<unsigned_char,std::allocator<unsigned_char>>::
      _M_range_insert<unsigned_char_const*>
                (param_2,*(undefined4 *)(param_2 + 4),*(int *)(this + 8),
                 *(int *)(this + 8) + iVar2 + 1);
      return;
    }
  }
  else {
    (*(code *)PTR_MASKED_unsigned_LEB_128_004c3488)(param_2);
    if ((*(uint *)this & 2) != 0) {
      iVar2 = *(int *)(this + 0xc);
      goto LAB_00152b0c;
    }
  }
  return;
}

