
/* DWARF original prototype: void
   emplace_back<gold::Output_section::Input_section>(vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
   * this, Input_section * __args#0) */

void __thiscall
std::
vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>::
emplace_back<gold::Output_section::Input_section>
          (vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
           *this,Input_section *__args_0)

{
  anon_union_8_4_139239c7_for_u2_ *paVar1;
  pointer pIVar2;
  pointer pIVar3;
  ulong uVar4;
  anon_union_8_2_227b06d7_for_u1_ aVar5;
  anon_union_8_4_139239c7_for_u2_ aVar6;
  anon_union_8_4_139239c7_for_u2_ aVar7;
  uint uVar8;
  undefined4 uVar9;
  ulong uVar10;
  pointer pIVar11;
  pointer pIVar12;
  pointer pIVar13;
  ulong uVar14;
  pointer pIVar15;
  pointer pIVar16;
  long lVar17;
  
  pIVar2 = (this->
           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
           )._M_impl._M_finish;
  if (pIVar2 != (this->
                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
                )._M_impl._M_end_of_storage) {
    uVar8 = __args_0->p2align_;
    aVar5 = __args_0->u1_;
    pIVar2->shndx_ = __args_0->shndx_;
    pIVar2->p2align_ = uVar8;
    pIVar2->u1_ = aVar5;
    uVar8 = __args_0->section_order_index_;
    uVar9 = *(undefined4 *)&__args_0->field_0x1c;
    pIVar2->u2_ = __args_0->u2_;
    pIVar2->section_order_index_ = uVar8;
    *(undefined4 *)&pIVar2->field_0x1c = uVar9;
    (this->
    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
    )._M_impl._M_finish = pIVar2 + 1;
    return;
  }
  pIVar3 = (this->
           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
           )._M_impl._M_start;
  lVar17 = (long)pIVar2 - (long)pIVar3;
  uVar10 = lVar17 >> 5;
  if (uVar10 == 0) {
    uVar14 = 0x20;
  }
  else {
    uVar4 = uVar10 * 2;
    uVar14 = 0xffffffffffffffe0;
    if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {
      if (uVar4 == 0) {
        pIVar16 = (pointer)0x20;
        pIVar12 = (pointer)0x0;
        pIVar11 = (pointer)0x0;
        goto LAB_002788eb;
      }
      uVar14 = uVar10 << 6;
    }
  }
  pIVar11 = (pointer)operator_new(uVar14);
  pIVar12 = (pointer)((long)&pIVar11->shndx_ + uVar14);
  pIVar16 = pIVar11 + 1;
LAB_002788eb:
  aVar5 = __args_0->u1_;
  aVar6 = __args_0->u2_;
  aVar7 = *(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_;
  *(undefined8 *)((long)pIVar11 + lVar17) = *(undefined8 *)__args_0;
  *(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1) = aVar5;
  paVar1 = (anon_union_8_4_139239c7_for_u2_ *)((long)pIVar11 + lVar17 + 0x10);
  *paVar1 = aVar6;
  paVar1[1] = aVar7;
  pIVar13 = pIVar11;
  pIVar15 = pIVar3;
  if (pIVar2 != pIVar3) {
    do {
      uVar8 = pIVar15->p2align_;
      aVar5 = pIVar15->u1_;
      pIVar16 = pIVar15 + 1;
      pIVar13->shndx_ = pIVar15->shndx_;
      pIVar13->p2align_ = uVar8;
      pIVar13->u1_ = aVar5;
      uVar8 = pIVar15->section_order_index_;
      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;
      pIVar13->u2_ = pIVar15->u2_;
      pIVar13->section_order_index_ = uVar8;
      *(undefined4 *)&pIVar13->field_0x1c = uVar9;
      pIVar13 = pIVar13 + 1;
      pIVar15 = pIVar16;
    } while (pIVar2 != pIVar16);
    pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +
                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U));
  }
  if (pIVar3 != (pointer)0x0) {
    operator_delete(pIVar3);
  }
  (this->
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  )._M_impl._M_start = pIVar11;
  (this->
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  )._M_impl._M_finish = pIVar16;
  (this->
  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
  )._M_impl._M_end_of_storage = pIVar12;
  return;
}



void FUN_00278860(long *param_1,undefined8 *param_2)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  ulong uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  long lVar13;
  
  puVar1 = (undefined8 *)param_1[1];
  if (puVar1 != (undefined8 *)param_1[2]) {
    uVar4 = param_2[1];
    *puVar1 = *param_2;
    puVar1[1] = uVar4;
    uVar4 = param_2[3];
    puVar1[2] = param_2[2];
    puVar1[3] = uVar4;
    param_1[1] = (long)(puVar1 + 4);
    return;
  }
  puVar2 = (undefined8 *)*param_1;
  lVar13 = (long)puVar1 - (long)puVar2;
  uVar7 = lVar13 >> 5;
  if (uVar7 == 0) {
    lVar10 = 0x20;
  }
  else {
    uVar3 = uVar7 * 2;
    lVar10 = -0x20;
    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {
      if (uVar3 == 0) {
        puVar12 = (undefined8 *)0x20;
        lVar10 = 0;
        puVar8 = (undefined8 *)0x0;
        goto LAB_002788eb;
      }
      lVar10 = uVar7 << 6;
    }
  }
  puVar8 = (undefined8 *)FUN_00337270(lVar10);
  lVar10 = (long)puVar8 + lVar10;
  puVar12 = puVar8 + 4;
LAB_002788eb:
  uVar4 = param_2[1];
  uVar5 = param_2[2];
  uVar6 = param_2[3];
  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;
  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;
  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);
  *puVar9 = uVar5;
  puVar9[1] = uVar6;
  puVar9 = puVar8;
  puVar11 = puVar2;
  if (puVar1 != puVar2) {
    do {
      uVar4 = puVar11[1];
      puVar12 = puVar11 + 4;
      *puVar9 = *puVar11;
      puVar9[1] = uVar4;
      uVar4 = puVar11[3];
      puVar9[2] = puVar11[2];
      puVar9[3] = uVar4;
      puVar9 = puVar9 + 4;
      puVar11 = puVar12;
    } while (puVar1 != puVar12);
    puVar12 = (undefined8 *)
              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);
  }
  if (puVar2 != (undefined8 *)0x0) {
    FUN_00338a40(puVar2);
  }
  *param_1 = (long)puVar8;
  param_1[1] = (long)puVar12;
  param_1[2] = lVar10;
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x18
MOV RBX,qword ptr [RDI + 0x8]
CMP RBX,qword ptr [RDI + 0x10]
JZ 0x002788a0
MOVDQU XMM2,xmmword ptr [RSI]
ADD RBX,0x20
MOVUPS xmmword ptr [RBX + -0x20],XMM2
MOVDQU XMM3,xmmword ptr [RSI + 0x10]
MOVUPS xmmword ptr [RBX + -0x10],XMM3
MOV qword ptr [RDI + 0x8],RBX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R14,qword ptr [RDI]
MOV R15,RBX
MOV RBP,RSI
MOV R12,RDI
SUB R15,R14
MOV RAX,R15
SAR RAX,0x5
JZ 0x002789b0
LEA RCX,[RAX + RAX*0x1]
MOV RDX,-0x20
CMP RAX,RCX
JBE 0x00278980
MOV RDI,RDX
MOV qword ptr [RSP],RDX
CALL 0x00337270
MOV RDX,qword ptr [RSP]
MOV R13,RAX
LEA RAX,[RAX + RDX*0x1]
LEA RDX,[R13 + 0x20]
MOVDQU XMM4,xmmword ptr [RBP]
MOVDQU XMM5,xmmword ptr [RBP + 0x10]
MOVUPS xmmword ptr [R13 + R15*0x1],XMM4
MOVUPS xmmword ptr [R13 + R15*0x1 + 0x10],XMM5
CMP RBX,R14
JZ 0x0027893e
MOV RDX,R14
MOV RCX,R13
NOP dword ptr [RAX]
MOVDQU XMM0,xmmword ptr [RDX]
ADD RDX,0x20
ADD RCX,0x20
MOVUPS xmmword ptr [RCX + -0x20],XMM0
MOVDQU XMM1,xmmword ptr [RDX + -0x10]
MOVUPS xmmword ptr [RCX + -0x10],XMM1
CMP RBX,RDX
JNZ 0x00278910
SUB RBX,0x20
SUB RBX,R14
AND RBX,-0x20
LEA RDX,[R13 + RBX*0x1 + 0x40]
TEST R14,R14
JZ 0x0027895d
MOV RDI,R14
MOV qword ptr [RSP + 0x8],RAX
MOV qword ptr [RSP],RDX
CALL 0x00338a40
MOV RAX,qword ptr [RSP + 0x8]
MOV RDX,qword ptr [RSP]
MOV qword ptr [R12],R13
MOV qword ptr [R12 + 0x8],RDX
MOV qword ptr [R12 + 0x10],RAX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RSI,0x7ffffffffffffff
CMP RCX,RSI
JA 0x002788d0
TEST RCX,RCX
JNZ 0x002789ba
MOV EDX,0x20
XOR EAX,EAX
XOR R13D,R13D
JMP 0x002788eb
MOV EDX,0x20
JMP 0x002788d0
SHL RAX,0x6
MOV RDX,RAX
JMP 0x002788d0
(translation_unit "void FUN_00278860(long *param_1,undefined8 *param_2)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}\n\n" (function_definition "void FUN_00278860(long *param_1,undefined8 *param_2)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" primitive_type (function_declarator "FUN_00278860(long *param_1,undefined8 *param_2)" identifier (parameter_list "(long *param_1,undefined8 *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined8 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (expression_statement "puVar1 = (undefined8 *)param_1[1];" (assignment_expression "puVar1 = (undefined8 *)param_1[1]" identifier = (cast_expression "(undefined8 *)param_1[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (if_statement "if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" if (parenthesized_expression "(puVar1 != (undefined8 *)param_1[2])" ( (binary_expression "puVar1 != (undefined8 *)param_1[2]" identifier != (cast_expression "(undefined8 *)param_1[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (compound_statement "{\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" { (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "*puVar1 = *param_2;" (assignment_expression "*puVar1 = *param_2" (pointer_expression "*puVar1" * identifier) = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar1[1] = uVar4;" (assignment_expression "puVar1[1] = uVar4" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = param_2[3];" (assignment_expression "uVar4 = param_2[3]" identifier = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) (expression_statement "puVar1[2] = param_2[2];" (assignment_expression "puVar1[2] = param_2[2]" (subscript_expression "puVar1[2]" identifier [ number_literal ]) = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "puVar1[3] = uVar4;" (assignment_expression "puVar1[3] = uVar4" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = (long)(puVar1 + 4);" (assignment_expression "param_1[1] = (long)(puVar1 + 4)" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(long)(puVar1 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(puVar1 + 4)" ( (binary_expression "puVar1 + 4" identifier + number_literal) )))) ;) (return_statement "return;" return ;) })) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "lVar13 = (long)puVar1 - (long)puVar2;" (assignment_expression "lVar13 = (long)puVar1 - (long)puVar2" identifier = (binary_expression "(long)puVar1 - (long)puVar2" (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "uVar7 = lVar13 >> 5;" (assignment_expression "uVar7 = lVar13 >> 5" identifier = (binary_expression "lVar13 >> 5" identifier >> number_literal)) ;) (if_statement "if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n    lVar10 = 0x20;\n  }" { (expression_statement "lVar10 = 0x20;" (assignment_expression "lVar10 = 0x20" identifier = number_literal) ;) }) (else_clause "else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" else (compound_statement "{\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" { (expression_statement "uVar3 = uVar7 * 2;" (assignment_expression "uVar3 = uVar7 * 2" identifier = (binary_expression "uVar7 * 2" identifier * number_literal)) ;) (expression_statement "lVar10 = -0x20;" (assignment_expression "lVar10 = -0x20" identifier = number_literal) ;) (if_statement "if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" if (parenthesized_expression "((uVar7 <= uVar3) && (uVar3 < 0x800000000000000))" ( (binary_expression "(uVar7 <= uVar3) && (uVar3 < 0x800000000000000)" (parenthesized_expression "(uVar7 <= uVar3)" ( (binary_expression "uVar7 <= uVar3" identifier <= identifier) )) && (parenthesized_expression "(uVar3 < 0x800000000000000)" ( (binary_expression "uVar3 < 0x800000000000000" identifier < number_literal) ))) )) (compound_statement "{\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" { (if_statement "if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" { (expression_statement "puVar12 = (undefined8 *)0x20;" (assignment_expression "puVar12 = (undefined8 *)0x20" identifier = (cast_expression "(undefined8 *)0x20" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar10 = 0;" (assignment_expression "lVar10 = 0" identifier = number_literal) ;) (expression_statement "puVar8 = (undefined8 *)0x0;" (assignment_expression "puVar8 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_002788eb;" goto statement_identifier ;) })) (expression_statement "lVar10 = uVar7 << 6;" (assignment_expression "lVar10 = uVar7 << 6" identifier = (binary_expression "uVar7 << 6" identifier << number_literal)) ;) })) }))) (expression_statement "puVar8 = (undefined8 *)FUN_00337270(lVar10);" (assignment_expression "puVar8 = (undefined8 *)FUN_00337270(lVar10)" identifier = (cast_expression "(undefined8 *)FUN_00337270(lVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00337270(lVar10)" identifier (argument_list "(lVar10)" ( identifier ))))) ;) (expression_statement "lVar10 = (long)puVar8 + lVar10;" (assignment_expression "lVar10 = (long)puVar8 + lVar10" identifier = (binary_expression "(long)puVar8 + lVar10" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (expression_statement "puVar12 = puVar8 + 4;" (assignment_expression "puVar12 = puVar8 + 4" identifier = (binary_expression "puVar8 + 4" identifier + number_literal)) ;) (labeled_statement "LAB_002788eb:\n  uVar4 = param_2[1];" statement_identifier : (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;)) (expression_statement "uVar5 = param_2[2];" (assignment_expression "uVar5 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = param_2[3];" (assignment_expression "uVar6 = param_2[3]" identifier = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar8 + lVar13) = *param_2;" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar13) = *param_2" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar13)" * (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13)" ( (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;" (assignment_expression "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4" (subscript_expression "((undefined8 *)((long)puVar8 + lVar13))[1]" (parenthesized_expression "((undefined8 *)((long)puVar8 + lVar13))" ( (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13)" ( (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10)" identifier = (cast_expression "(undefined8 *)((long)puVar8 + lVar13 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13 + 0x10)" ( (binary_expression "(long)puVar8 + lVar13 + 0x10" (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*puVar9 = uVar5;" (assignment_expression "*puVar9 = uVar5" (pointer_expression "*puVar9" * identifier) = identifier) ;) (expression_statement "puVar9[1] = uVar6;" (assignment_expression "puVar9[1] = uVar6" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (expression_statement "puVar11 = puVar2;" (assignment_expression "puVar11 = puVar2" identifier = identifier) ;) (if_statement "if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" if (parenthesized_expression "(puVar1 != puVar2)" ( (binary_expression "puVar1 != puVar2" identifier != identifier) )) (compound_statement "{\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" { (do_statement "do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);" do (compound_statement "{\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    }" { (expression_statement "uVar4 = puVar11[1];" (assignment_expression "uVar4 = puVar11[1]" identifier = (subscript_expression "puVar11[1]" identifier [ number_literal ])) ;) (expression_statement "puVar12 = puVar11 + 4;" (assignment_expression "puVar12 = puVar11 + 4" identifier = (binary_expression "puVar11 + 4" identifier + number_literal)) ;) (expression_statement "*puVar9 = *puVar11;" (assignment_expression "*puVar9 = *puVar11" (pointer_expression "*puVar9" * identifier) = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "puVar9[1] = uVar4;" (assignment_expression "puVar9[1] = uVar4" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = puVar11[3];" (assignment_expression "uVar4 = puVar11[3]" identifier = (subscript_expression "puVar11[3]" identifier [ number_literal ])) ;) (expression_statement "puVar9[2] = puVar11[2];" (assignment_expression "puVar9[2] = puVar11[2]" (subscript_expression "puVar9[2]" identifier [ number_literal ]) = (subscript_expression "puVar11[2]" identifier [ number_literal ])) ;) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = puVar9 + 4;" (assignment_expression "puVar9 = puVar9 + 4" identifier = (binary_expression "puVar9 + 4" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar12;" (assignment_expression "puVar11 = puVar12" identifier = identifier) ;) }) while (parenthesized_expression "(puVar1 != puVar12)" ( (binary_expression "puVar1 != puVar12" identifier != identifier) )) ;) (expression_statement "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);" (assignment_expression "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" identifier = (cast_expression "(undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" ( (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40" (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" ( (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U" (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2)" (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-0x20 - (long)puVar2)" ( (binary_expression "-0x20 - (long)puVar2" number_literal - (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_00338a40(puVar2);\n  }" { (expression_statement "FUN_00338a40(puVar2);" (call_expression "FUN_00338a40(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) })) (expression_statement "*param_1 = (long)puVar8;" (assignment_expression "*param_1 = (long)puVar8" (pointer_expression "*param_1" * identifier) = (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "param_1[1] = (long)puVar12;" (assignment_expression "param_1[1] = (long)puVar12" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "param_1[2] = lVar10;" (assignment_expression "param_1[2] = lVar10" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void\n   emplace_back<gold::Output_section::Input_section>(vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n   * this, Input_section * __args#0) */\n\nvoid __thiscall\nstd::\nvector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>::\nemplace_back<gold::Output_section::Input_section>\n          (vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           *this,Input_section *__args_0)\n\n{\n  anon_union_8_4_139239c7_for_u2_ *paVar1;\n  pointer pIVar2;\n  pointer pIVar3;\n  ulong uVar4;\n  anon_union_8_2_227b06d7_for_u1_ aVar5;\n  anon_union_8_4_139239c7_for_u2_ aVar6;\n  anon_union_8_4_139239c7_for_u2_ aVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  ulong uVar10;\n  pointer pIVar11;\n  pointer pIVar12;\n  pointer pIVar13;\n  ulong uVar14;\n  pointer pIVar15;\n  pointer pIVar16;\n  long lVar17;\n  \n  pIVar2 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_finish;\n  if (pIVar2 != (this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl._M_end_of_storage) {\n    uVar8 = __args_0->p2align_;\n    aVar5 = __args_0->u1_;\n    pIVar2->shndx_ = __args_0->shndx_;\n    pIVar2->p2align_ = uVar8;\n    pIVar2->u1_ = aVar5;\n    uVar8 = __args_0->section_order_index_;\n    uVar9 = *(undefined4 *)&__args_0->field_0x1c;\n    pIVar2->u2_ = __args_0->u2_;\n    pIVar2->section_order_index_ = uVar8;\n    *(undefined4 *)&pIVar2->field_0x1c = uVar9;\n    (this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish = pIVar2 + 1;\n    return;\n  }\n  pIVar3 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_start;\n  lVar17 = (long)pIVar2 - (long)pIVar3;\n  uVar10 = lVar17 >> 5;\n  if (uVar10 == 0) {\n    uVar14 = 0x20;\n  }\n  else {\n    uVar4 = uVar10 * 2;\n    uVar14 = 0xffffffffffffffe0;\n    if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }\n  }\n  pIVar11 = (pointer)operator_new(uVar14);\n  pIVar12 = (pointer)((long)&pIVar11->shndx_ + uVar14);\n  pIVar16 = pIVar11 + 1;\nLAB_002788eb:\n  aVar5 = __args_0->u1_;\n  aVar6 = __args_0->u2_;\n  aVar7 = *(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_;\n  *(undefined8 *)((long)pIVar11 + lVar17) = *(undefined8 *)__args_0;\n  *(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1) = aVar5;\n  paVar1 = (anon_union_8_4_139239c7_for_u2_ *)((long)pIVar11 + lVar17 + 0x10);\n  *paVar1 = aVar6;\n  paVar1[1] = aVar7;\n  pIVar13 = pIVar11;\n  pIVar15 = pIVar3;\n  if (pIVar2 != pIVar3) {\n    do {\n      uVar8 = pIVar15->p2align_;\n      aVar5 = pIVar15->u1_;\n      pIVar16 = pIVar15 + 1;\n      pIVar13->shndx_ = pIVar15->shndx_;\n      pIVar13->p2align_ = uVar8;\n      pIVar13->u1_ = aVar5;\n      uVar8 = pIVar15->section_order_index_;\n      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;\n      pIVar13->u2_ = pIVar15->u2_;\n      pIVar13->section_order_index_ = uVar8;\n      *(undefined4 *)&pIVar13->field_0x1c = uVar9;\n      pIVar13 = pIVar13 + 1;\n      pIVar15 = pIVar16;\n    } while (pIVar2 != pIVar16);\n    pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U));\n  }\n  if (pIVar3 != (pointer)0x0) {\n    operator_delete(pIVar3);\n  }\n  (this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_start = pIVar11;\n  (this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_finish = pIVar16;\n  (this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_end_of_storage = pIVar12;\n  return;\n}\n\n" comment (declaration "void __thiscall\nstd::\nvector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>::\nemplace_back<gold::Output_section::Input_section>\n          (vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           *this,Input_section *__args_0)\n\n{\n  anon_union_8_4_139239c7_for_u2_ *paVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\nvector<gold::Output_section::" identifier : : identifier < identifier : : identifier : :) identifier , (ERROR "_std::allocator<gold::Output_section::Input_section>_>::\nemplace_back<gold::Output_section::Input_section>\n          (vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           *this,Input_section *__args_0)\n\n{\n  anon_union_8_4_139239c7_for_u2_" identifier : : identifier < identifier : : identifier : : identifier > identifier > : : identifier < identifier : : identifier : : (function_declarator "Input_section>\n          (vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           *this,Input_section *__args_0)" identifier (ERROR ">" >) (parameter_list "(vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           *this,Input_section *__args_0)" ( (parameter_declaration "vector<gold::Output_section::Input_section" type_identifier (ERROR "<gold::Output_section::" < identifier : : identifier : :) identifier) , (parameter_declaration "_std::allocator<gold::Output_section::Input_section>_>\n           *this" type_identifier (ERROR "::allocator<gold::Output_section::Input_section>_>" : : identifier < identifier : : identifier : : identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Input_section *__args_0" type_identifier (pointer_declarator "*__args_0" * identifier)) ))) { identifier) (pointer_declarator "*paVar1" * identifier) ;) (declaration "pointer pIVar2;" type_identifier identifier ;) (declaration "pointer pIVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "anon_union_8_2_227b06d7_for_u1_ aVar5;" type_identifier identifier ;) (declaration "anon_union_8_4_139239c7_for_u2_ aVar6;" type_identifier identifier ;) (declaration "anon_union_8_4_139239c7_for_u2_ aVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "pointer pIVar11;" type_identifier identifier ;) (declaration "pointer pIVar12;" type_identifier identifier ;) (declaration "pointer pIVar13;" type_identifier identifier ;) (declaration "ulong uVar14;" type_identifier identifier ;) (declaration "pointer pIVar15;" type_identifier identifier ;) (declaration "pointer pIVar16;" type_identifier identifier ;) (declaration "long lVar17;" (sized_type_specifier "long" long) identifier ;) (expression_statement "pIVar2 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_finish;" (assignment_expression "pIVar2 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_finish" identifier = (field_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_finish" (field_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl" (parenthesized_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )" ( (ERROR "this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n           super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n           super__Vector_base<gold" (field_expression "this->\n           super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (pIVar2 != (this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl._M_end_of_storage) {\n    uVar8 = __args_0->p2align_;\n    aVar5 = __args_0->u1_;\n    pIVar2->shndx_ = __args_0->shndx_;\n    pIVar2->p2align_ = uVar8;\n    pIVar2->u1_ = aVar5;\n    uVar8 = __args_0->section_order_index_;\n    uVar9 = *(undefined4 *)&__args_0->field_0x1c;\n    pIVar2->u2_ = __args_0->u2_;\n    pIVar2->section_order_index_ = uVar8;\n    *(undefined4 *)&pIVar2->field_0x1c = uVar9;\n    (this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish = pIVar2 + 1;\n    return;\n  }" if (parenthesized_expression "(pIVar2 != (this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl._M_end_of_storage)" ( (binary_expression "pIVar2 != (this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl._M_end_of_storage" identifier != (field_expression "(this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl._M_end_of_storage" (field_expression "(this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )._M_impl" (parenthesized_expression "(this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n                )" ( (ERROR "this->\n                super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n                super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n                super__Vector_base<gold" (field_expression "this->\n                super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    uVar8 = __args_0->p2align_;\n    aVar5 = __args_0->u1_;\n    pIVar2->shndx_ = __args_0->shndx_;\n    pIVar2->p2align_ = uVar8;\n    pIVar2->u1_ = aVar5;\n    uVar8 = __args_0->section_order_index_;\n    uVar9 = *(undefined4 *)&__args_0->field_0x1c;\n    pIVar2->u2_ = __args_0->u2_;\n    pIVar2->section_order_index_ = uVar8;\n    *(undefined4 *)&pIVar2->field_0x1c = uVar9;\n    (this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish = pIVar2 + 1;\n    return;\n  }" { (expression_statement "uVar8 = __args_0->p2align_;" (assignment_expression "uVar8 = __args_0->p2align_" identifier = (field_expression "__args_0->p2align_" identifier -> field_identifier)) ;) (expression_statement "aVar5 = __args_0->u1_;" (assignment_expression "aVar5 = __args_0->u1_" identifier = (field_expression "__args_0->u1_" identifier -> field_identifier)) ;) (expression_statement "pIVar2->shndx_ = __args_0->shndx_;" (assignment_expression "pIVar2->shndx_ = __args_0->shndx_" (field_expression "pIVar2->shndx_" identifier -> field_identifier) = (field_expression "__args_0->shndx_" identifier -> field_identifier)) ;) (expression_statement "pIVar2->p2align_ = uVar8;" (assignment_expression "pIVar2->p2align_ = uVar8" (field_expression "pIVar2->p2align_" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar2->u1_ = aVar5;" (assignment_expression "pIVar2->u1_ = aVar5" (field_expression "pIVar2->u1_" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar8 = __args_0->section_order_index_;" (assignment_expression "uVar8 = __args_0->section_order_index_" identifier = (field_expression "__args_0->section_order_index_" identifier -> field_identifier)) ;) (expression_statement "uVar9 = *(undefined4 *)&__args_0->field_0x1c;" (assignment_expression "uVar9 = *(undefined4 *)&__args_0->field_0x1c" identifier = (pointer_expression "*(undefined4 *)&__args_0->field_0x1c" * (cast_expression "(undefined4 *)&__args_0->field_0x1c" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&__args_0->field_0x1c" & (field_expression "__args_0->field_0x1c" identifier -> field_identifier))))) ;) (expression_statement "pIVar2->u2_ = __args_0->u2_;" (assignment_expression "pIVar2->u2_ = __args_0->u2_" (field_expression "pIVar2->u2_" identifier -> field_identifier) = (field_expression "__args_0->u2_" identifier -> field_identifier)) ;) (expression_statement "pIVar2->section_order_index_ = uVar8;" (assignment_expression "pIVar2->section_order_index_ = uVar8" (field_expression "pIVar2->section_order_index_" identifier -> field_identifier) = identifier) ;) (expression_statement "*(undefined4 *)&pIVar2->field_0x1c = uVar9;" (assignment_expression "*(undefined4 *)&pIVar2->field_0x1c = uVar9" (pointer_expression "*(undefined4 *)&pIVar2->field_0x1c" * (cast_expression "(undefined4 *)&pIVar2->field_0x1c" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pIVar2->field_0x1c" & (field_expression "pIVar2->field_0x1c" identifier -> field_identifier)))) = identifier) ;) (expression_statement "(this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish = pIVar2 + 1;" (assignment_expression "(this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish = pIVar2 + 1" (field_expression "(this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl._M_finish" (field_expression "(this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )._M_impl" (parenthesized_expression "(this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n    )" ( (ERROR "this->\n    super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n    super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n    super__Vector_base<gold" (field_expression "this->\n    super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = (binary_expression "pIVar2 + 1" identifier + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "pIVar3 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_start;" (assignment_expression "pIVar3 = (this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_start" identifier = (field_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl._M_start" (field_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )._M_impl" (parenthesized_expression "(this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n           )" ( (ERROR "this->\n           super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n           super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n           super__Vector_base<gold" (field_expression "this->\n           super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "lVar17 = (long)pIVar2 - (long)pIVar3;" (assignment_expression "lVar17 = (long)pIVar2 - (long)pIVar3" identifier = (binary_expression "(long)pIVar2 - (long)pIVar3" (cast_expression "(long)pIVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pIVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "uVar10 = lVar17 >> 5;" (assignment_expression "uVar10 = lVar17 >> 5" identifier = (binary_expression "lVar17 >> 5" identifier >> number_literal)) ;) (if_statement "if (uVar10 == 0) {\n    uVar14 = 0x20;\n  }\n  else {\n    uVar4 = uVar10 * 2;\n    uVar14 = 0xffffffffffffffe0;\n    if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar14 = 0x20;\n  }" { (expression_statement "uVar14 = 0x20;" (assignment_expression "uVar14 = 0x20" identifier = number_literal) ;) }) (else_clause "else {\n    uVar4 = uVar10 * 2;\n    uVar14 = 0xffffffffffffffe0;\n    if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }\n  }" else (compound_statement "{\n    uVar4 = uVar10 * 2;\n    uVar14 = 0xffffffffffffffe0;\n    if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }\n  }" { (expression_statement "uVar4 = uVar10 * 2;" (assignment_expression "uVar4 = uVar10 * 2" identifier = (binary_expression "uVar10 * 2" identifier * number_literal)) ;) (expression_statement "uVar14 = 0xffffffffffffffe0;" (assignment_expression "uVar14 = 0xffffffffffffffe0" identifier = number_literal) ;) (if_statement "if ((uVar10 <= uVar4) && (uVar4 < 0x800000000000000)) {\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }" if (parenthesized_expression "((uVar10 <= uVar4) && (uVar4 < 0x800000000000000))" ( (binary_expression "(uVar10 <= uVar4) && (uVar4 < 0x800000000000000)" (parenthesized_expression "(uVar10 <= uVar4)" ( (binary_expression "uVar10 <= uVar4" identifier <= identifier) )) && (parenthesized_expression "(uVar4 < 0x800000000000000)" ( (binary_expression "uVar4 < 0x800000000000000" identifier < number_literal) ))) )) (compound_statement "{\n      if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }\n      uVar14 = uVar10 << 6;\n    }" { (if_statement "if (uVar4 == 0) {\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        pIVar16 = (pointer)0x20;\n        pIVar12 = (pointer)0x0;\n        pIVar11 = (pointer)0x0;\n        goto LAB_002788eb;\n      }" { (expression_statement "pIVar16 = (pointer)0x20;" (assignment_expression "pIVar16 = (pointer)0x20" identifier = (cast_expression "(pointer)0x20" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "pIVar12 = (pointer)0x0;" (assignment_expression "pIVar12 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "pIVar11 = (pointer)0x0;" (assignment_expression "pIVar11 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (goto_statement "goto LAB_002788eb;" goto statement_identifier ;) })) (expression_statement "uVar14 = uVar10 << 6;" (assignment_expression "uVar14 = uVar10 << 6" identifier = (binary_expression "uVar10 << 6" identifier << number_literal)) ;) })) }))) (expression_statement "pIVar11 = (pointer)operator_new(uVar14);" (assignment_expression "pIVar11 = (pointer)operator_new(uVar14)" identifier = (cast_expression "(pointer)operator_new(uVar14)" ( (type_descriptor "pointer" type_identifier) ) (call_expression "operator_new(uVar14)" identifier (argument_list "(uVar14)" ( identifier ))))) ;) (expression_statement "pIVar12 = (pointer)((long)&pIVar11->shndx_ + uVar14);" (assignment_expression "pIVar12 = (pointer)((long)&pIVar11->shndx_ + uVar14)" identifier = (call_expression "(pointer)((long)&pIVar11->shndx_ + uVar14)" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "((long)&pIVar11->shndx_ + uVar14)" ( (binary_expression "(long)&pIVar11->shndx_ + uVar14" (cast_expression "(long)&pIVar11->shndx_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pIVar11->shndx_" & (field_expression "pIVar11->shndx_" identifier -> field_identifier))) + identifier) )))) ;) (expression_statement "pIVar16 = pIVar11 + 1;" (assignment_expression "pIVar16 = pIVar11 + 1" identifier = (binary_expression "pIVar11 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_002788eb:\n  aVar5 = __args_0->u1_;" statement_identifier : (expression_statement "aVar5 = __args_0->u1_;" (assignment_expression "aVar5 = __args_0->u1_" identifier = (field_expression "__args_0->u1_" identifier -> field_identifier)) ;)) (expression_statement "aVar6 = __args_0->u2_;" (assignment_expression "aVar6 = __args_0->u2_" identifier = (field_expression "__args_0->u2_" identifier -> field_identifier)) ;) (expression_statement "aVar7 = *(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_;" (assignment_expression "aVar7 = *(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_" identifier = (pointer_expression "*(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_" * (cast_expression "(anon_union_8_4_139239c7_for_u2_ *)&__args_0->section_order_index_" ( (type_descriptor "anon_union_8_4_139239c7_for_u2_ *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&__args_0->section_order_index_" & (field_expression "__args_0->section_order_index_" identifier -> field_identifier))))) ;) (expression_statement "*(undefined8 *)((long)pIVar11 + lVar17) = *(undefined8 *)__args_0;" (assignment_expression "*(undefined8 *)((long)pIVar11 + lVar17) = *(undefined8 *)__args_0" (pointer_expression "*(undefined8 *)((long)pIVar11 + lVar17)" * (cast_expression "(undefined8 *)((long)pIVar11 + lVar17)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pIVar11 + lVar17)" ( (binary_expression "(long)pIVar11 + lVar17" (cast_expression "(long)pIVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*(undefined8 *)__args_0" * (cast_expression "(undefined8 *)__args_0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1) = aVar5;" (assignment_expression "*(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1) = aVar5" (pointer_expression "*(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1)" * (cast_expression "(anon_union_8_2_227b06d7_for_u1_ *)((undefined8 *)((long)pIVar11 + lVar17) + 1)" ( (type_descriptor "anon_union_8_2_227b06d7_for_u1_ *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((undefined8 *)((long)pIVar11 + lVar17) + 1)" ( (binary_expression "(undefined8 *)((long)pIVar11 + lVar17) + 1" (cast_expression "(undefined8 *)((long)pIVar11 + lVar17)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pIVar11 + lVar17)" ( (binary_expression "(long)pIVar11 + lVar17" (cast_expression "(long)pIVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) + number_literal) )))) = identifier) ;) (expression_statement "paVar1 = (anon_union_8_4_139239c7_for_u2_ *)((long)pIVar11 + lVar17 + 0x10);" (assignment_expression "paVar1 = (anon_union_8_4_139239c7_for_u2_ *)((long)pIVar11 + lVar17 + 0x10)" identifier = (cast_expression "(anon_union_8_4_139239c7_for_u2_ *)((long)pIVar11 + lVar17 + 0x10)" ( (type_descriptor "anon_union_8_4_139239c7_for_u2_ *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pIVar11 + lVar17 + 0x10)" ( (binary_expression "(long)pIVar11 + lVar17 + 0x10" (binary_expression "(long)pIVar11 + lVar17" (cast_expression "(long)pIVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*paVar1 = aVar6;" (assignment_expression "*paVar1 = aVar6" (pointer_expression "*paVar1" * identifier) = identifier) ;) (expression_statement "paVar1[1] = aVar7;" (assignment_expression "paVar1[1] = aVar7" (subscript_expression "paVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pIVar13 = pIVar11;" (assignment_expression "pIVar13 = pIVar11" identifier = identifier) ;) (expression_statement "pIVar15 = pIVar3;" (assignment_expression "pIVar15 = pIVar3" identifier = identifier) ;) (if_statement "if (pIVar2 != pIVar3) {\n    do {\n      uVar8 = pIVar15->p2align_;\n      aVar5 = pIVar15->u1_;\n      pIVar16 = pIVar15 + 1;\n      pIVar13->shndx_ = pIVar15->shndx_;\n      pIVar13->p2align_ = uVar8;\n      pIVar13->u1_ = aVar5;\n      uVar8 = pIVar15->section_order_index_;\n      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;\n      pIVar13->u2_ = pIVar15->u2_;\n      pIVar13->section_order_index_ = uVar8;\n      *(undefined4 *)&pIVar13->field_0x1c = uVar9;\n      pIVar13 = pIVar13 + 1;\n      pIVar15 = pIVar16;\n    } while (pIVar2 != pIVar16);\n    pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U));\n  }" if (parenthesized_expression "(pIVar2 != pIVar3)" ( (binary_expression "pIVar2 != pIVar3" identifier != identifier) )) (compound_statement "{\n    do {\n      uVar8 = pIVar15->p2align_;\n      aVar5 = pIVar15->u1_;\n      pIVar16 = pIVar15 + 1;\n      pIVar13->shndx_ = pIVar15->shndx_;\n      pIVar13->p2align_ = uVar8;\n      pIVar13->u1_ = aVar5;\n      uVar8 = pIVar15->section_order_index_;\n      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;\n      pIVar13->u2_ = pIVar15->u2_;\n      pIVar13->section_order_index_ = uVar8;\n      *(undefined4 *)&pIVar13->field_0x1c = uVar9;\n      pIVar13 = pIVar13 + 1;\n      pIVar15 = pIVar16;\n    } while (pIVar2 != pIVar16);\n    pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U));\n  }" { (do_statement "do {\n      uVar8 = pIVar15->p2align_;\n      aVar5 = pIVar15->u1_;\n      pIVar16 = pIVar15 + 1;\n      pIVar13->shndx_ = pIVar15->shndx_;\n      pIVar13->p2align_ = uVar8;\n      pIVar13->u1_ = aVar5;\n      uVar8 = pIVar15->section_order_index_;\n      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;\n      pIVar13->u2_ = pIVar15->u2_;\n      pIVar13->section_order_index_ = uVar8;\n      *(undefined4 *)&pIVar13->field_0x1c = uVar9;\n      pIVar13 = pIVar13 + 1;\n      pIVar15 = pIVar16;\n    } while (pIVar2 != pIVar16);" do (compound_statement "{\n      uVar8 = pIVar15->p2align_;\n      aVar5 = pIVar15->u1_;\n      pIVar16 = pIVar15 + 1;\n      pIVar13->shndx_ = pIVar15->shndx_;\n      pIVar13->p2align_ = uVar8;\n      pIVar13->u1_ = aVar5;\n      uVar8 = pIVar15->section_order_index_;\n      uVar9 = *(undefined4 *)&pIVar15->field_0x1c;\n      pIVar13->u2_ = pIVar15->u2_;\n      pIVar13->section_order_index_ = uVar8;\n      *(undefined4 *)&pIVar13->field_0x1c = uVar9;\n      pIVar13 = pIVar13 + 1;\n      pIVar15 = pIVar16;\n    }" { (expression_statement "uVar8 = pIVar15->p2align_;" (assignment_expression "uVar8 = pIVar15->p2align_" identifier = (field_expression "pIVar15->p2align_" identifier -> field_identifier)) ;) (expression_statement "aVar5 = pIVar15->u1_;" (assignment_expression "aVar5 = pIVar15->u1_" identifier = (field_expression "pIVar15->u1_" identifier -> field_identifier)) ;) (expression_statement "pIVar16 = pIVar15 + 1;" (assignment_expression "pIVar16 = pIVar15 + 1" identifier = (binary_expression "pIVar15 + 1" identifier + number_literal)) ;) (expression_statement "pIVar13->shndx_ = pIVar15->shndx_;" (assignment_expression "pIVar13->shndx_ = pIVar15->shndx_" (field_expression "pIVar13->shndx_" identifier -> field_identifier) = (field_expression "pIVar15->shndx_" identifier -> field_identifier)) ;) (expression_statement "pIVar13->p2align_ = uVar8;" (assignment_expression "pIVar13->p2align_ = uVar8" (field_expression "pIVar13->p2align_" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar13->u1_ = aVar5;" (assignment_expression "pIVar13->u1_ = aVar5" (field_expression "pIVar13->u1_" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar8 = pIVar15->section_order_index_;" (assignment_expression "uVar8 = pIVar15->section_order_index_" identifier = (field_expression "pIVar15->section_order_index_" identifier -> field_identifier)) ;) (expression_statement "uVar9 = *(undefined4 *)&pIVar15->field_0x1c;" (assignment_expression "uVar9 = *(undefined4 *)&pIVar15->field_0x1c" identifier = (pointer_expression "*(undefined4 *)&pIVar15->field_0x1c" * (cast_expression "(undefined4 *)&pIVar15->field_0x1c" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pIVar15->field_0x1c" & (field_expression "pIVar15->field_0x1c" identifier -> field_identifier))))) ;) (expression_statement "pIVar13->u2_ = pIVar15->u2_;" (assignment_expression "pIVar13->u2_ = pIVar15->u2_" (field_expression "pIVar13->u2_" identifier -> field_identifier) = (field_expression "pIVar15->u2_" identifier -> field_identifier)) ;) (expression_statement "pIVar13->section_order_index_ = uVar8;" (assignment_expression "pIVar13->section_order_index_ = uVar8" (field_expression "pIVar13->section_order_index_" identifier -> field_identifier) = identifier) ;) (expression_statement "*(undefined4 *)&pIVar13->field_0x1c = uVar9;" (assignment_expression "*(undefined4 *)&pIVar13->field_0x1c = uVar9" (pointer_expression "*(undefined4 *)&pIVar13->field_0x1c" * (cast_expression "(undefined4 *)&pIVar13->field_0x1c" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pIVar13->field_0x1c" & (field_expression "pIVar13->field_0x1c" identifier -> field_identifier)))) = identifier) ;) (expression_statement "pIVar13 = pIVar13 + 1;" (assignment_expression "pIVar13 = pIVar13 + 1" identifier = (binary_expression "pIVar13 + 1" identifier + number_literal)) ;) (expression_statement "pIVar15 = pIVar16;" (assignment_expression "pIVar15 = pIVar16" identifier = identifier) ;) }) while (parenthesized_expression "(pIVar2 != pIVar16)" ( (binary_expression "pIVar2 != pIVar16" identifier != identifier) )) ;) (expression_statement "pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U));" (assignment_expression "pIVar16 = (pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U))" identifier = (call_expression "(pointer)((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U))" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "((long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U))" ( (binary_expression "(long)&pIVar11[2].shndx_ +\n                       ((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U)" (cast_expression "(long)&pIVar11[2].shndx_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pIVar11[2].shndx_" & (field_expression "pIVar11[2].shndx_" (subscript_expression "pIVar11[2]" identifier [ number_literal ]) . field_identifier))) + (parenthesized_expression "((long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U)" ( (binary_expression "(long)pIVar2 + (-0x20 - (long)pIVar3) & 0xffffffffffffffe0U" (binary_expression "(long)pIVar2 + (-0x20 - (long)pIVar3)" (cast_expression "(long)pIVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-0x20 - (long)pIVar3)" ( (binary_expression "-0x20 - (long)pIVar3" number_literal - (cast_expression "(long)pIVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) )))) ;) })) (if_statement "if (pIVar3 != (pointer)0x0) {\n    operator_delete(pIVar3);\n  }" if (parenthesized_expression "(pIVar3 != (pointer)0x0)" ( (binary_expression "pIVar3 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n    operator_delete(pIVar3);\n  }" { (expression_statement "operator_delete(pIVar3);" (call_expression "operator_delete(pIVar3)" identifier (argument_list "(pIVar3)" ( identifier ))) ;) })) (expression_statement "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_start = pIVar11;" (assignment_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_start = pIVar11" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_start" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n  super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_finish = pIVar16;" (assignment_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_finish = pIVar16" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_finish" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n  super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_end_of_storage = pIVar12;" (assignment_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_end_of_storage = pIVar12" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl._M_end_of_storage" (field_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )._M_impl" (parenthesized_expression "(this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>\n  )" ( (ERROR "this->\n  super__Vector_base<gold::Output_section::Input_section,_std::allocator<gold::Output_section::" (comma_expression "this->\n  super__Vector_base<gold::Output_section::Input_section,_std" (binary_expression "this->\n  super__Vector_base<gold" (field_expression "this->\n  super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section::Input_section" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Input_section>_>" (binary_expression "Input_section>_" identifier > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_00278860(long *param_1,undefined8 *param_2)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}\n\n" (function_definition "void FUN_00278860(long *param_1,undefined8 *param_2)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" primitive_type (function_declarator "FUN_00278860(long *param_1,undefined8 *param_2)" identifier (parameter_list "(long *param_1,undefined8 *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined8 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined8 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (expression_statement "puVar1 = (undefined8 *)param_1[1];" (assignment_expression "puVar1 = (undefined8 *)param_1[1]" identifier = (cast_expression "(undefined8 *)param_1[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (if_statement "if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" if (parenthesized_expression "(puVar1 != (undefined8 *)param_1[2])" ( (binary_expression "puVar1 != (undefined8 *)param_1[2]" identifier != (cast_expression "(undefined8 *)param_1[2]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) )) (compound_statement "{\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" { (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "*puVar1 = *param_2;" (assignment_expression "*puVar1 = *param_2" (pointer_expression "*puVar1" * identifier) = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar1[1] = uVar4;" (assignment_expression "puVar1[1] = uVar4" (subscript_expression "puVar1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = param_2[3];" (assignment_expression "uVar4 = param_2[3]" identifier = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) (expression_statement "puVar1[2] = param_2[2];" (assignment_expression "puVar1[2] = param_2[2]" (subscript_expression "puVar1[2]" identifier [ number_literal ]) = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "puVar1[3] = uVar4;" (assignment_expression "puVar1[3] = uVar4" (subscript_expression "puVar1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = (long)(puVar1 + 4);" (assignment_expression "param_1[1] = (long)(puVar1 + 4)" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(long)(puVar1 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(puVar1 + 4)" ( (binary_expression "puVar1 + 4" identifier + number_literal) )))) ;) (return_statement "return;" return ;) })) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "lVar13 = (long)puVar1 - (long)puVar2;" (assignment_expression "lVar13 = (long)puVar1 - (long)puVar2" identifier = (binary_expression "(long)puVar1 - (long)puVar2" (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "uVar7 = lVar13 >> 5;" (assignment_expression "uVar7 = lVar13 >> 5" identifier = (binary_expression "lVar13 >> 5" identifier >> number_literal)) ;) (if_statement "if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n    lVar10 = 0x20;\n  }" { (expression_statement "lVar10 = 0x20;" (assignment_expression "lVar10 = 0x20" identifier = number_literal) ;) }) (else_clause "else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" else (compound_statement "{\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" { (expression_statement "uVar3 = uVar7 * 2;" (assignment_expression "uVar3 = uVar7 * 2" identifier = (binary_expression "uVar7 * 2" identifier * number_literal)) ;) (expression_statement "lVar10 = -0x20;" (assignment_expression "lVar10 = -0x20" identifier = number_literal) ;) (if_statement "if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" if (parenthesized_expression "((uVar7 <= uVar3) && (uVar3 < 0x800000000000000))" ( (binary_expression "(uVar7 <= uVar3) && (uVar3 < 0x800000000000000)" (parenthesized_expression "(uVar7 <= uVar3)" ( (binary_expression "uVar7 <= uVar3" identifier <= identifier) )) && (parenthesized_expression "(uVar3 < 0x800000000000000)" ( (binary_expression "uVar3 < 0x800000000000000" identifier < number_literal) ))) )) (compound_statement "{\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" { (if_statement "if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" { (expression_statement "puVar12 = (undefined8 *)0x20;" (assignment_expression "puVar12 = (undefined8 *)0x20" identifier = (cast_expression "(undefined8 *)0x20" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "lVar10 = 0;" (assignment_expression "lVar10 = 0" identifier = number_literal) ;) (expression_statement "puVar8 = (undefined8 *)0x0;" (assignment_expression "puVar8 = (undefined8 *)0x0" identifier = (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_002788eb;" goto statement_identifier ;) })) (expression_statement "lVar10 = uVar7 << 6;" (assignment_expression "lVar10 = uVar7 << 6" identifier = (binary_expression "uVar7 << 6" identifier << number_literal)) ;) })) }))) (expression_statement "puVar8 = (undefined8 *)FUN_00337270(lVar10);" (assignment_expression "puVar8 = (undefined8 *)FUN_00337270(lVar10)" identifier = (cast_expression "(undefined8 *)FUN_00337270(lVar10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00337270(lVar10)" identifier (argument_list "(lVar10)" ( identifier ))))) ;) (expression_statement "lVar10 = (long)puVar8 + lVar10;" (assignment_expression "lVar10 = (long)puVar8 + lVar10" identifier = (binary_expression "(long)puVar8 + lVar10" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (expression_statement "puVar12 = puVar8 + 4;" (assignment_expression "puVar12 = puVar8 + 4" identifier = (binary_expression "puVar8 + 4" identifier + number_literal)) ;) (labeled_statement "LAB_002788eb:\n  uVar4 = param_2[1];" statement_identifier : (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;)) (expression_statement "uVar5 = param_2[2];" (assignment_expression "uVar5 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = param_2[3];" (assignment_expression "uVar6 = param_2[3]" identifier = (subscript_expression "param_2[3]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar8 + lVar13) = *param_2;" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar13) = *param_2" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar13)" * (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13)" ( (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;" (assignment_expression "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4" (subscript_expression "((undefined8 *)((long)puVar8 + lVar13))[1]" (parenthesized_expression "((undefined8 *)((long)puVar8 + lVar13))" ( (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13)" ( (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10)" identifier = (cast_expression "(undefined8 *)((long)puVar8 + lVar13 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + lVar13 + 0x10)" ( (binary_expression "(long)puVar8 + lVar13 + 0x10" (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "*puVar9 = uVar5;" (assignment_expression "*puVar9 = uVar5" (pointer_expression "*puVar9" * identifier) = identifier) ;) (expression_statement "puVar9[1] = uVar6;" (assignment_expression "puVar9[1] = uVar6" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (expression_statement "puVar11 = puVar2;" (assignment_expression "puVar11 = puVar2" identifier = identifier) ;) (if_statement "if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" if (parenthesized_expression "(puVar1 != puVar2)" ( (binary_expression "puVar1 != puVar2" identifier != identifier) )) (compound_statement "{\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" { (do_statement "do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);" do (compound_statement "{\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    }" { (expression_statement "uVar4 = puVar11[1];" (assignment_expression "uVar4 = puVar11[1]" identifier = (subscript_expression "puVar11[1]" identifier [ number_literal ])) ;) (expression_statement "puVar12 = puVar11 + 4;" (assignment_expression "puVar12 = puVar11 + 4" identifier = (binary_expression "puVar11 + 4" identifier + number_literal)) ;) (expression_statement "*puVar9 = *puVar11;" (assignment_expression "*puVar9 = *puVar11" (pointer_expression "*puVar9" * identifier) = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "puVar9[1] = uVar4;" (assignment_expression "puVar9[1] = uVar4" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar4 = puVar11[3];" (assignment_expression "uVar4 = puVar11[3]" identifier = (subscript_expression "puVar11[3]" identifier [ number_literal ])) ;) (expression_statement "puVar9[2] = puVar11[2];" (assignment_expression "puVar9[2] = puVar11[2]" (subscript_expression "puVar9[2]" identifier [ number_literal ]) = (subscript_expression "puVar11[2]" identifier [ number_literal ])) ;) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9 = puVar9 + 4;" (assignment_expression "puVar9 = puVar9 + 4" identifier = (binary_expression "puVar9 + 4" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar12;" (assignment_expression "puVar11 = puVar12" identifier = identifier) ;) }) while (parenthesized_expression "(puVar1 != puVar12)" ( (binary_expression "puVar1 != puVar12" identifier != identifier) )) ;) (expression_statement "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);" (assignment_expression "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" identifier = (cast_expression "(undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" ( (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40" (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" ( (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U" (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2)" (cast_expression "(long)puVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-0x20 - (long)puVar2)" ( (binary_expression "-0x20 - (long)puVar2" number_literal - (cast_expression "(long)puVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_00338a40(puVar2);\n  }" { (expression_statement "FUN_00338a40(puVar2);" (call_expression "FUN_00338a40(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) })) (expression_statement "*param_1 = (long)puVar8;" (assignment_expression "*param_1 = (long)puVar8" (pointer_expression "*param_1" * identifier) = (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "param_1[1] = (long)puVar12;" (assignment_expression "param_1[1] = (long)puVar12" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "param_1[2] = lVar10;" (assignment_expression "param_1[2] = lVar10" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) })) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) )) [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) & LIT) ))) + LIT) )))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_00278860(long *param_1,undefined8 *param_2)\n\n{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00278860(long *param_1,undefined8 *param_2)" (identifier "FUN_00278860") (parameter_list "(long *param_1,undefined8 *param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  undefined8 *puVar2;\n  ulong uVar3;\n  undefined8 uVar4;\n  undefined8 uVar5;\n  undefined8 uVar6;\n  ulong uVar7;\n  undefined8 *puVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  undefined8 *puVar12;\n  long lVar13;\n  \n  puVar1 = (undefined8 *)param_1[1];\n  if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }\n  puVar2 = (undefined8 *)*param_1;\n  lVar13 = (long)puVar1 - (long)puVar2;\n  uVar7 = lVar13 >> 5;\n  if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }\n  puVar8 = (undefined8 *)FUN_00337270(lVar10);\n  lVar10 = (long)puVar8 + lVar10;\n  puVar12 = puVar8 + 4;\nLAB_002788eb:\n  uVar4 = param_2[1];\n  uVar5 = param_2[2];\n  uVar6 = param_2[3];\n  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;\n  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;\n  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);\n  *puVar9 = uVar5;\n  puVar9[1] = uVar6;\n  puVar9 = puVar8;\n  puVar11 = puVar2;\n  if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }\n  if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }\n  *param_1 = (long)puVar8;\n  param_1[1] = (long)puVar12;\n  param_1[2] = lVar10;\n  return;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "undefined8 *puVar8;" (type_identifier "undefined8") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined8 *puVar9;" (type_identifier "undefined8") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "undefined8 *puVar11;" (type_identifier "undefined8") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "undefined8 *puVar12;" (type_identifier "undefined8") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "long lVar13;" (sized_type_specifier "long" (long "long")) (identifier "lVar13") (; ";")) (expression_statement "puVar1 = (undefined8 *)param_1[1];" (assignment_expression "puVar1 = (undefined8 *)param_1[1]" (identifier "puVar1") (= "=") (cast_expression "(undefined8 *)param_1[1]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (puVar1 != (undefined8 *)param_1[2]) {\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" (if "if") (parenthesized_expression "(puVar1 != (undefined8 *)param_1[2])" (( "(") (binary_expression "puVar1 != (undefined8 *)param_1[2]" (identifier "puVar1") (!= "!=") (cast_expression "(undefined8 *)param_1[2]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) () ")")) (compound_statement "{\n    uVar4 = param_2[1];\n    *puVar1 = *param_2;\n    puVar1[1] = uVar4;\n    uVar4 = param_2[3];\n    puVar1[2] = param_2[2];\n    puVar1[3] = uVar4;\n    param_1[1] = (long)(puVar1 + 4);\n    return;\n  }" ({ "{") (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" (identifier "uVar4") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*puVar1 = *param_2;" (assignment_expression "*puVar1 = *param_2" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "puVar1[1] = uVar4;" (assignment_expression "puVar1[1] = uVar4" (subscript_expression "puVar1[1]" (identifier "puVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = param_2[3];" (assignment_expression "uVar4 = param_2[3]" (identifier "uVar4") (= "=") (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar1[2] = param_2[2];" (assignment_expression "puVar1[2] = param_2[2]" (subscript_expression "puVar1[2]" (identifier "puVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar1[3] = uVar4;" (assignment_expression "puVar1[3] = uVar4" (subscript_expression "puVar1[3]" (identifier "puVar1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "param_1[1] = (long)(puVar1 + 4);" (assignment_expression "param_1[1] = (long)(puVar1 + 4)" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)(puVar1 + 4)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(puVar1 + 4)" (( "(") (binary_expression "puVar1 + 4" (identifier "puVar1") (+ "+") (number_literal "4")) () ")")))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "lVar13 = (long)puVar1 - (long)puVar2;" (assignment_expression "lVar13 = (long)puVar1 - (long)puVar2" (identifier "lVar13") (= "=") (binary_expression "(long)puVar1 - (long)puVar2" (cast_expression "(long)puVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar1")) (- "-") (cast_expression "(long)puVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar2")))) (; ";")) (expression_statement "uVar7 = lVar13 >> 5;" (assignment_expression "uVar7 = lVar13 >> 5" (identifier "uVar7") (= "=") (binary_expression "lVar13 >> 5" (identifier "lVar13") (>> ">>") (number_literal "5"))) (; ";")) (if_statement "if (uVar7 == 0) {\n    lVar10 = 0x20;\n  }\n  else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    lVar10 = 0x20;\n  }" ({ "{") (expression_statement "lVar10 = 0x20;" (assignment_expression "lVar10 = 0x20" (identifier "lVar10") (= "=") (number_literal "0x20")) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" (else "else") (compound_statement "{\n    uVar3 = uVar7 * 2;\n    lVar10 = -0x20;\n    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }\n  }" ({ "{") (expression_statement "uVar3 = uVar7 * 2;" (assignment_expression "uVar3 = uVar7 * 2" (identifier "uVar3") (= "=") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2"))) (; ";")) (expression_statement "lVar10 = -0x20;" (assignment_expression "lVar10 = -0x20" (identifier "lVar10") (= "=") (number_literal "-0x20")) (; ";")) (if_statement "if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" (if "if") (parenthesized_expression "((uVar7 <= uVar3) && (uVar3 < 0x800000000000000))" (( "(") (binary_expression "(uVar7 <= uVar3) && (uVar3 < 0x800000000000000)" (parenthesized_expression "(uVar7 <= uVar3)" (( "(") (binary_expression "uVar7 <= uVar3" (identifier "uVar7") (<= "<=") (identifier "uVar3")) () ")")) (&& "&&") (parenthesized_expression "(uVar3 < 0x800000000000000)" (( "(") (binary_expression "uVar3 < 0x800000000000000" (identifier "uVar3") (< "<") (number_literal "0x800000000000000")) () ")"))) () ")")) (compound_statement "{\n      if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }\n      lVar10 = uVar7 << 6;\n    }" ({ "{") (if_statement "if (uVar3 == 0) {\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        puVar12 = (undefined8 *)0x20;\n        lVar10 = 0;\n        puVar8 = (undefined8 *)0x0;\n        goto LAB_002788eb;\n      }" ({ "{") (expression_statement "puVar12 = (undefined8 *)0x20;" (assignment_expression "puVar12 = (undefined8 *)0x20" (identifier "puVar12") (= "=") (cast_expression "(undefined8 *)0x20" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x20"))) (; ";")) (expression_statement "lVar10 = 0;" (assignment_expression "lVar10 = 0" (identifier "lVar10") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar8 = (undefined8 *)0x0;" (assignment_expression "puVar8 = (undefined8 *)0x0" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_002788eb;" (goto "goto") (statement_identifier "LAB_002788eb") (; ";")) (} "}"))) (expression_statement "lVar10 = uVar7 << 6;" (assignment_expression "lVar10 = uVar7 << 6" (identifier "lVar10") (= "=") (binary_expression "uVar7 << 6" (identifier "uVar7") (<< "<<") (number_literal "6"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "puVar8 = (undefined8 *)FUN_00337270(lVar10);" (assignment_expression "puVar8 = (undefined8 *)FUN_00337270(lVar10)" (identifier "puVar8") (= "=") (cast_expression "(undefined8 *)FUN_00337270(lVar10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00337270(lVar10)" (identifier "FUN_00337270") (argument_list "(lVar10)" (( "(") (identifier "lVar10") () ")"))))) (; ";")) (expression_statement "lVar10 = (long)puVar8 + lVar10;" (assignment_expression "lVar10 = (long)puVar8 + lVar10" (identifier "lVar10") (= "=") (binary_expression "(long)puVar8 + lVar10" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar10"))) (; ";")) (expression_statement "puVar12 = puVar8 + 4;" (assignment_expression "puVar12 = puVar8 + 4" (identifier "puVar12") (= "=") (binary_expression "puVar8 + 4" (identifier "puVar8") (+ "+") (number_literal "4"))) (; ";")) (labeled_statement "LAB_002788eb:\n  uVar4 = param_2[1];" (statement_identifier "LAB_002788eb") (: ":") (expression_statement "uVar4 = param_2[1];" (assignment_expression "uVar4 = param_2[1]" (identifier "uVar4") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";"))) (expression_statement "uVar5 = param_2[2];" (assignment_expression "uVar5 = param_2[2]" (identifier "uVar5") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar6 = param_2[3];" (assignment_expression "uVar6 = param_2[3]" (identifier "uVar6") (= "=") (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar8 + lVar13) = *param_2;" (assignment_expression "*(undefined8 *)((long)puVar8 + lVar13) = *param_2" (pointer_expression "*(undefined8 *)((long)puVar8 + lVar13)" (* "*") (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar13)" (( "(") (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar13")) () ")")))) (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;" (assignment_expression "((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4" (subscript_expression "((undefined8 *)((long)puVar8 + lVar13))[1]" (parenthesized_expression "((undefined8 *)((long)puVar8 + lVar13))" (( "(") (cast_expression "(undefined8 *)((long)puVar8 + lVar13)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar13)" (( "(") (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar13")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);" (assignment_expression "puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10)" (identifier "puVar9") (= "=") (cast_expression "(undefined8 *)((long)puVar8 + lVar13 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + lVar13 + 0x10)" (( "(") (binary_expression "(long)puVar8 + lVar13 + 0x10" (binary_expression "(long)puVar8 + lVar13" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (identifier "lVar13")) (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "*puVar9 = uVar5;" (assignment_expression "*puVar9 = uVar5" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "puVar9[1] = uVar6;" (assignment_expression "puVar9[1] = uVar6" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" (identifier "puVar9") (= "=") (identifier "puVar8")) (; ";")) (expression_statement "puVar11 = puVar2;" (assignment_expression "puVar11 = puVar2" (identifier "puVar11") (= "=") (identifier "puVar2")) (; ";")) (if_statement "if (puVar1 != puVar2) {\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" (if "if") (parenthesized_expression "(puVar1 != puVar2)" (( "(") (binary_expression "puVar1 != puVar2" (identifier "puVar1") (!= "!=") (identifier "puVar2")) () ")")) (compound_statement "{\n    do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);\n    puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);\n  }" ({ "{") (do_statement "do {\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    } while (puVar1 != puVar12);" (do "do") (compound_statement "{\n      uVar4 = puVar11[1];\n      puVar12 = puVar11 + 4;\n      *puVar9 = *puVar11;\n      puVar9[1] = uVar4;\n      uVar4 = puVar11[3];\n      puVar9[2] = puVar11[2];\n      puVar9[3] = uVar4;\n      puVar9 = puVar9 + 4;\n      puVar11 = puVar12;\n    }" ({ "{") (expression_statement "uVar4 = puVar11[1];" (assignment_expression "uVar4 = puVar11[1]" (identifier "uVar4") (= "=") (subscript_expression "puVar11[1]" (identifier "puVar11") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar12 = puVar11 + 4;" (assignment_expression "puVar12 = puVar11 + 4" (identifier "puVar12") (= "=") (binary_expression "puVar11 + 4" (identifier "puVar11") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "*puVar9 = *puVar11;" (assignment_expression "*puVar9 = *puVar11" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (pointer_expression "*puVar11" (* "*") (identifier "puVar11"))) (; ";")) (expression_statement "puVar9[1] = uVar4;" (assignment_expression "puVar9[1] = uVar4" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = puVar11[3];" (assignment_expression "uVar4 = puVar11[3]" (identifier "uVar4") (= "=") (subscript_expression "puVar11[3]" (identifier "puVar11") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar9[2] = puVar11[2];" (assignment_expression "puVar9[2] = puVar11[2]" (subscript_expression "puVar9[2]" (identifier "puVar9") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "puVar11[2]" (identifier "puVar11") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" (identifier "puVar9") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar9 = puVar9 + 4;" (assignment_expression "puVar9 = puVar9 + 4" (identifier "puVar9") (= "=") (binary_expression "puVar9 + 4" (identifier "puVar9") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "puVar11 = puVar12;" (assignment_expression "puVar11 = puVar12" (identifier "puVar11") (= "=") (identifier "puVar12")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar1 != puVar12)" (( "(") (binary_expression "puVar1 != puVar12" (identifier "puVar1") (!= "!=") (identifier "puVar12")) () ")")) (; ";")) (expression_statement "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);" (assignment_expression "puVar12 = (undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" (identifier "puVar12") (= "=") (cast_expression "(undefined8 *)\n              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40)" (( "(") (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40" (binary_expression "(long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (+ "+") (parenthesized_expression "((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U)" (( "(") (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U" (binary_expression "(long)puVar1 + (-0x20 - (long)puVar2)" (cast_expression "(long)puVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar1")) (+ "+") (parenthesized_expression "(-0x20 - (long)puVar2)" (( "(") (binary_expression "-0x20 - (long)puVar2" (number_literal "-0x20") (- "-") (cast_expression "(long)puVar2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar2"))) () ")"))) (& "&") (number_literal "0xffffffffffffffe0U")) () ")"))) (+ "+") (number_literal "0x40")) () ")")))) (; ";")) (} "}"))) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n    FUN_00338a40(puVar2);\n  }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    FUN_00338a40(puVar2);\n  }" ({ "{") (expression_statement "FUN_00338a40(puVar2);" (call_expression "FUN_00338a40(puVar2)" (identifier "FUN_00338a40") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = (long)puVar8;" (assignment_expression "*param_1 = (long)puVar8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8"))) (; ";")) (expression_statement "param_1[1] = (long)puVar12;" (assignment_expression "param_1[1] = (long)puVar12" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(long)puVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar12"))) (; ";")) (expression_statement "param_1[2] = lVar10;" (assignment_expression "param_1[2] = lVar10" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar10")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void
   emplace_back<gold::Output_section::Input_section>(vector<gold::Output_section::Input_section,_std::allocator<gold::Output_section::Input_section>_>
   * this, Input_section * __args#0) */

void __thiscall
std::
vector<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>::
emplace_back<gold::Output_section::var_1>
          (vector<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>
           *this,var_1 *__args_0)

{
  type_4 *paVar1;
  type_1 var_4;
  type_1 var_11;
  type_2 var_7;
  type_3 aVar5;
  type_4 aVar6;
  type_4 aVar7;
  type_5 uVar8;
  type_6 uVar9;
  type_2 var_6;
  type_1 var_10;
  type_1 pIVar12;
  type_1 var_13;
  type_2 var_9;
  type_1 var_12;
  type_1 var_14;
  long var_5;
  
  var_4 = (this->
           super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
           )._M_impl._M_finish;
  if (var_4 != (this->
                super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
                )._M_impl._M_end_of_storage) {
    uVar8 = __args_0->p2align_;
    aVar5 = __args_0->u1_;
    var_4->shndx_ = __args_0->shndx_;
    var_4->p2align_ = uVar8;
    var_4->u1_ = aVar5;
    uVar8 = __args_0->section_order_index_;
    uVar9 = *(type_6 *)&__args_0->field_0x1c;
    var_4->u2_ = __args_0->u2_;
    var_4->section_order_index_ = uVar8;
    *(type_6 *)&var_4->field_0x1c = uVar9;
    (this->
    super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
    )._M_impl._M_finish = var_4 + 1;
    return;
  }
  var_11 = (this->
           super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
           )._M_impl._M_start;
  var_5 = (long)var_4 - (long)var_11;
  var_6 = var_5 >> 5;
  if (var_6 == 0) {
    var_9 = 0x20;
  }
  else {
    var_7 = var_6 * 2;
    var_9 = 0xffffffffffffffe0;
    if ((var_6 <= var_7) && (var_7 < 0x800000000000000)) {
      if (var_7 == 0) {
        var_14 = (type_1)0x20;
        pIVar12 = (type_1)0x0;
        var_10 = (type_1)0x0;
        goto LAB_002788eb;
      }
      var_9 = var_6 << 6;
    }
  }
  var_10 = (type_1)var_8(var_9);
  pIVar12 = (type_1)((long)&var_10->shndx_ + var_9);
  var_14 = var_10 + 1;
LAB_002788eb:
  aVar5 = __args_0->u1_;
  aVar6 = __args_0->u2_;
  aVar7 = *(type_4 *)&__args_0->section_order_index_;
  *(type_7 *)((long)var_10 + var_5) = *(type_7 *)__args_0;
  *(type_3 *)((type_7 *)((long)var_10 + var_5) + 1) = aVar5;
  paVar1 = (type_4 *)((long)var_10 + var_5 + 0x10);
  *paVar1 = aVar6;
  paVar1[1] = aVar7;
  var_13 = var_10;
  var_12 = var_11;
  if (var_4 != var_11) {
    do {
      uVar8 = var_12->p2align_;
      aVar5 = var_12->u1_;
      var_14 = var_12 + 1;
      var_13->shndx_ = var_12->shndx_;
      var_13->p2align_ = uVar8;
      var_13->u1_ = aVar5;
      uVar8 = var_12->section_order_index_;
      uVar9 = *(type_6 *)&var_12->field_0x1c;
      var_13->u2_ = var_12->u2_;
      var_13->section_order_index_ = uVar8;
      *(type_6 *)&var_13->field_0x1c = uVar9;
      var_13 = var_13 + 1;
      var_12 = var_14;
    } while (var_4 != var_14);
    var_14 = (type_1)((long)&var_10[2].shndx_ +
                       ((long)var_4 + (-0x20 - (long)var_11) & 0xffffffffffffffe0U));
  }
  if (var_11 != (type_1)0x0) {
    var_15(var_11);
  }
  (this->
  super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
  )._M_impl._M_start = var_10;
  (this->
  super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
  )._M_impl._M_finish = var_14;
  (this->
  super__Vector_base<gold::Output_section::var_1,_std::allocator<gold::Output_section::var_1>var_2>var_3
  )._M_impl._M_end_of_storage = pIVar12;
  return;
}


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

void MASKED(long *param_1,undefined8 *param_2)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  ulong uVar3;
  undefined8 uVar4;
  undefined8 uVar5;
  undefined8 uVar6;
  ulong uVar7;
  undefined8 *puVar8;
  undefined8 *puVar9;
  long lVar10;
  undefined8 *puVar11;
  undefined8 *puVar12;
  long lVar13;
  
  puVar1 = (undefined8 *)param_1[1];
  if (puVar1 != (undefined8 *)param_1[2]) {
    uVar4 = param_2[1];
    *puVar1 = *param_2;
    puVar1[1] = uVar4;
    uVar4 = param_2[3];
    puVar1[2] = param_2[2];
    puVar1[3] = uVar4;
    param_1[1] = (long)(puVar1 + 4);
    return;
  }
  puVar2 = (undefined8 *)*param_1;
  lVar13 = (long)puVar1 - (long)puVar2;
  uVar7 = lVar13 >> 5;
  if (uVar7 == 0) {
    lVar10 = 0x20;
  }
  else {
    uVar3 = uVar7 * 2;
    lVar10 = -0x20;
    if ((uVar7 <= uVar3) && (uVar3 < 0x800000000000000)) {
      if (uVar3 == 0) {
        puVar12 = (undefined8 *)0x20;
        lVar10 = 0;
        puVar8 = (undefined8 *)0x0;
        goto LAB_002788eb;
      }
      lVar10 = uVar7 << 6;
    }
  }
  puVar8 = (undefined8 *)FUN_00337270(lVar10);
  lVar10 = (long)puVar8 + lVar10;
  puVar12 = puVar8 + 4;
LAB_002788eb:
  uVar4 = param_2[1];
  uVar5 = param_2[2];
  uVar6 = param_2[3];
  *(undefined8 *)((long)puVar8 + lVar13) = *param_2;
  ((undefined8 *)((long)puVar8 + lVar13))[1] = uVar4;
  puVar9 = (undefined8 *)((long)puVar8 + lVar13 + 0x10);
  *puVar9 = uVar5;
  puVar9[1] = uVar6;
  puVar9 = puVar8;
  puVar11 = puVar2;
  if (puVar1 != puVar2) {
    do {
      uVar4 = puVar11[1];
      puVar12 = puVar11 + 4;
      *puVar9 = *puVar11;
      puVar9[1] = uVar4;
      uVar4 = puVar11[3];
      puVar9[2] = puVar11[2];
      puVar9[3] = uVar4;
      puVar9 = puVar9 + 4;
      puVar11 = puVar12;
    } while (puVar1 != puVar12);
    puVar12 = (undefined8 *)
              ((long)puVar8 + ((long)puVar1 + (-0x20 - (long)puVar2) & 0xffffffffffffffe0U) + 0x40);
  }
  if (puVar2 != (undefined8 *)0x0) {
    FUN_00338a40(puVar2);
  }
  *param_1 = (long)puVar8;
  param_1[1] = (long)puVar12;
  param_1[2] = lVar10;
  return;
}

