
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: int open(Descriptors * this, int descriptor, char * name, int flags,
   int mode) */

int __thiscall gold::Descriptors::open(Descriptors *this,char *__file,int __oflag,...)

{
  uint uVar1;
  Lock *pLVar2;
  pointer pOVar3;
  General_options *pGVar4;
  Lock_impl *pLVar5;
  bool bVar6;
  int iVar7;
  int *piVar8;
  uint uVar9;
  char *pcVar10;
  pointer pOVar11;
  uint uVar12;
  uint in_stack_00000010;
  undefined4 in_stack_00000014;
  
  bVar6 = Initialize_lock::initialize(&this->initialize_lock_);
  if ((!bVar6) && (-1 < (int)__file)) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");
  }
  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
    this->limit_ = 8;
  }
  if (-1 < (int)__file) {
    pLVar2 = this->lock_;
    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);
    pOVar11 = (this->open_descriptors_).
              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
              ._M_impl._M_start;
    if ((char *)(((int)(this->open_descriptors_).
                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */
      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");
    }
    pOVar11 = pOVar11 + (int)__file;
    pcVar10 = pOVar11->name;
    if ((pcVar10 == (char *)__oflag) ||
       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {
      if (pOVar11->inuse != false) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */
        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");
      }
      pOVar11->inuse = true;
      if ((char *)this->stack_top_ == __file) {
        this->stack_top_ = pOVar11->stack_next;
        pOVar11->stack_next = -1;
        pOVar11->is_on_stack = false;
      }
      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */
        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)
        ;
        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);
        return (int)__file;
      }
      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);
      return (int)__file;
    }
    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);
  }
  while( true ) {
    uVar12 = in_stack_00000010 | 0x80000;
    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);
    if (-1 < (int)uVar9) break;
    piVar8 = __errno_location();
    if (1 < *piVar8 - 0x17U) {
      if ((*piVar8 == 2) && (-1 < (int)__file)) {
        pLVar2 = this->lock_;
        pLVar5 = pLVar2->lock_;
        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);
        pcVar10 = (char *)gettext("file %s was removed during the link");
                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */
        gold_error(pcVar10,__oflag);
        pLVar5 = pLVar2->lock_;
        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);
        *piVar8 = 2;
      }
      if (parameters->options_ == (General_options *)0x0) {
        return uVar9;
      }
      if ((parameters->debug_ & 4) == 0) {
        return uVar9;
      }
      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);
      return uVar9;
    }
    pLVar2 = this->lock_;
    if (pLVar2 != (Lock *)0x0) {
      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);
    }
    iVar7 = this->current_ + -0x10;
    if (iVar7 < 8) {
      iVar7 = 8;
    }
    this->limit_ = iVar7;
                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */
    bVar6 = close_some_descriptor(this);
    if (!bVar6) {
      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */
      gold_fatal(pcVar10);
    }
    in_stack_00000010 = uVar12;
    if (pLVar2 != (Lock *)0x0) {
      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);
    }
  }
  pLVar2 = this->lock_;
  if (pLVar2 != (Lock *)0x0) {
    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);
  }
  pOVar3 = (this->open_descriptors_).
           super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
           ._M_impl._M_finish;
  pOVar11 = (this->open_descriptors_).
            super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
            ._M_impl._M_start;
  iVar7 = (int)pOVar3 - (int)pOVar11 >> 2;
  uVar12 = iVar7 * -0x55555555;
  if (uVar12 <= uVar9) {
    uVar1 = uVar9 + 0x40;
    if (uVar12 < uVar1) {
                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */
      std::
      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);
      pOVar11 = (this->open_descriptors_).
                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                ._M_impl._M_start;
    }
    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {
      (this->open_descriptors_).
      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
      ._M_impl._M_finish = pOVar11 + uVar1;
    }
  }
  pOVar11 = pOVar11 + uVar9;
  pOVar11->name = (char *)__oflag;
  pOVar11->is_write = (in_stack_00000010 & 3) != 0;
  pOVar11->stack_next = -1;
  pOVar11->inuse = true;
  pOVar11->is_on_stack = false;
  iVar7 = this->current_ + 1;
  this->current_ = iVar7;
  if (iVar7 < this->limit_) {
    pGVar4 = parameters->options_;
  }
  else {
    close_some_descriptor(this);
    pGVar4 = parameters->options_;
  }
  if ((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */
    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);
  }
  if (pLVar2 == (Lock *)0x0) {
    return uVar9;
  }
  (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);
  return uVar9;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)

{
  uint uVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  char *__s1;
  int *piVar4;
  char cVar5;
  int iVar6;
  int *piVar7;
  uint uVar8;
  int iVar9;
  undefined4 uVar10;
  undefined4 extraout_ECX;
  uint uVar11;
  
  cVar5 = FUN_000622e0(param_1 + 1);
  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);
  }
  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
    param_1[0xb] = 8;
  }
  if (-1 < (int)param_2) {
    puVar3 = (undefined4 *)*param_1;
    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */
      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);
    }
    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);
    __s1 = (char *)*puVar2;
    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))
    {
      if (*(char *)(puVar2 + 2) != '\0') {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */
        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);
      }
      *(undefined1 *)(puVar2 + 2) = 1;
      if (param_1[9] == param_2) {
        param_1[9] = puVar2[1];
        puVar2[1] = 0xffffffff;
        *(undefined1 *)((int)puVar2 + 10) = 0;
      }
      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */
        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);
        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
        return param_2;
      }
      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
      return param_2;
    }
    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
  }
  while( true ) {
    uVar11 = param_4 | 0x80000;
    uVar8 = open64(param_3,uVar11,param_5);
    if (-1 < (int)uVar8) break;
    piVar7 = __errno_location();
    if (1 < *piVar7 - 0x17U) {
      if ((*piVar7 == 2) && (-1 < (int)param_2)) {
        puVar3 = (undefined4 *)*param_1;
        piVar4 = (int *)*puVar3;
        (**(code **)(*piVar4 + 8))(piVar4);
        uVar10 = gettext("file %s was removed during the link");
                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */
        FUN_0005ad00(uVar10,param_3);
        piVar4 = (int *)*puVar3;
        (**(code **)(*piVar4 + 0xc))(piVar4);
        *piVar7 = 2;
      }
      if (DAT_00302378[2] == 0) {
        return uVar8;
      }
      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {
        return uVar8;
      }
      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);
      return uVar8;
    }
    puVar3 = (undefined4 *)*param_1;
    if (puVar3 != (undefined4 *)0x0) {
      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
    }
    iVar6 = param_1[10] + -0x10;
    if (iVar6 < 8) {
      iVar6 = 8;
    }
    param_1[0xb] = iVar6;
                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */
    cVar5 = FUN_00143670(param_1);
    if (cVar5 == '\0') {
      uVar10 = gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */
      FUN_0005aca0(uVar10);
    }
    param_4 = uVar11;
    if (puVar3 != (undefined4 *)0x0) {
      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
    }
  }
  puVar3 = (undefined4 *)*param_1;
  if (puVar3 != (undefined4 *)0x0) {
    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
  }
  iVar6 = param_1[6];
  iVar9 = param_1[7] - iVar6 >> 2;
  uVar11 = iVar9 * -0x55555555;
  if (uVar11 <= uVar8) {
    uVar1 = uVar8 + 0x40;
    if (uVar11 < uVar1) {
                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */
      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);
      iVar6 = param_1[6];
    }
    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {
      param_1[7] = iVar9;
    }
  }
  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);
  *puVar2 = param_3;
  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;
  puVar2[1] = 0xffffffff;
  *(undefined1 *)(puVar2 + 2) = 1;
  *(undefined1 *)((int)puVar2 + 10) = 0;
  iVar6 = param_1[10];
  param_1[10] = iVar6 + 1;
  if (iVar6 + 1 < param_1[0xb]) {
    iVar6 = DAT_00302378[2];
  }
  else {
    FUN_00143670(param_1);
    iVar6 = DAT_00302378[2];
  }
  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */
    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);
  }
  if (puVar3 == (undefined4 *)0x0) {
    return uVar8;
  }
  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
  return uVar8;
}


PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00032730
ADD EBX,0x1be675
SUB ESP,0x28
MOV EAX,dword ptr [EBP + 0x8]
MOV EDI,dword ptr [EBP + 0xc]
ADD EAX,0x4
PUSH EAX
MOV dword ptr [EBP + -0x20],EBX
CALL 0x000622e0
MOV EDX,EDI
ADD ESP,0x10
NOT EDX
SHR EDX,0x1f
MOV dword ptr [EBP + -0x28],EDX
CMP AL,0x1
JZ 0x001439bf
TEST DL,DL
JNZ 0x00143d97
MOV EAX,dword ptr [EBP + -0x20]
LEA EAX,[EAX + 0x378]
MOV dword ptr [EBP + -0x24],EAX
MOV EAX,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x8]
TEST EDX,EDX
JZ 0x001439e4
TEST byte ptr [EAX + 0x14],0x4
JZ 0x001439e4
MOV EAX,dword ptr [EBP + 0x8]
MOV dword ptr [EAX + 0x2c],0x8
TEST EDI,EDI
JS 0x00143b26
MOV EAX,dword ptr [EBP + 0x8]
SUB ESP,0xc
MOV ESI,dword ptr [EAX]
MOV EAX,dword ptr [ESI]
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x8]
MOV EAX,dword ptr [EBP + 0x8]
ADD ESP,0x10
MOV EDX,dword ptr [EAX + 0x18]
MOV EAX,dword ptr [EAX + 0x1c]
MOV dword ptr [EBP + -0x1c],EAX
SUB EAX,EDX
SAR EAX,0x2
IMUL EAX,EAX,-0x55555555
CMP EDI,EAX
JNC 0x00143d7e
LEA EAX,[EDI + EDI*0x2]
LEA EDX,[EDX + EAX*0x4]
MOV EAX,dword ptr [EDX]
CMP EAX,dword ptr [EBP + 0x10]
JZ 0x00143a53
MOV dword ptr [EBP + -0x1c],EDX
TEST EAX,EAX
JZ 0x00143bf8
SUB ESP,0x8
PUSH dword ptr [EBP + 0x10]
MOV EBX,dword ptr [EBP + -0x20]
PUSH EAX
CALL 0x00026b10
ADD ESP,0x10
MOV EDX,dword ptr [EBP + -0x1c]
TEST EAX,EAX
JNZ 0x00143bf8
CMP byte ptr [EDX + 0x8],0x0
JNZ 0x00143db0
MOV EAX,dword ptr [EBP + 0x8]
MOV byte ptr [EDX + 0x8],0x1
CMP dword ptr [EAX + 0x24],EDI
JNZ 0x00143a7d
MOV EAX,dword ptr [EDX + 0x4]
MOV ECX,dword ptr [EBP + 0x8]
MOV dword ptr [ECX + 0x24],EAX
MOV dword ptr [EDX + 0x4],0xffffffff
MOV byte ptr [EDX + 0xa],0x0
MOV EAX,dword ptr [EBP + -0x24]
MOV EAX,dword ptr [EAX]
MOV ECX,dword ptr [EAX + 0x8]
TEST ECX,ECX
JZ 0x00143a93
TEST byte ptr [EAX + 0x14],0x4
JNZ 0x00143c89
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0xc]
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,dword ptr [EBP + -0x20]
CALL 0x00026090
MOV dword ptr [EBP + -0x1c],EAX
MOV EAX,dword ptr [EAX]
LEA EDX,[EAX + -0x17]
CMP EDX,0x1
JA 0x00143cb4
MOV EAX,dword ptr [EBP + 0x8]
MOV EDI,dword ptr [EAX]
TEST EDI,EDI
JZ 0x00143ae0
MOV EAX,dword ptr [EDI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x8]
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0x8]
MOV ECX,0x8
MOV EBX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX + 0x28]
MOV dword ptr [EBP + -0x1c],EAX
SUB EAX,0x10
CMP EAX,0x8
CMOVL EAX,ECX
SUB ESP,0xc
MOV dword ptr [EBX + 0x2c],EAX
PUSH EBX
CALL 0x00143670
ADD ESP,0x10
TEST AL,AL
JZ 0x00143d62
TEST EDI,EDI
JZ 0x00143b23
MOV EAX,dword ptr [EDI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0xc]
ADD ESP,0x10
MOV dword ptr [EBP + 0x14],ESI
MOV ESI,dword ptr [EBP + 0x14]
SUB ESP,0x4
MOV EBX,dword ptr [EBP + -0x20]
PUSH dword ptr [EBP + 0x18]
OR ESI,0x80000
PUSH ESI
PUSH dword ptr [EBP + 0x10]
CALL 0x000269a0
ADD ESP,0x10
MOV EDI,EAX
TEST EAX,EAX
JS 0x00143ab0
MOV EAX,dword ptr [EBP + 0x8]
MOV ESI,dword ptr [EAX]
TEST ESI,ESI
JZ 0x00143b65
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x8]
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0x8]
MOV ECX,dword ptr [EAX + 0x1c]
MOV EDX,dword ptr [EAX + 0x18]
MOV EAX,ECX
SUB EAX,EDX
SAR EAX,0x2
IMUL EAX,EAX,-0x55555555
CMP EDI,EAX
JNC 0x00143c38
MOV ECX,dword ptr [EBP + 0x10]
LEA EAX,[EDI + EDI*0x2]
TEST byte ptr [EBP + 0x14],0x3
LEA EAX,[EDX + EAX*0x4]
MOV dword ptr [EAX],ECX
MOV ECX,dword ptr [EBP + 0x8]
SETNZ byte ptr [EAX + 0x9]
MOV dword ptr [EAX + 0x4],0xffffffff
MOV byte ptr [EAX + 0x8],0x1
MOV byte ptr [EAX + 0xa],0x0
MOV EAX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX + 0x28]
MOV dword ptr [EBP + -0x1c],EAX
ADD EAX,0x1
MOV dword ptr [ECX + 0x28],EAX
CMP EAX,dword ptr [ECX + 0x2c]
JGE 0x00143c68
MOV EAX,dword ptr [EBP + -0x24]
MOV EAX,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x8]
TEST EDX,EDX
JZ 0x00143bd2
TEST byte ptr [EAX + 0x14],0x4
JNZ 0x00143c10
TEST ESI,ESI
JZ 0x00143aa1
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0xc]
MOV EAX,EDI
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0xc]
ADD ESP,0x10
JMP 0x00143b26
MOV EBX,dword ptr [EBP + -0x20]
PUSH dword ptr [EBP + 0x10]
PUSH EDI
LEA EDX,[EBX + 0xfff32e18]
PUSH EDX
PUSH dword ptr [EAX]
CALL 0x0005ac40
ADD ESP,0x10
TEST ESI,ESI
JNZ 0x00143bda
JMP 0x00143aa1
LEA EBX,[EDI + 0x40]
CMP EBX,EAX
JA 0x00143cf6
JNC 0x00143b83
LEA EAX,[EBX + EBX*0x2]
LEA EAX,[EDX + EAX*0x4]
CMP ECX,EAX
JZ 0x00143b83
MOV ECX,dword ptr [EBP + 0x8]
MOV dword ptr [ECX + 0x1c],EAX
JMP 0x00143b83
SUB ESP,0xc
PUSH ECX
CALL 0x00143670
MOV EAX,dword ptr [EBP + -0x24]
ADD ESP,0x10
MOV EAX,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x8]
TEST EDX,EDX
JNZ 0x00143bcc
JMP 0x00143bd2
MOV EBX,dword ptr [EBP + -0x20]
PUSH dword ptr [EBP + 0x10]
PUSH EDI
LEA EDX,[EBX + 0xfff32dcc]
PUSH EDX
PUSH dword ptr [EAX]
CALL 0x0005ac40
MOV EAX,dword ptr [ESI]
ADD ESP,0x10
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0xc]
ADD ESP,0x10
JMP 0x00143aa1
CMP EAX,0x2
JNZ 0x00143cbf
CMP byte ptr [EBP + -0x28],0x0
JNZ 0x00143d16
MOV EAX,dword ptr [EBP + -0x24]
MOV EAX,dword ptr [EAX]
MOV ECX,dword ptr [EAX + 0x8]
TEST ECX,ECX
JZ 0x00143aa1
TEST byte ptr [EAX + 0x14],0x4
JZ 0x00143aa1
MOV EBX,dword ptr [EBP + -0x20]
PUSH dword ptr [EBP + 0x10]
PUSH EDI
LEA EDX,[EBX + 0xfff32e18]
PUSH EDX
PUSH dword ptr [EAX]
CALL 0x0005ac40
ADD ESP,0x10
JMP 0x00143aa1
SUB EBX,EAX
MOV EAX,dword ptr [EBP + 0x8]
SUB ESP,0x8
PUSH EBX
ADD EAX,0x18
PUSH EAX
CALL 0x00143e20
MOV EAX,dword ptr [EBP + 0x8]
ADD ESP,0x10
MOV EDX,dword ptr [EAX + 0x18]
JMP 0x00143b83
MOV EAX,dword ptr [EBP + 0x8]
SUB ESP,0xc
MOV ESI,dword ptr [EAX]
MOV EAX,dword ptr [ESI]
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x8]
MOV ECX,dword ptr [EBP + -0x20]
LEA EAX,[ECX + 0xfff32df4]
MOV EBX,ECX
MOV dword ptr [ESP],EAX
CALL 0x000263b0
POP EBX
POP EDX
PUSH dword ptr [EBP + 0x10]
MOV EBX,dword ptr [EBP + -0x20]
PUSH EAX
CALL 0x0005ad00
MOV EAX,dword ptr [ESI]
MOV EDX,dword ptr [EAX]
MOV dword ptr [ESP],EAX
CALL dword ptr [EDX + 0xc]
MOV EAX,dword ptr [EBP + -0x1c]
ADD ESP,0x10
MOV dword ptr [EAX],0x2
JMP 0x00143cbf
MOV ESI,dword ptr [EBP + -0x20]
SUB ESP,0xc
LEA EAX,[ESI + 0xfff32e3c]
MOV EBX,ESI
PUSH EAX
CALL 0x000263b0
MOV dword ptr [ESP],EAX
CALL 0x0005aca0
MOV EBX,dword ptr [EBP + -0x20]
PUSH EDI
LEA EAX,[EBX + 0xfff32e8c]
PUSH EAX
LEA EAX,[EBX + 0xfff32d32]
PUSH 0x5d
PUSH EAX
CALL 0x0005f0b0
MOV EBX,dword ptr [EBP + -0x20]
PUSH ECX
LEA EAX,[EBX + 0xfff32e8c]
PUSH EAX
LEA EAX,[EBX + 0xfff32d32]
PUSH 0x53
PUSH EAX
CALL 0x0005f0b0
PUSH EBX
MOV EBX,dword ptr [EBP + -0x20]
LEA EAX,[EBX + 0xfff32e8c]
PUSH EAX
LEA EAX,[EBX + 0xfff32d32]
PUSH 0x62
PUSH EAX
CALL 0x0005f0b0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nuint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}\n\n" comment (function_definition "uint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" type_identifier (function_declarator "FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" identifier (parameter_list "(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (expression_statement "cVar5 = FUN_000622e0(param_1 + 1);" (assignment_expression "cVar5 = FUN_000622e0(param_1 + 1)" identifier = (call_expression "FUN_000622e0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) ;) (if_statement "if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" if (parenthesized_expression "((cVar5 != '\x01') && (-1 < (int)param_2))" ( (binary_expression "(cVar5 != '\x01') && (-1 < (int)param_2)" (parenthesized_expression "(cVar5 != '\x01')" ( (binary_expression "cVar5 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) && (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" { comment (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" identifier (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , identifier ))) ;) })) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }" if (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" ( (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    param_1[0xb] = 8;\n  }" { (expression_statement "param_1[0xb] = 8;" (assignment_expression "param_1[0xb] = 8" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = number_literal) ;) })) (if_statement "if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" if (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" { (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (if_statement "if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" if (parenthesized_expression "((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2)" ( (binary_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2" (call_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((param_1[7] - param_1[6] >> 2) * -0x55555555)" ( (binary_expression "(param_1[7] - param_1[6] >> 2) * -0x55555555" (parenthesized_expression "(param_1[7] - param_1[6] >> 2)" ( (binary_expression "param_1[7] - param_1[6] >> 2" (binary_expression "param_1[7] - param_1[6]" (subscript_expression "param_1[7]" identifier [ number_literal ]) - (subscript_expression "param_1[6]" identifier [ number_literal ])) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" { comment comment (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" identifier (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , identifier ))) ;) })) (expression_statement "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc)" identifier = (cast_expression "(undefined4 *)(param_1[6] + param_2 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[6] + param_2 * 0xc)" ( (binary_expression "param_1[6] + param_2 * 0xc" (subscript_expression "param_1[6]" identifier [ number_literal ]) + (binary_expression "param_2 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "__s1 = (char *)*puVar2;" (assignment_expression "__s1 = (char *)*puVar2" identifier = (cast_expression "(char *)*puVar2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ;) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" if (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))" ( (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" (parenthesized_expression "(__s1 == param_3)" ( (binary_expression "__s1 == param_3" identifier == identifier) )) || (parenthesized_expression "((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" ( (parenthesized_expression "(__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))" ( (binary_expression "__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)" (binary_expression "__s1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar6 = strcmp(__s1,param_3), iVar6 == 0)" ( (comma_expression "iVar6 = strcmp(__s1,param_3), iVar6 == 0" (assignment_expression "iVar6 = strcmp(__s1,param_3)" identifier = (call_expression "strcmp(__s1,param_3)" identifier (argument_list "(__s1,param_3)" ( identifier , identifier )))) , (binary_expression "iVar6 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" { (if_statement "if (*(char *)(puVar2 + 2) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" if (parenthesized_expression "(*(char *)(puVar2 + 2) != '\0')" ( (binary_expression "*(char *)(puVar2 + 2) != '\0'" (pointer_expression "*(char *)(puVar2 + 2)" * (cast_expression "(char *)(puVar2 + 2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" { comment comment (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" identifier (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , (pointer_expression "&__DT_PLTGOT" & identifier) ))) ;) })) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" * (cast_expression "(undefined1 *)(puVar2 + 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" if (parenthesized_expression "(param_1[9] == param_2)" ( (binary_expression "param_1[9] == param_2" (subscript_expression "param_1[9]" identifier [ number_literal ]) == identifier) )) (compound_statement "{\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" { (expression_statement "param_1[9] = puVar2[1];" (assignment_expression "param_1[9] = puVar2[1]" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (subscript_expression "puVar2[1]" identifier [ number_literal ])) ;) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" * (cast_expression "(undefined1 *)((int)puVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 10)" ( (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) })) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" if (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" ( (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" { comment (expression_statement "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" identifier (argument_list "(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (while_statement "while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" { (expression_statement "uVar11 = param_4 | 0x80000;" (assignment_expression "uVar11 = param_4 | 0x80000" identifier = (binary_expression "param_4 | 0x80000" identifier | number_literal)) ;) (expression_statement "uVar8 = open64(param_3,uVar11,param_5);" (assignment_expression "uVar8 = open64(param_3,uVar11,param_5)" identifier = (call_expression "open64(param_3,uVar11,param_5)" identifier (argument_list "(param_3,uVar11,param_5)" ( identifier , identifier , identifier )))) ;) (if_statement "if (-1 < (int)uVar8) break;" if (parenthesized_expression "(-1 < (int)uVar8)" ( (binary_expression "-1 < (int)uVar8" number_literal < (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" if (parenthesized_expression "(1 < *piVar7 - 0x17U)" ( (binary_expression "1 < *piVar7 - 0x17U" number_literal < (binary_expression "*piVar7 - 0x17U" (pointer_expression "*piVar7" * identifier) - number_literal)) )) (compound_statement "{\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" { (if_statement "if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" if (parenthesized_expression "((*piVar7 == 2) && (-1 < (int)param_2))" ( (binary_expression "(*piVar7 == 2) && (-1 < (int)param_2)" (parenthesized_expression "(*piVar7 == 2)" ( (binary_expression "*piVar7 == 2" (pointer_expression "*piVar7" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" { (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" identifier = (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "(**(code **)(*piVar4 + 8))(piVar4);" (call_expression "(**(code **)(*piVar4 + 8))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 8))" ( (pointer_expression "**(code **)(*piVar4 + 8)" * (pointer_expression "*(code **)(*piVar4 + 8)" * (cast_expression "(code **)(*piVar4 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 8)" ( (binary_expression "*piVar4 + 8" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "(piVar4)" ( identifier ))) ;) (expression_statement "uVar10 = gettext("file %s was removed during the link");" (assignment_expression "uVar10 = gettext("file %s was removed during the link")" identifier = (call_expression "gettext("file %s was removed during the link")" identifier (argument_list "("file %s was removed during the link")" ( (string_literal ""file %s was removed during the link"" " string_content ") )))) ;) comment (expression_statement "FUN_0005ad00(uVar10,param_3);" (call_expression "FUN_0005ad00(uVar10,param_3)" identifier (argument_list "(uVar10,param_3)" ( identifier , identifier ))) ;) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" identifier = (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "(**(code **)(*piVar4 + 0xc))(piVar4);" (call_expression "(**(code **)(*piVar4 + 0xc))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 0xc))" ( (pointer_expression "**(code **)(*piVar4 + 0xc)" * (pointer_expression "*(code **)(*piVar4 + 0xc)" * (cast_expression "(code **)(*piVar4 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 0xc)" ( (binary_expression "*piVar4 + 0xc" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "(piVar4)" ( identifier ))) ;) (expression_statement "*piVar7 = 2;" (assignment_expression "*piVar7 = 2" (pointer_expression "*piVar7" * identifier) = number_literal) ;) })) (if_statement "if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }" if (parenthesized_expression "(DAT_00302378[2] == 0)" ( (binary_expression "DAT_00302378[2] == 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n        return uVar8;\n      }" { (return_statement "return uVar8;" return identifier ;) })) (if_statement "if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }" if (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) == 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) == 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return uVar8;\n      }" { (return_statement "return uVar8;" return identifier ;) })) (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" identifier (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (return_statement "return uVar8;" return identifier ;) })) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (expression_statement "iVar6 = param_1[10] + -0x10;" (assignment_expression "iVar6 = param_1[10] + -0x10" identifier = (binary_expression "param_1[10] + -0x10" (subscript_expression "param_1[10]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (iVar6 < 8) {\n      iVar6 = 8;\n    }" if (parenthesized_expression "(iVar6 < 8)" ( (binary_expression "iVar6 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar6 = 8;\n    }" { (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" identifier = number_literal) ;) })) (expression_statement "param_1[0xb] = iVar6;" (assignment_expression "param_1[0xb] = iVar6" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) comment (expression_statement "cVar5 = FUN_00143670(param_1);" (assignment_expression "cVar5 = FUN_00143670(param_1)" identifier = (call_expression "FUN_00143670(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      FUN_0005aca0(uVar10);\n    }" { (expression_statement "uVar10 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar10 = gettext("out of file descriptors and couldn\'t close any")" identifier = (call_expression "gettext("out of file descriptors and couldn\'t close any")" identifier (argument_list "("out of file descriptors and couldn\'t close any")" ( (string_literal ""out of file descriptors and couldn\'t close any"" " string_content escape_sequence string_content ") )))) ;) comment comment (expression_statement "FUN_0005aca0(uVar10);" (call_expression "FUN_0005aca0(uVar10)" identifier (argument_list "(uVar10)" ( identifier ))) ;) })) (expression_statement "param_4 = uVar11;" (assignment_expression "param_4 = uVar11" identifier = identifier) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) })) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = param_1[7] - iVar6 >> 2;" (assignment_expression "iVar9 = param_1[7] - iVar6 >> 2" identifier = (binary_expression "param_1[7] - iVar6 >> 2" (binary_expression "param_1[7] - iVar6" (subscript_expression "param_1[7]" identifier [ number_literal ]) - identifier) >> number_literal)) ;) (expression_statement "uVar11 = iVar9 * -0x55555555;" (assignment_expression "uVar11 = iVar9 * -0x55555555" identifier = (binary_expression "iVar9 * -0x55555555" identifier * number_literal)) ;) (if_statement "if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" if (parenthesized_expression "(uVar11 <= uVar8)" ( (binary_expression "uVar11 <= uVar8" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" { (expression_statement "uVar1 = uVar8 + 0x40;" (assignment_expression "uVar1 = uVar8 + 0x40" identifier = (binary_expression "uVar8 + 0x40" identifier + number_literal)) ;) (if_statement "if (uVar11 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" if (parenthesized_expression "(uVar11 < uVar1)" ( (binary_expression "uVar11 < uVar1" identifier < identifier) )) (compound_statement "{\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }" { comment (expression_statement "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);" (call_expression "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555)" identifier (argument_list "(param_1 + 6,uVar1 + iVar9 * 0x55555555)" ( (binary_expression "param_1 + 6" identifier + number_literal) , (binary_expression "uVar1 + iVar9 * 0x55555555" identifier + (binary_expression "iVar9 * 0x55555555" identifier * number_literal)) ))) ;) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) }) (else_clause "else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" else (if_statement "if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" if (parenthesized_expression "((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9))" ( (binary_expression "(uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" (parenthesized_expression "(uVar1 < uVar11)" ( (binary_expression "uVar1 < uVar11" identifier < identifier) )) && (parenthesized_expression "(iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" ( (comma_expression "iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9" (assignment_expression "iVar9 = iVar6 + uVar1 * 0xc" identifier = (binary_expression "iVar6 + uVar1 * 0xc" identifier + (binary_expression "uVar1 * 0xc" identifier * number_literal))) , (binary_expression "param_1[7] != iVar9" (subscript_expression "param_1[7]" identifier [ number_literal ]) != identifier)) ))) )) (compound_statement "{\n      param_1[7] = iVar9;\n    }" { (expression_statement "param_1[7] = iVar9;" (assignment_expression "param_1[7] = iVar9" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) })))) })) (expression_statement "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc)" identifier = (cast_expression "(undefined4 *)(iVar6 + uVar8 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + uVar8 * 0xc)" ( (binary_expression "iVar6 + uVar8 * 0xc" identifier + (binary_expression "uVar8 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "*puVar2 = param_3;" (assignment_expression "*puVar2 = param_3" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((int)puVar2 + 9)" * (cast_expression "(bool *)((int)puVar2 + 9)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 9)" ( (binary_expression "(int)puVar2 + 9" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "(param_4 & 3) != 0" (parenthesized_expression "(param_4 & 3)" ( (binary_expression "param_4 & 3" identifier & number_literal) )) != number_literal)) ;) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" * (cast_expression "(undefined1 *)(puVar2 + 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" * (cast_expression "(undefined1 *)((int)puVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 10)" ( (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = param_1[10];" (assignment_expression "iVar6 = param_1[10]" identifier = (subscript_expression "param_1[10]" identifier [ number_literal ])) ;) (expression_statement "param_1[10] = iVar6 + 1;" (assignment_expression "param_1[10] = iVar6 + 1" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" if (parenthesized_expression "(iVar6 + 1 < param_1[0xb])" ( (binary_expression "iVar6 + 1 < param_1[0xb]" (binary_expression "iVar6 + 1" identifier + number_literal) < (subscript_expression "param_1[0xb]" identifier [ number_literal ])) )) (compound_statement "{\n    iVar6 = DAT_00302378[2];\n  }" { (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" identifier = (subscript_expression "DAT_00302378[2]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" else (compound_statement "{\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" { (expression_statement "FUN_00143670(param_1);" (call_expression "FUN_00143670(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" identifier = (subscript_expression "DAT_00302378[2]" identifier [ number_literal ])) ;) }))) (if_statement "if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" if (parenthesized_expression "((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" { comment (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" identifier (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) })) (if_statement "if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }" if (parenthesized_expression "(puVar3 == (undefined4 *)0x0)" ( (binary_expression "puVar3 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return uVar8;\n  }" { (return_statement "return uVar8;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: int open(Descriptors * this, int descriptor, char * name, int flags,\n   int mode) */\n\nint __thiscall gold::Descriptors::open(Descriptors *this,char *__file,int __oflag,...)\n\n{\n  uint uVar1;\n  Lock *pLVar2;\n  pointer pOVar3;\n  General_options *pGVar4;\n  Lock_impl *pLVar5;\n  bool bVar6;\n  int iVar7;\n  int *piVar8;\n  uint uVar9;\n  char *pcVar10;\n  pointer pOVar11;\n  uint uVar12;\n  uint in_stack_00000010;\n  undefined4 in_stack_00000014;\n  \n  bVar6 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar6) && (-1 < (int)__file)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n    this->limit_ = 8;\n  }\n  if (-1 < (int)__file) {\n    pLVar2 = this->lock_;\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar11 = pOVar11 + (int)__file;\n    pcVar10 = pOVar11->name;\n    if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }\n    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  }\n  while( true ) {\n    uVar12 = in_stack_00000010 | 0x80000;\n    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);\n    if (-1 < (int)uVar9) break;\n    piVar8 = __errno_location();\n    if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }\n    pLVar2 = this->lock_;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }\n    iVar7 = this->current_ + -0x10;\n    if (iVar7 < 8) {\n      iVar7 = 8;\n    }\n    this->limit_ = iVar7;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    bVar6 = close_some_descriptor(this);\n    if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }\n    in_stack_00000010 = uVar12;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }\n  }\n  pLVar2 = this->lock_;\n  if (pLVar2 != (Lock *)0x0) {\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n  }\n  pOVar3 = (this->open_descriptors_).\n           super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n           ._M_impl._M_finish;\n  pOVar11 = (this->open_descriptors_).\n            super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n            ._M_impl._M_start;\n  iVar7 = (int)pOVar3 - (int)pOVar11 >> 2;\n  uVar12 = iVar7 * -0x55555555;\n  if (uVar12 <= uVar9) {\n    uVar1 = uVar9 + 0x40;\n    if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }\n  }\n  pOVar11 = pOVar11 + uVar9;\n  pOVar11->name = (char *)__oflag;\n  pOVar11->is_write = (in_stack_00000010 & 3) != 0;\n  pOVar11->stack_next = -1;\n  pOVar11->inuse = true;\n  pOVar11->is_on_stack = false;\n  iVar7 = this->current_ + 1;\n  this->current_ = iVar7;\n  if (iVar7 < this->limit_) {\n    pGVar4 = parameters->options_;\n  }\n  else {\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }\n  if ((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n  }\n  if (pLVar2 == (Lock *)0x0) {\n    return uVar9;\n  }\n  (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  return uVar9;\n}\n\n" comment comment comment comment (function_definition "int __thiscall gold::Descriptors::open(Descriptors *this,char *__file,int __oflag,...)\n\n{\n  uint uVar1;\n  Lock *pLVar2;\n  pointer pOVar3;\n  General_options *pGVar4;\n  Lock_impl *pLVar5;\n  bool bVar6;\n  int iVar7;\n  int *piVar8;\n  uint uVar9;\n  char *pcVar10;\n  pointer pOVar11;\n  uint uVar12;\n  uint in_stack_00000010;\n  undefined4 in_stack_00000014;\n  \n  bVar6 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar6) && (-1 < (int)__file)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n    this->limit_ = 8;\n  }\n  if (-1 < (int)__file) {\n    pLVar2 = this->lock_;\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar11 = pOVar11 + (int)__file;\n    pcVar10 = pOVar11->name;\n    if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }\n    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  }\n  while( true ) {\n    uVar12 = in_stack_00000010 | 0x80000;\n    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);\n    if (-1 < (int)uVar9) break;\n    piVar8 = __errno_location();\n    if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }\n    pLVar2 = this->lock_;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }\n    iVar7 = this->current_ + -0x10;\n    if (iVar7 < 8) {\n      iVar7 = 8;\n    }\n    this->limit_ = iVar7;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    bVar6 = close_some_descriptor(this);\n    if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }\n    in_stack_00000010 = uVar12;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }\n  }\n  pLVar2 = this->lock_;\n  if (pLVar2 != (Lock *)0x0) {\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n  }\n  pOVar3 = (this->open_descriptors_).\n           super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n           ._M_impl._M_finish;\n  pOVar11 = (this->open_descriptors_).\n            super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n            ._M_impl._M_start;\n  iVar7 = (int)pOVar3 - (int)pOVar11 >> 2;\n  uVar12 = iVar7 * -0x55555555;\n  if (uVar12 <= uVar9) {\n    uVar1 = uVar9 + 0x40;\n    if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }\n  }\n  pOVar11 = pOVar11 + uVar9;\n  pOVar11->name = (char *)__oflag;\n  pOVar11->is_write = (in_stack_00000010 & 3) != 0;\n  pOVar11->stack_next = -1;\n  pOVar11->inuse = true;\n  pOVar11->is_on_stack = false;\n  iVar7 = this->current_ + 1;\n  this->current_ = iVar7;\n  if (iVar7 < this->limit_) {\n    pGVar4 = parameters->options_;\n  }\n  else {\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }\n  if ((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n  }\n  if (pLVar2 == (Lock *)0x0) {\n    return uVar9;\n  }\n  (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  return uVar9;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Descriptors::" identifier : : identifier : :) (function_declarator "open(Descriptors *this,char *__file,int __oflag,...)" identifier (parameter_list "(Descriptors *this,char *__file,int __oflag,...)" ( (parameter_declaration "Descriptors *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "char *__file" primitive_type (pointer_declarator "*__file" * identifier)) , (parameter_declaration "int __oflag" primitive_type identifier) , (variadic_parameter "..." ...) ))) (compound_statement "{\n  uint uVar1;\n  Lock *pLVar2;\n  pointer pOVar3;\n  General_options *pGVar4;\n  Lock_impl *pLVar5;\n  bool bVar6;\n  int iVar7;\n  int *piVar8;\n  uint uVar9;\n  char *pcVar10;\n  pointer pOVar11;\n  uint uVar12;\n  uint in_stack_00000010;\n  undefined4 in_stack_00000014;\n  \n  bVar6 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar6) && (-1 < (int)__file)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }\n  if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n    this->limit_ = 8;\n  }\n  if (-1 < (int)__file) {\n    pLVar2 = this->lock_;\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar11 = pOVar11 + (int)__file;\n    pcVar10 = pOVar11->name;\n    if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }\n    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  }\n  while( true ) {\n    uVar12 = in_stack_00000010 | 0x80000;\n    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);\n    if (-1 < (int)uVar9) break;\n    piVar8 = __errno_location();\n    if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }\n    pLVar2 = this->lock_;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }\n    iVar7 = this->current_ + -0x10;\n    if (iVar7 < 8) {\n      iVar7 = 8;\n    }\n    this->limit_ = iVar7;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    bVar6 = close_some_descriptor(this);\n    if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }\n    in_stack_00000010 = uVar12;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }\n  }\n  pLVar2 = this->lock_;\n  if (pLVar2 != (Lock *)0x0) {\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n  }\n  pOVar3 = (this->open_descriptors_).\n           super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n           ._M_impl._M_finish;\n  pOVar11 = (this->open_descriptors_).\n            super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n            ._M_impl._M_start;\n  iVar7 = (int)pOVar3 - (int)pOVar11 >> 2;\n  uVar12 = iVar7 * -0x55555555;\n  if (uVar12 <= uVar9) {\n    uVar1 = uVar9 + 0x40;\n    if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }\n  }\n  pOVar11 = pOVar11 + uVar9;\n  pOVar11->name = (char *)__oflag;\n  pOVar11->is_write = (in_stack_00000010 & 3) != 0;\n  pOVar11->stack_next = -1;\n  pOVar11->inuse = true;\n  pOVar11->is_on_stack = false;\n  iVar7 = this->current_ + 1;\n  this->current_ = iVar7;\n  if (iVar7 < this->limit_) {\n    pGVar4 = parameters->options_;\n  }\n  else {\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }\n  if ((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n  }\n  if (pLVar2 == (Lock *)0x0) {\n    return uVar9;\n  }\n  (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  return uVar9;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "Lock *pLVar2;" type_identifier (pointer_declarator "*pLVar2" * identifier) ;) (declaration "pointer pOVar3;" type_identifier identifier ;) (declaration "General_options *pGVar4;" type_identifier (pointer_declarator "*pGVar4" * identifier) ;) (declaration "Lock_impl *pLVar5;" type_identifier (pointer_declarator "*pLVar5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "pointer pOVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint in_stack_00000010;" type_identifier identifier ;) (declaration "undefined4 in_stack_00000014;" type_identifier identifier ;) (ERROR "bVar6 = Initialize_lock::" (assignment_expression "bVar6 = Initialize_lock" identifier = identifier) : :) (expression_statement "initialize(&this->initialize_lock_);" (call_expression "initialize(&this->initialize_lock_)" identifier (argument_list "(&this->initialize_lock_)" ( (pointer_expression "&this->initialize_lock_" & (field_expression "this->initialize_lock_" identifier -> field_identifier)) ))) ;) (if_statement "if ((!bVar6) && (-1 < (int)__file)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }" if (parenthesized_expression "((!bVar6) && (-1 < (int)__file))" ( (binary_expression "(!bVar6) && (-1 < (int)__file)" (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) && (parenthesized_expression "(-1 < (int)__file)" ( (binary_expression "-1 < (int)__file" number_literal < (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");" (call_expression "do_gold_unreachable("../../gold/descriptors.cc",0x53,"open")" identifier (argument_list "("../../gold/descriptors.cc",0x53,"open")" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (string_literal ""open"" " string_content ") ))) ;) })) (if_statement "if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n    this->limit_ = 8;\n  }" if (parenthesized_expression "((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0))" ( (binary_expression "(parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)" (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((parameters->debug_ & 4) != 0)" ( (binary_expression "(parameters->debug_ & 4) != 0" (parenthesized_expression "(parameters->debug_ & 4)" ( (binary_expression "parameters->debug_ & 4" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    this->limit_ = 8;\n  }" { (expression_statement "this->limit_ = 8;" (assignment_expression "this->limit_ = 8" (field_expression "this->limit_" identifier -> field_identifier) = number_literal) ;) })) (if_statement "if (-1 < (int)__file) {\n    pLVar2 = this->lock_;\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar11 = pOVar11 + (int)__file;\n    pcVar10 = pOVar11->name;\n    if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }\n    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  }" if (parenthesized_expression "(-1 < (int)__file)" ( (binary_expression "-1 < (int)__file" number_literal < (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pLVar2 = this->lock_;\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar11 = pOVar11 + (int)__file;\n    pcVar10 = pOVar11->name;\n    if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }\n    (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n  }" { (expression_statement "pLVar2 = this->lock_;" (assignment_expression "pLVar2 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) (ERROR "pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold::" (assignment_expression "pOVar11 = (this->open_descriptors_).\n              super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n              super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n              super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n              ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n              ._M_impl._M_start" (field_expression "Open_descriptor>_>\n              ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if ((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }" if (parenthesized_expression "((char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file)" ( (binary_expression "(char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555) <= __file" (cast_expression "(char *)(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555)" ( (binary_expression "((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2) * -0x55555555" (parenthesized_expression "((int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2)" ( (ERROR "(int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::" (comma_expression "(int)(this->open_descriptors_).\n                       super__Vector_base<gold::Descriptors::Open_descriptor,_std" (binary_expression "(int)(this->open_descriptors_).\n                       super__Vector_base<gold" (cast_expression "(int)(this->open_descriptors_).\n                       super__Vector_base" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->open_descriptors_).\n                       super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier)) < identifier) (ERROR "::Descriptors::Open_descriptor" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11 >> 2" (binary_expression "Open_descriptor>_>\n                       ._M_impl._M_finish - (int)pOVar11" (field_expression "Open_descriptor>_>\n                       ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n                       ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(int)pOVar11" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }" { comment comment (expression_statement "do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");" (call_expression "do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open")" identifier (argument_list "("../../gold/descriptors.cc",0x5d,"open")" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (string_literal ""open"" " string_content ") ))) ;) })) (expression_statement "pOVar11 = pOVar11 + (int)__file;" (assignment_expression "pOVar11 = pOVar11 + (int)__file" identifier = (binary_expression "pOVar11 + (int)__file" identifier + (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pcVar10 = pOVar11->name;" (assignment_expression "pcVar10 = pOVar11->name" identifier = (field_expression "pOVar11->name" identifier -> field_identifier)) ;) (if_statement "if ((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))) {\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }" if (parenthesized_expression "((pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0))))" ( (binary_expression "(pcVar10 == (char *)__oflag) ||\n       ((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))" (parenthesized_expression "(pcVar10 == (char *)__oflag)" ( (binary_expression "pcVar10 == (char *)__oflag" identifier == (cast_expression "(char *)__oflag" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )) || (parenthesized_expression "((pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)))" ( (parenthesized_expression "(pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0))" ( (binary_expression "pcVar10 != (char *)0x0 && (iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)" (binary_expression "pcVar10 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0)" ( (comma_expression "iVar7 = strcmp(pcVar10,(char *)__oflag), iVar7 == 0" (assignment_expression "iVar7 = strcmp(pcVar10,(char *)__oflag)" identifier = (call_expression "strcmp(pcVar10,(char *)__oflag)" identifier (argument_list "(pcVar10,(char *)__oflag)" ( identifier , (cast_expression "(char *)__oflag" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "iVar7 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar11->inuse = true;\n      if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n      return (int)__file;\n    }" { (if_statement "if (pOVar11->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }" if (parenthesized_expression "(pOVar11->inuse != false)" ( (binary_expression "pOVar11->inuse != false" (field_expression "pOVar11->inuse" identifier -> field_identifier) != false) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }" { comment comment (expression_statement "do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");" (call_expression "do_gold_unreachable("../../gold/descriptors.cc",0x62,"open")" identifier (argument_list "("../../gold/descriptors.cc",0x62,"open")" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (string_literal ""open"" " string_content ") ))) ;) })) (expression_statement "pOVar11->inuse = true;" (assignment_expression "pOVar11->inuse = true" (field_expression "pOVar11->inuse" identifier -> field_identifier) = true) ;) (if_statement "if ((char *)this->stack_top_ == __file) {\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }" if (parenthesized_expression "((char *)this->stack_top_ == __file)" ( (binary_expression "(char *)this->stack_top_ == __file" (cast_expression "(char *)this->stack_top_" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "this->stack_top_" identifier -> field_identifier)) == identifier) )) (compound_statement "{\n        this->stack_top_ = pOVar11->stack_next;\n        pOVar11->stack_next = -1;\n        pOVar11->is_on_stack = false;\n      }" { (expression_statement "this->stack_top_ = pOVar11->stack_next;" (assignment_expression "this->stack_top_ = pOVar11->stack_next" (field_expression "this->stack_top_" identifier -> field_identifier) = (field_expression "pOVar11->stack_next" identifier -> field_identifier)) ;) (expression_statement "pOVar11->stack_next = -1;" (assignment_expression "pOVar11->stack_next = -1" (field_expression "pOVar11->stack_next" identifier -> field_identifier) = number_literal) ;) (expression_statement "pOVar11->is_on_stack = false;" (assignment_expression "pOVar11->is_on_stack = false" (field_expression "pOVar11->is_on_stack" identifier -> field_identifier) = false) ;) })) (if_statement "if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }" if (parenthesized_expression "((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0))" ( (binary_expression "(parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)" (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((parameters->debug_ & 4) != 0)" ( (binary_expression "(parameters->debug_ & 4) != 0" (parenthesized_expression "(parameters->debug_ & 4)" ( (binary_expression "parameters->debug_ & 4" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;\n        (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n        return (int)__file;\n      }" { comment (labeled_statement "Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)\n        ;" (call_expression "debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)" identifier (argument_list "(parameters->errors_,"Reused existing descriptor %d for \"%s\"",__file,__oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;)) (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) (return_statement "return (int)__file;" return (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier) ;) })) (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) (return_statement "return (int)__file;" return (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier) ;) })) (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) })) (while_statement "while( true ) {\n    uVar12 = in_stack_00000010 | 0x80000;\n    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);\n    if (-1 < (int)uVar9) break;\n    piVar8 = __errno_location();\n    if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }\n    pLVar2 = this->lock_;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }\n    iVar7 = this->current_ + -0x10;\n    if (iVar7 < 8) {\n      iVar7 = 8;\n    }\n    this->limit_ = iVar7;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    bVar6 = close_some_descriptor(this);\n    if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }\n    in_stack_00000010 = uVar12;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar12 = in_stack_00000010 | 0x80000;\n    uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);\n    if (-1 < (int)uVar9) break;\n    piVar8 = __errno_location();\n    if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }\n    pLVar2 = this->lock_;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }\n    iVar7 = this->current_ + -0x10;\n    if (iVar7 < 8) {\n      iVar7 = 8;\n    }\n    this->limit_ = iVar7;\n                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */\n    bVar6 = close_some_descriptor(this);\n    if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }\n    in_stack_00000010 = uVar12;\n    if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }\n  }" { (expression_statement "uVar12 = in_stack_00000010 | 0x80000;" (assignment_expression "uVar12 = in_stack_00000010 | 0x80000" identifier = (binary_expression "in_stack_00000010 | 0x80000" identifier | number_literal)) ;) (expression_statement "uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014);" (assignment_expression "uVar9 = open64((char *)__oflag,uVar12,in_stack_00000014)" identifier = (call_expression "open64((char *)__oflag,uVar12,in_stack_00000014)" identifier (argument_list "((char *)__oflag,uVar12,in_stack_00000014)" ( (cast_expression "(char *)__oflag" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier )))) ;) (if_statement "if (-1 < (int)uVar9) break;" if (parenthesized_expression "(-1 < (int)uVar9)" ( (binary_expression "-1 < (int)uVar9" number_literal < (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar8 = __errno_location();" (assignment_expression "piVar8 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar8 - 0x17U) {\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }" if (parenthesized_expression "(1 < *piVar8 - 0x17U)" ( (binary_expression "1 < *piVar8 - 0x17U" number_literal < (binary_expression "*piVar8 - 0x17U" (pointer_expression "*piVar8" * identifier) - number_literal)) )) (compound_statement "{\n      if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }\n      if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }\n      if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }\n      Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n      return uVar9;\n    }" { (if_statement "if ((*piVar8 == 2) && (-1 < (int)__file)) {\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }" if (parenthesized_expression "((*piVar8 == 2) && (-1 < (int)__file))" ( (binary_expression "(*piVar8 == 2) && (-1 < (int)__file)" (parenthesized_expression "(*piVar8 == 2)" ( (binary_expression "*piVar8 == 2" (pointer_expression "*piVar8" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < (int)__file)" ( (binary_expression "-1 < (int)__file" number_literal < (cast_expression "(int)__file" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        pLVar2 = this->lock_;\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);\n        pcVar10 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */\n        gold_error(pcVar10,__oflag);\n        pLVar5 = pLVar2->lock_;\n        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);\n        *piVar8 = 2;\n      }" { (expression_statement "pLVar2 = this->lock_;" (assignment_expression "pLVar2 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (expression_statement "pLVar5 = pLVar2->lock_;" (assignment_expression "pLVar5 = pLVar2->lock_" identifier = (field_expression "pLVar2->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar5->_vptr_Lock_impl[2])(pLVar5);" (call_expression "(*pLVar5->_vptr_Lock_impl[2])(pLVar5)" (parenthesized_expression "(*pLVar5->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar5->_vptr_Lock_impl[2]" * (subscript_expression "pLVar5->_vptr_Lock_impl[2]" (field_expression "pLVar5->_vptr_Lock_impl" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar5)" ( identifier ))) ;) (expression_statement "pcVar10 = (char *)gettext("file %s was removed during the link");" (assignment_expression "pcVar10 = (char *)gettext("file %s was removed during the link")" identifier = (cast_expression "(char *)gettext("file %s was removed during the link")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("file %s was removed during the link")" identifier (argument_list "("file %s was removed during the link")" ( (string_literal ""file %s was removed during the link"" " string_content ") ))))) ;) comment (expression_statement "gold_error(pcVar10,__oflag);" (call_expression "gold_error(pcVar10,__oflag)" identifier (argument_list "(pcVar10,__oflag)" ( identifier , identifier ))) ;) (expression_statement "pLVar5 = pLVar2->lock_;" (assignment_expression "pLVar5 = pLVar2->lock_" identifier = (field_expression "pLVar2->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar5->_vptr_Lock_impl[3])(pLVar5);" (call_expression "(*pLVar5->_vptr_Lock_impl[3])(pLVar5)" (parenthesized_expression "(*pLVar5->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar5->_vptr_Lock_impl[3]" * (subscript_expression "pLVar5->_vptr_Lock_impl[3]" (field_expression "pLVar5->_vptr_Lock_impl" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar5)" ( identifier ))) ;) (expression_statement "*piVar8 = 2;" (assignment_expression "*piVar8 = 2" (pointer_expression "*piVar8" * identifier) = number_literal) ;) })) (if_statement "if (parameters->options_ == (General_options *)0x0) {\n        return uVar9;\n      }" if (parenthesized_expression "(parameters->options_ == (General_options *)0x0)" ( (binary_expression "parameters->options_ == (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return uVar9;\n      }" { (return_statement "return uVar9;" return identifier ;) })) (if_statement "if ((parameters->debug_ & 4) == 0) {\n        return uVar9;\n      }" if (parenthesized_expression "((parameters->debug_ & 4) == 0)" ( (binary_expression "(parameters->debug_ & 4) == 0" (parenthesized_expression "(parameters->debug_ & 4)" ( (binary_expression "parameters->debug_ & 4" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n        return uVar9;\n      }" { (return_statement "return uVar9;" return identifier ;) })) (labeled_statement "Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);" (call_expression "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag)" identifier (argument_list "(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;)) (return_statement "return uVar9;" return identifier ;) })) (expression_statement "pLVar2 = this->lock_;" (assignment_expression "pLVar2 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }" if (parenthesized_expression "(pLVar2 != (Lock *)0x0)" ( (binary_expression "pLVar2 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n    }" { (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) })) (expression_statement "iVar7 = this->current_ + -0x10;" (assignment_expression "iVar7 = this->current_ + -0x10" identifier = (binary_expression "this->current_ + -0x10" (field_expression "this->current_" identifier -> field_identifier) + number_literal)) ;) (if_statement "if (iVar7 < 8) {\n      iVar7 = 8;\n    }" if (parenthesized_expression "(iVar7 < 8)" ( (binary_expression "iVar7 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar7 = 8;\n    }" { (expression_statement "iVar7 = 8;" (assignment_expression "iVar7 = 8" identifier = number_literal) ;) })) (expression_statement "this->limit_ = iVar7;" (assignment_expression "this->limit_ = iVar7" (field_expression "this->limit_" identifier -> field_identifier) = identifier) ;) comment (expression_statement "bVar6 = close_some_descriptor(this);" (assignment_expression "bVar6 = close_some_descriptor(this)" identifier = (call_expression "close_some_descriptor(this)" identifier (argument_list "(this)" ( identifier )))) ;) (if_statement "if (!bVar6) {\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }" if (parenthesized_expression "(!bVar6)" ( (unary_expression "!bVar6" ! identifier) )) (compound_statement "{\n      pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */\n      gold_fatal(pcVar10);\n    }" { (expression_statement "pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "pcVar10 = (char *)gettext("out of file descriptors and couldn\'t close any")" identifier = (cast_expression "(char *)gettext("out of file descriptors and couldn\'t close any")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("out of file descriptors and couldn\'t close any")" identifier (argument_list "("out of file descriptors and couldn\'t close any")" ( (string_literal ""out of file descriptors and couldn\'t close any"" " string_content escape_sequence string_content ") ))))) ;) comment comment (expression_statement "gold_fatal(pcVar10);" (call_expression "gold_fatal(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;) })) (expression_statement "in_stack_00000010 = uVar12;" (assignment_expression "in_stack_00000010 = uVar12" identifier = identifier) ;) (if_statement "if (pLVar2 != (Lock *)0x0) {\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }" if (parenthesized_expression "(pLVar2 != (Lock *)0x0)" ( (binary_expression "pLVar2 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);\n    }" { (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) })) })) (expression_statement "pLVar2 = this->lock_;" (assignment_expression "pLVar2 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (pLVar2 != (Lock *)0x0) {\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n  }" if (parenthesized_expression "(pLVar2 != (Lock *)0x0)" ( (binary_expression "pLVar2 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);\n  }" { (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) })) (ERROR "pOVar3 = (this->open_descriptors_).\n           super__Vector_base<gold::" (assignment_expression "pOVar3 = (this->open_descriptors_).\n           super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n           super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n           super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n           ._M_impl._M_finish;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n           ._M_impl._M_finish;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n           ._M_impl._M_finish;" (field_expression "Open_descriptor>_>\n           ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n           ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (ERROR "pOVar11 = (this->open_descriptors_).\n            super__Vector_base<gold::" (assignment_expression "pOVar11 = (this->open_descriptors_).\n            super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n            super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n            super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n            ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n            ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n            ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n            ._M_impl._M_start" (field_expression "Open_descriptor>_>\n            ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (expression_statement "iVar7 = (int)pOVar3 - (int)pOVar11 >> 2;" (assignment_expression "iVar7 = (int)pOVar3 - (int)pOVar11 >> 2" identifier = (binary_expression "(int)pOVar3 - (int)pOVar11 >> 2" (binary_expression "(int)pOVar3 - (int)pOVar11" (cast_expression "(int)pOVar3" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pOVar11" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar12 = iVar7 * -0x55555555;" (assignment_expression "uVar12 = iVar7 * -0x55555555" identifier = (binary_expression "iVar7 * -0x55555555" identifier * number_literal)) ;) (if_statement "if (uVar12 <= uVar9) {\n    uVar1 = uVar9 + 0x40;\n    if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }\n  }" if (parenthesized_expression "(uVar12 <= uVar9)" ( (binary_expression "uVar12 <= uVar9" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar9 + 0x40;\n    if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }\n  }" { (expression_statement "uVar1 = uVar9 + 0x40;" (assignment_expression "uVar1 = uVar9 + 0x40" identifier = (binary_expression "uVar9 + 0x40" identifier + number_literal)) ;) (if_statement "if (uVar12 < uVar1) {\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }\n    else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }" if (parenthesized_expression "(uVar12 < uVar1)" ( (binary_expression "uVar12 < uVar1" identifier < identifier) )) (compound_statement "{\n                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */\n      std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);\n      pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n    }" { comment (labeled_statement "std::\n      vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);" statement_identifier (ERROR "::\n      vector<gold:" : : (binary_expression "vector<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n      ::_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);" statement_identifier (ERROR "::Open_descriptor>_>\n      :" : : (binary_expression "Open_descriptor>_" identifier > identifier) > :) : (expression_statement "_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555);" (call_expression "_M_default_append(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555)" identifier (argument_list "(&this->open_descriptors_,uVar1 + iVar7 * 0x55555555)" ( (pointer_expression "&this->open_descriptors_" & (field_expression "this->open_descriptors_" identifier -> field_identifier)) , (binary_expression "uVar1 + iVar7 * 0x55555555" identifier + (binary_expression "iVar7 * 0x55555555" identifier * number_literal)) ))) ;)))) (ERROR "pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold::" (assignment_expression "pOVar11 = (this->open_descriptors_).\n                super__Vector_base<gold" identifier = (binary_expression "(this->open_descriptors_).\n                super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n                super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n                ._M_impl._M_start;" (field_expression "Open_descriptor>_>\n                ._M_impl._M_start" (field_expression "Open_descriptor>_>\n                ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) }) (else_clause "else if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }" else (if_statement "if ((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)) {\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }" if (parenthesized_expression "((uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1))" ( (binary_expression "(uVar1 < uVar12) && (pOVar3 != pOVar11 + uVar1)" (parenthesized_expression "(uVar1 < uVar12)" ( (binary_expression "uVar1 < uVar12" identifier < identifier) )) && (parenthesized_expression "(pOVar3 != pOVar11 + uVar1)" ( (binary_expression "pOVar3 != pOVar11 + uVar1" identifier != (binary_expression "pOVar11 + uVar1" identifier + identifier)) ))) )) (compound_statement "{\n      (this->open_descriptors_).\n      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;\n    }" { (ERROR "(this->open_descriptors_).\n      super__Vector_base<gold::" (binary_expression "(this->open_descriptors_).\n      super__Vector_base<gold" (field_expression "(this->open_descriptors_).\n      super__Vector_base" (parenthesized_expression "(this->open_descriptors_)" ( (field_expression "this->open_descriptors_" identifier -> field_identifier) )) . field_identifier) < identifier) : :) (labeled_statement "Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;" statement_identifier (ERROR "::Open_descriptor,_std::allocator<gold:" : : (comma_expression "Open_descriptor,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Descriptors::Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1;" (assignment_expression "Open_descriptor>_>\n      ._M_impl._M_finish = pOVar11 + uVar1" (field_expression "Open_descriptor>_>\n      ._M_impl._M_finish" (field_expression "Open_descriptor>_>\n      ._M_impl" (binary_expression "Open_descriptor>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (binary_expression "pOVar11 + uVar1" identifier + identifier)) ;))) })))) })) (expression_statement "pOVar11 = pOVar11 + uVar9;" (assignment_expression "pOVar11 = pOVar11 + uVar9" identifier = (binary_expression "pOVar11 + uVar9" identifier + identifier)) ;) (expression_statement "pOVar11->name = (char *)__oflag;" (assignment_expression "pOVar11->name = (char *)__oflag" (field_expression "pOVar11->name" identifier -> field_identifier) = (cast_expression "(char *)__oflag" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pOVar11->is_write = (in_stack_00000010 & 3) != 0;" (assignment_expression "pOVar11->is_write = (in_stack_00000010 & 3) != 0" (field_expression "pOVar11->is_write" identifier -> field_identifier) = (binary_expression "(in_stack_00000010 & 3) != 0" (parenthesized_expression "(in_stack_00000010 & 3)" ( (binary_expression "in_stack_00000010 & 3" identifier & number_literal) )) != number_literal)) ;) (expression_statement "pOVar11->stack_next = -1;" (assignment_expression "pOVar11->stack_next = -1" (field_expression "pOVar11->stack_next" identifier -> field_identifier) = number_literal) ;) (expression_statement "pOVar11->inuse = true;" (assignment_expression "pOVar11->inuse = true" (field_expression "pOVar11->inuse" identifier -> field_identifier) = true) ;) (expression_statement "pOVar11->is_on_stack = false;" (assignment_expression "pOVar11->is_on_stack = false" (field_expression "pOVar11->is_on_stack" identifier -> field_identifier) = false) ;) (expression_statement "iVar7 = this->current_ + 1;" (assignment_expression "iVar7 = this->current_ + 1" identifier = (binary_expression "this->current_ + 1" (field_expression "this->current_" identifier -> field_identifier) + number_literal)) ;) (expression_statement "this->current_ = iVar7;" (assignment_expression "this->current_ = iVar7" (field_expression "this->current_" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar7 < this->limit_) {\n    pGVar4 = parameters->options_;\n  }\n  else {\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }" if (parenthesized_expression "(iVar7 < this->limit_)" ( (binary_expression "iVar7 < this->limit_" identifier < (field_expression "this->limit_" identifier -> field_identifier)) )) (compound_statement "{\n    pGVar4 = parameters->options_;\n  }" { (expression_statement "pGVar4 = parameters->options_;" (assignment_expression "pGVar4 = parameters->options_" identifier = (field_expression "parameters->options_" identifier -> field_identifier)) ;) }) (else_clause "else {\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }" else (compound_statement "{\n    close_some_descriptor(this);\n    pGVar4 = parameters->options_;\n  }" { (expression_statement "close_some_descriptor(this);" (call_expression "close_some_descriptor(this)" identifier (argument_list "(this)" ( identifier ))) ;) (expression_statement "pGVar4 = parameters->options_;" (assignment_expression "pGVar4 = parameters->options_" identifier = (field_expression "parameters->options_" identifier -> field_identifier)) ;) }))) (if_statement "if ((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n  }" if (parenthesized_expression "((pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0))" ( (binary_expression "(pGVar4 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)" (parenthesized_expression "(pGVar4 != (General_options *)0x0)" ( (binary_expression "pGVar4 != (General_options *)0x0" identifier != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((parameters->debug_ & 4) != 0)" ( (binary_expression "(parameters->debug_ & 4) != 0" (parenthesized_expression "(parameters->debug_ & 4)" ( (binary_expression "parameters->debug_ & 4" (field_expression "parameters->debug_" identifier -> field_identifier) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */\n    Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);\n  }" { comment (labeled_statement "Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag);" (call_expression "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag)" identifier (argument_list "(parameters->errors_,"Opened new descriptor %d for \"%s\"",uVar9,__oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;)) })) (if_statement "if (pLVar2 == (Lock *)0x0) {\n    return uVar9;\n  }" if (parenthesized_expression "(pLVar2 == (Lock *)0x0)" ( (binary_expression "pLVar2 == (Lock *)0x0" identifier == (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return uVar9;\n  }" { (return_statement "return uVar9;" return identifier ;) })) (expression_statement "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_);" (call_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])(pLVar2->lock_)" (parenthesized_expression "(*pLVar2->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar2->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar2->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar2->lock_->_vptr_Lock_impl" (field_expression "pLVar2->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(pLVar2->lock_)" ( (field_expression "pLVar2->lock_" identifier -> field_identifier) ))) ;) (return_statement "return uVar9;" return identifier ;) })))
(translation_unit "uint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}\n\n" (function_definition "uint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" type_identifier (function_declarator "FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" identifier (parameter_list "(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "undefined4 extraout_ECX;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (expression_statement "cVar5 = FUN_000622e0(param_1 + 1);" (assignment_expression "cVar5 = FUN_000622e0(param_1 + 1)" identifier = (call_expression "FUN_000622e0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) ;) (if_statement "if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" if (parenthesized_expression "((cVar5 != '\x01') && (-1 < (int)param_2))" ( (binary_expression "(cVar5 != '\x01') && (-1 < (int)param_2)" (parenthesized_expression "(cVar5 != '\x01')" ( (binary_expression "cVar5 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) && (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" { (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" identifier (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , identifier ))) ;) })) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }" if (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" ( (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    param_1[0xb] = 8;\n  }" { (expression_statement "param_1[0xb] = 8;" (assignment_expression "param_1[0xb] = 8" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = number_literal) ;) })) (if_statement "if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" if (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" { (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (if_statement "if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" if (parenthesized_expression "((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2)" ( (binary_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2" (call_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((param_1[7] - param_1[6] >> 2) * -0x55555555)" ( (binary_expression "(param_1[7] - param_1[6] >> 2) * -0x55555555" (parenthesized_expression "(param_1[7] - param_1[6] >> 2)" ( (binary_expression "param_1[7] - param_1[6] >> 2" (binary_expression "param_1[7] - param_1[6]" (subscript_expression "param_1[7]" identifier [ number_literal ]) - (subscript_expression "param_1[6]" identifier [ number_literal ])) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" { (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" identifier (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , identifier ))) ;) })) (expression_statement "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc)" identifier = (cast_expression "(undefined4 *)(param_1[6] + param_2 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[6] + param_2 * 0xc)" ( (binary_expression "param_1[6] + param_2 * 0xc" (subscript_expression "param_1[6]" identifier [ number_literal ]) + (binary_expression "param_2 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "__s1 = (char *)*puVar2;" (assignment_expression "__s1 = (char *)*puVar2" identifier = (cast_expression "(char *)*puVar2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ;) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" if (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))" ( (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" (parenthesized_expression "(__s1 == param_3)" ( (binary_expression "__s1 == param_3" identifier == identifier) )) || (parenthesized_expression "((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" ( (parenthesized_expression "(__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))" ( (binary_expression "__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)" (binary_expression "__s1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar6 = strcmp(__s1,param_3), iVar6 == 0)" ( (comma_expression "iVar6 = strcmp(__s1,param_3), iVar6 == 0" (assignment_expression "iVar6 = strcmp(__s1,param_3)" identifier = (call_expression "strcmp(__s1,param_3)" identifier (argument_list "(__s1,param_3)" ( identifier , identifier )))) , (binary_expression "iVar6 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" { (if_statement "if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" if (parenthesized_expression "(*(char *)(puVar2 + 2) != '\0')" ( (binary_expression "*(char *)(puVar2 + 2) != '\0'" (pointer_expression "*(char *)(puVar2 + 2)" * (cast_expression "(char *)(puVar2 + 2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" { (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" identifier (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00234e8c" & identifier) , (pointer_expression "&__DT_PLTGOT" & identifier) ))) ;) })) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" * (cast_expression "(undefined1 *)(puVar2 + 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" if (parenthesized_expression "(param_1[9] == param_2)" ( (binary_expression "param_1[9] == param_2" (subscript_expression "param_1[9]" identifier [ number_literal ]) == identifier) )) (compound_statement "{\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" { (expression_statement "param_1[9] = puVar2[1];" (assignment_expression "param_1[9] = puVar2[1]" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (subscript_expression "puVar2[1]" identifier [ number_literal ])) ;) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" * (cast_expression "(undefined1 *)((int)puVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 10)" ( (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) })) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" if (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" ( (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" { (expression_statement "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" identifier (argument_list "(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (while_statement "while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" { (expression_statement "uVar11 = param_4 | 0x80000;" (assignment_expression "uVar11 = param_4 | 0x80000" identifier = (binary_expression "param_4 | 0x80000" identifier | number_literal)) ;) (expression_statement "uVar8 = open64(param_3,uVar11,param_5);" (assignment_expression "uVar8 = open64(param_3,uVar11,param_5)" identifier = (call_expression "open64(param_3,uVar11,param_5)" identifier (argument_list "(param_3,uVar11,param_5)" ( identifier , identifier , identifier )))) ;) (if_statement "if (-1 < (int)uVar8) break;" if (parenthesized_expression "(-1 < (int)uVar8)" ( (binary_expression "-1 < (int)uVar8" number_literal < (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" if (parenthesized_expression "(1 < *piVar7 - 0x17U)" ( (binary_expression "1 < *piVar7 - 0x17U" number_literal < (binary_expression "*piVar7 - 0x17U" (pointer_expression "*piVar7" * identifier) - number_literal)) )) (compound_statement "{\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" { (if_statement "if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" if (parenthesized_expression "((*piVar7 == 2) && (-1 < (int)param_2))" ( (binary_expression "(*piVar7 == 2) && (-1 < (int)param_2)" (parenthesized_expression "(*piVar7 == 2)" ( (binary_expression "*piVar7 == 2" (pointer_expression "*piVar7" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < (int)param_2)" ( (binary_expression "-1 < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" { (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" identifier = (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "(**(code **)(*piVar4 + 8))(piVar4);" (call_expression "(**(code **)(*piVar4 + 8))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 8))" ( (pointer_expression "**(code **)(*piVar4 + 8)" * (pointer_expression "*(code **)(*piVar4 + 8)" * (cast_expression "(code **)(*piVar4 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 8)" ( (binary_expression "*piVar4 + 8" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "(piVar4)" ( identifier ))) ;) (expression_statement "uVar10 = gettext("file %s was removed during the link");" (assignment_expression "uVar10 = gettext("file %s was removed during the link")" identifier = (call_expression "gettext("file %s was removed during the link")" identifier (argument_list "("file %s was removed during the link")" ( (string_literal ""file %s was removed during the link"" " string_content ") )))) ;) (expression_statement "FUN_0005ad00(uVar10,param_3);" (call_expression "FUN_0005ad00(uVar10,param_3)" identifier (argument_list "(uVar10,param_3)" ( identifier , identifier ))) ;) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" identifier = (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "(**(code **)(*piVar4 + 0xc))(piVar4);" (call_expression "(**(code **)(*piVar4 + 0xc))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 0xc))" ( (pointer_expression "**(code **)(*piVar4 + 0xc)" * (pointer_expression "*(code **)(*piVar4 + 0xc)" * (cast_expression "(code **)(*piVar4 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar4 + 0xc)" ( (binary_expression "*piVar4 + 0xc" (pointer_expression "*piVar4" * identifier) + number_literal) ))))) )) (argument_list "(piVar4)" ( identifier ))) ;) (expression_statement "*piVar7 = 2;" (assignment_expression "*piVar7 = 2" (pointer_expression "*piVar7" * identifier) = number_literal) ;) })) (if_statement "if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }" if (parenthesized_expression "(DAT_00302378[2] == 0)" ( (binary_expression "DAT_00302378[2] == 0" (subscript_expression "DAT_00302378[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n        return uVar8;\n      }" { (return_statement "return uVar8;" return identifier ;) })) (if_statement "if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }" if (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) == 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) == 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n        return uVar8;\n      }" { (return_statement "return uVar8;" return identifier ;) })) (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" identifier (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (return_statement "return uVar8;" return identifier ;) })) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (expression_statement "iVar6 = param_1[10] + -0x10;" (assignment_expression "iVar6 = param_1[10] + -0x10" identifier = (binary_expression "param_1[10] + -0x10" (subscript_expression "param_1[10]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (iVar6 < 8) {\n      iVar6 = 8;\n    }" if (parenthesized_expression "(iVar6 < 8)" ( (binary_expression "iVar6 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar6 = 8;\n    }" { (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" identifier = number_literal) ;) })) (expression_statement "param_1[0xb] = iVar6;" (assignment_expression "param_1[0xb] = iVar6" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "cVar5 = FUN_00143670(param_1);" (assignment_expression "cVar5 = FUN_00143670(param_1)" identifier = (call_expression "FUN_00143670(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }" { (expression_statement "uVar10 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar10 = gettext("out of file descriptors and couldn\'t close any")" identifier = (call_expression "gettext("out of file descriptors and couldn\'t close any")" identifier (argument_list "("out of file descriptors and couldn\'t close any")" ( (string_literal ""out of file descriptors and couldn\'t close any"" " string_content escape_sequence string_content ") )))) ;) (expression_statement "FUN_0005aca0(uVar10);" (call_expression "FUN_0005aca0(uVar10)" identifier (argument_list "(uVar10)" ( identifier ))) ;) })) (expression_statement "param_4 = uVar11;" (assignment_expression "param_4 = uVar11" identifier = identifier) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) })) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" identifier = (cast_expression "(undefined4 *)*param_1" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" { (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" * (cast_expression "(code **)(*(int *)*puVar3 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 8)" ( (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) })) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = param_1[7] - iVar6 >> 2;" (assignment_expression "iVar9 = param_1[7] - iVar6 >> 2" identifier = (binary_expression "param_1[7] - iVar6 >> 2" (binary_expression "param_1[7] - iVar6" (subscript_expression "param_1[7]" identifier [ number_literal ]) - identifier) >> number_literal)) ;) (expression_statement "uVar11 = iVar9 * -0x55555555;" (assignment_expression "uVar11 = iVar9 * -0x55555555" identifier = (binary_expression "iVar9 * -0x55555555" identifier * number_literal)) ;) (if_statement "if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" if (parenthesized_expression "(uVar11 <= uVar8)" ( (binary_expression "uVar11 <= uVar8" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" { (expression_statement "uVar1 = uVar8 + 0x40;" (assignment_expression "uVar1 = uVar8 + 0x40" identifier = (binary_expression "uVar8 + 0x40" identifier + number_literal)) ;) (if_statement "if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" if (parenthesized_expression "(uVar11 < uVar1)" ( (binary_expression "uVar11 < uVar1" identifier < identifier) )) (compound_statement "{\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }" { (expression_statement "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);" (call_expression "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555)" identifier (argument_list "(param_1 + 6,uVar1 + iVar9 * 0x55555555)" ( (binary_expression "param_1 + 6" identifier + number_literal) , (binary_expression "uVar1 + iVar9 * 0x55555555" identifier + (binary_expression "iVar9 * 0x55555555" identifier * number_literal)) ))) ;) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) }) (else_clause "else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" else (if_statement "if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" if (parenthesized_expression "((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9))" ( (binary_expression "(uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" (parenthesized_expression "(uVar1 < uVar11)" ( (binary_expression "uVar1 < uVar11" identifier < identifier) )) && (parenthesized_expression "(iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" ( (comma_expression "iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9" (assignment_expression "iVar9 = iVar6 + uVar1 * 0xc" identifier = (binary_expression "iVar6 + uVar1 * 0xc" identifier + (binary_expression "uVar1 * 0xc" identifier * number_literal))) , (binary_expression "param_1[7] != iVar9" (subscript_expression "param_1[7]" identifier [ number_literal ]) != identifier)) ))) )) (compound_statement "{\n      param_1[7] = iVar9;\n    }" { (expression_statement "param_1[7] = iVar9;" (assignment_expression "param_1[7] = iVar9" (subscript_expression "param_1[7]" identifier [ number_literal ]) = identifier) ;) })))) })) (expression_statement "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc)" identifier = (cast_expression "(undefined4 *)(iVar6 + uVar8 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + uVar8 * 0xc)" ( (binary_expression "iVar6 + uVar8 * 0xc" identifier + (binary_expression "uVar8 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "*puVar2 = param_3;" (assignment_expression "*puVar2 = param_3" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((int)puVar2 + 9)" * (cast_expression "(bool *)((int)puVar2 + 9)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 9)" ( (binary_expression "(int)puVar2 + 9" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "(param_4 & 3) != 0" (parenthesized_expression "(param_4 & 3)" ( (binary_expression "param_4 & 3" identifier & number_literal) )) != number_literal)) ;) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" * (cast_expression "(undefined1 *)(puVar2 + 2)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 2)" ( (binary_expression "puVar2 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" * (cast_expression "(undefined1 *)((int)puVar2 + 10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar2 + 10)" ( (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar6 = param_1[10];" (assignment_expression "iVar6 = param_1[10]" identifier = (subscript_expression "param_1[10]" identifier [ number_literal ])) ;) (expression_statement "param_1[10] = iVar6 + 1;" (assignment_expression "param_1[10] = iVar6 + 1" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" if (parenthesized_expression "(iVar6 + 1 < param_1[0xb])" ( (binary_expression "iVar6 + 1 < param_1[0xb]" (binary_expression "iVar6 + 1" identifier + number_literal) < (subscript_expression "param_1[0xb]" identifier [ number_literal ])) )) (compound_statement "{\n    iVar6 = DAT_00302378[2];\n  }" { (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" identifier = (subscript_expression "DAT_00302378[2]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" else (compound_statement "{\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" { (expression_statement "FUN_00143670(param_1);" (call_expression "FUN_00143670(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" identifier = (subscript_expression "DAT_00302378[2]" identifier [ number_literal ])) ;) }))) (if_statement "if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" if (parenthesized_expression "((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" ( (binary_expression "(iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" ( (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" ( (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" * (cast_expression "(byte *)(DAT_00302378 + 5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00302378 + 5)" ( (binary_expression "DAT_00302378 + 5" identifier + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" { (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" identifier (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" ( (pointer_expression "*DAT_00302378" * identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) })) (if_statement "if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }" if (parenthesized_expression "(puVar3 == (undefined4 *)0x0)" ( (binary_expression "puVar3 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return uVar8;\n  }" { (return_statement "return uVar8;" return identifier ;) })) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" ( (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" * (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" * (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar3 + 0xc)" ( (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" * (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar3)" ( (cast_expression "(int *)*puVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier)) ))) ;) (return_statement "return uVar8;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) && (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ])) >> LIT) )) * LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) , (binary_expression IDENT == LIT)) ))) )) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , (string_literal " string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression (pointer_expression * IDENT) - LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) && (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , (string_literal " string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT ))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + (binary_expression IDENT * LIT)) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) , (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })))) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , (string_literal " string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) (return_statement return IDENT ;) })))
(function_definition "uint FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" (type_identifier "uint") (function_declarator "FUN_00143980(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" (identifier "FUN_00143980") (parameter_list "(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "char *param_3" (primitive_type "char") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) () ")"))) (compound_statement "{\n  uint uVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  int *piVar4;\n  char cVar5;\n  int iVar6;\n  int *piVar7;\n  uint uVar8;\n  int iVar9;\n  undefined4 uVar10;\n  undefined4 extraout_ECX;\n  uint uVar11;\n  \n  cVar5 = FUN_000622e0(param_1 + 1);\n  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }\n  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }\n  if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }\n  while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }\n  puVar3 = (undefined4 *)*param_1;\n  if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }\n  iVar6 = param_1[6];\n  iVar9 = param_1[7] - iVar6 >> 2;\n  uVar11 = iVar9 * -0x55555555;\n  if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }\n  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);\n  *puVar2 = param_3;\n  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;\n  puVar2[1] = 0xffffffff;\n  *(undefined1 *)(puVar2 + 2) = 1;\n  *(undefined1 *)((int)puVar2 + 10) = 0;\n  iVar6 = param_1[10];\n  param_1[10] = iVar6 + 1;\n  if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }\n  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }\n  if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }\n  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  return uVar8;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "char *__s1;" (primitive_type "char") (pointer_declarator "*__s1" (* "*") (identifier "__s1")) (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "char cVar5;" (primitive_type "char") (identifier "cVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "undefined4 uVar10;" (type_identifier "undefined4") (identifier "uVar10") (; ";")) (declaration "undefined4 extraout_ECX;" (type_identifier "undefined4") (identifier "extraout_ECX") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (expression_statement "cVar5 = FUN_000622e0(param_1 + 1);" (assignment_expression "cVar5 = FUN_000622e0(param_1 + 1)" (identifier "cVar5") (= "=") (call_expression "FUN_000622e0(param_1 + 1)" (identifier "FUN_000622e0") (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if ((cVar5 != '\x01') && (-1 < (int)param_2)) {\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" (if "if") (parenthesized_expression "((cVar5 != '\x01') && (-1 < (int)param_2))" (( "(") (binary_expression "(cVar5 != '\x01') && (-1 < (int)param_2)" (parenthesized_expression "(cVar5 != '\x01')" (( "(") (binary_expression "cVar5 != '\x01'" (identifier "cVar5") (!= "!=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(-1 < (int)param_2)" (( "(") (binary_expression "-1 < (int)param_2" (number_literal "-1") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);\n  }" ({ "{") (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" (identifier "FUN_0005f0b0") (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x53") (, ",") (pointer_expression "&DAT_00234e8c" (& "&") (identifier "DAT_00234e8c")) (, ",") (identifier "extraout_ECX") () ")"))) (; ";")) (} "}"))) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n    param_1[0xb] = 8;\n  }" (if "if") (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" (( "(") (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" (( "(") (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" (identifier "DAT_00302378") ([ "[") (number_literal "2") (] "]")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" (( "(") (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" (* "*") (cast_expression "(byte *)(DAT_00302378 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 5)" (( "(") (binary_expression "DAT_00302378 + 5" (identifier "DAT_00302378") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    param_1[0xb] = 8;\n  }" ({ "{") (expression_statement "param_1[0xb] = 8;" (assignment_expression "param_1[0xb] = 8" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (number_literal "8")) (; ";")) (} "}"))) (if_statement "if (-1 < (int)param_2) {\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" (if "if") (parenthesized_expression "(-1 < (int)param_2)" (( "(") (binary_expression "-1 < (int)param_2" (number_literal "-1") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")")) (compound_statement "{\n    puVar3 = (undefined4 *)*param_1;\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }\n    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);\n    __s1 = (char *)*puVar2;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }\n    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n  }" ({ "{") (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*param_1" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 8)" (( "(") (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (if_statement "if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" (if "if") (parenthesized_expression "((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2)" (( "(") (binary_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2" (call_expression "(uint)((param_1[7] - param_1[6] >> 2) * -0x55555555)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((param_1[7] - param_1[6] >> 2) * -0x55555555)" (( "(") (binary_expression "(param_1[7] - param_1[6] >> 2) * -0x55555555" (parenthesized_expression "(param_1[7] - param_1[6] >> 2)" (( "(") (binary_expression "param_1[7] - param_1[6] >> 2" (binary_expression "param_1[7] - param_1[6]" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (- "-") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "-0x55555555")) () ")"))) (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n                    \n                    \n      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);\n    }" ({ "{") (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" (identifier "FUN_0005f0b0") (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x5d") (, ",") (pointer_expression "&DAT_00234e8c" (& "&") (identifier "DAT_00234e8c")) (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}"))) (expression_statement "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc)" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)(param_1[6] + param_2 * 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[6] + param_2 * 0xc)" (( "(") (binary_expression "param_1[6] + param_2 * 0xc" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (+ "+") (binary_expression "param_2 * 0xc" (identifier "param_2") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "__s1 = (char *)*puVar2;" (assignment_expression "__s1 = (char *)*puVar2" (identifier "__s1") (= "=") (cast_expression "(char *)*puVar2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (; ";")) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))\n    {\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" (if "if") (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))" (( "(") (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" (parenthesized_expression "(__s1 == param_3)" (( "(") (binary_expression "__s1 == param_3" (identifier "__s1") (== "==") (identifier "param_3")) () ")")) (|| "||") (parenthesized_expression "((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)))" (( "(") (parenthesized_expression "(__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))" (( "(") (binary_expression "__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0)" (binary_expression "__s1 != (char *)0x0" (identifier "__s1") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (&& "&&") (parenthesized_expression "(iVar6 = strcmp(__s1,param_3), iVar6 == 0)" (( "(") (comma_expression "iVar6 = strcmp(__s1,param_3), iVar6 == 0" (assignment_expression "iVar6 = strcmp(__s1,param_3)" (identifier "iVar6") (= "=") (call_expression "strcmp(__s1,param_3)" (identifier "strcmp") (argument_list "(__s1,param_3)" (( "(") (identifier "__s1") (, ",") (identifier "param_3") () ")")))) (, ",") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0"))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }\n      *(undefined1 *)(puVar2 + 2) = 1;\n      if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }\n      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n      return param_2;\n    }" ({ "{") (if_statement "if (*(char *)(puVar2 + 2) != '\0') {\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" (if "if") (parenthesized_expression "(*(char *)(puVar2 + 2) != '\0')" (( "(") (binary_expression "*(char *)(puVar2 + 2) != '\0'" (pointer_expression "*(char *)(puVar2 + 2)" (* "*") (cast_expression "(char *)(puVar2 + 2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 2)" (( "(") (binary_expression "puVar2 + 2" (identifier "puVar2") (+ "+") (number_literal "2")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                    \n                    \n        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);\n      }" ({ "{") (expression_statement "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);" (call_expression "FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" (identifier "FUN_0005f0b0") (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x62") (, ",") (pointer_expression "&DAT_00234e8c" (& "&") (identifier "DAT_00234e8c")) (, ",") (pointer_expression "&__DT_PLTGOT" (& "&") (identifier "__DT_PLTGOT")) () ")"))) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" (* "*") (cast_expression "(undefined1 *)(puVar2 + 2)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 2)" (( "(") (binary_expression "puVar2 + 2" (identifier "puVar2") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if (param_1[9] == param_2) {\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" (if "if") (parenthesized_expression "(param_1[9] == param_2)" (( "(") (binary_expression "param_1[9] == param_2" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n        param_1[9] = puVar2[1];\n        puVar2[1] = 0xffffffff;\n        *(undefined1 *)((int)puVar2 + 10) = 0;\n      }" ({ "{") (expression_statement "param_1[9] = puVar2[1];" (assignment_expression "param_1[9] = puVar2[1]" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (= "=") (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" (* "*") (cast_expression "(undefined1 *)((int)puVar2 + 10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar2 + 10)" (( "(") (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" (if "if") (parenthesized_expression "((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" (( "(") (binary_expression "(DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(DAT_00302378[2] != 0)" (( "(") (binary_expression "DAT_00302378[2] != 0" (subscript_expression "DAT_00302378[2]" (identifier "DAT_00302378") ([ "[") (number_literal "2") (] "]")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" (( "(") (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" (* "*") (cast_expression "(byte *)(DAT_00302378 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 5)" (( "(") (binary_expression "DAT_00302378 + 5" (identifier "DAT_00302378") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);\n        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n        return param_2;\n      }" ({ "{") (expression_statement "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" (identifier "FUN_0005ac40") (argument_list "(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3)" (( "(") (pointer_expression "*DAT_00302378" (* "*") (identifier "DAT_00302378")) (, ",") (string_literal ""Reused existing descriptor %d for \"%s\""" (" """) (string_content "Reused existing descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (" """)) (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 0xc)" (( "(") (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 0xc)" (( "(") (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 0xc)" (( "(") (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (} "}"))) (while_statement "while( true ) {\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    uVar11 = param_4 | 0x80000;\n    uVar8 = open64(param_3,uVar11,param_5);\n    if (-1 < (int)uVar8) break;\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }\n    puVar3 = (undefined4 *)*param_1;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }\n    iVar6 = param_1[10] + -0x10;\n    if (iVar6 < 8) {\n      iVar6 = 8;\n    }\n    param_1[0xb] = iVar6;\n                    \n    cVar5 = FUN_00143670(param_1);\n    if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }\n    param_4 = uVar11;\n    if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }\n  }" ({ "{") (expression_statement "uVar11 = param_4 | 0x80000;" (assignment_expression "uVar11 = param_4 | 0x80000" (identifier "uVar11") (= "=") (binary_expression "param_4 | 0x80000" (identifier "param_4") (| "|") (number_literal "0x80000"))) (; ";")) (expression_statement "uVar8 = open64(param_3,uVar11,param_5);" (assignment_expression "uVar8 = open64(param_3,uVar11,param_5)" (identifier "uVar8") (= "=") (call_expression "open64(param_3,uVar11,param_5)" (identifier "open64") (argument_list "(param_3,uVar11,param_5)" (( "(") (identifier "param_3") (, ",") (identifier "uVar11") (, ",") (identifier "param_5") () ")")))) (; ";")) (if_statement "if (-1 < (int)uVar8) break;" (if "if") (parenthesized_expression "(-1 < (int)uVar8)" (( "(") (binary_expression "-1 < (int)uVar8" (number_literal "-1") (< "<") (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" (identifier "piVar7") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (1 < *piVar7 - 0x17U) {\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" (if "if") (parenthesized_expression "(1 < *piVar7 - 0x17U)" (( "(") (binary_expression "1 < *piVar7 - 0x17U" (number_literal "1") (< "<") (binary_expression "*piVar7 - 0x17U" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (- "-") (number_literal "0x17U"))) () ")")) (compound_statement "{\n      if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }\n      if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }\n      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }\n      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n      return uVar8;\n    }" ({ "{") (if_statement "if ((*piVar7 == 2) && (-1 < (int)param_2)) {\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" (if "if") (parenthesized_expression "((*piVar7 == 2) && (-1 < (int)param_2))" (( "(") (binary_expression "(*piVar7 == 2) && (-1 < (int)param_2)" (parenthesized_expression "(*piVar7 == 2)" (( "(") (binary_expression "*piVar7 == 2" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (== "==") (number_literal "2")) () ")")) (&& "&&") (parenthesized_expression "(-1 < (int)param_2)" (( "(") (binary_expression "-1 < (int)param_2" (number_literal "-1") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")"))) () ")")) (compound_statement "{\n        puVar3 = (undefined4 *)*param_1;\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 8))(piVar4);\n        uVar10 = gettext("file %s was removed during the link");\n                    \n        FUN_0005ad00(uVar10,param_3);\n        piVar4 = (int *)*puVar3;\n        (**(code **)(*piVar4 + 0xc))(piVar4);\n        *piVar7 = 2;\n      }" ({ "{") (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*param_1" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" (identifier "piVar4") (= "=") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (expression_statement "(**(code **)(*piVar4 + 8))(piVar4);" (call_expression "(**(code **)(*piVar4 + 8))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 8))" (( "(") (pointer_expression "**(code **)(*piVar4 + 8)" (* "*") (pointer_expression "*(code **)(*piVar4 + 8)" (* "*") (cast_expression "(code **)(*piVar4 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar4 + 8)" (( "(") (binary_expression "*piVar4 + 8" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "(piVar4)" (( "(") (identifier "piVar4") () ")"))) (; ";")) (expression_statement "uVar10 = gettext("file %s was removed during the link");" (assignment_expression "uVar10 = gettext("file %s was removed during the link")" (identifier "uVar10") (= "=") (call_expression "gettext("file %s was removed during the link")" (identifier "gettext") (argument_list "("file %s was removed during the link")" (( "(") (string_literal ""file %s was removed during the link"" (" """) (string_content "file %s was removed during the link") (" """)) () ")")))) (; ";")) (expression_statement "FUN_0005ad00(uVar10,param_3);" (call_expression "FUN_0005ad00(uVar10,param_3)" (identifier "FUN_0005ad00") (argument_list "(uVar10,param_3)" (( "(") (identifier "uVar10") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "piVar4 = (int *)*puVar3;" (assignment_expression "piVar4 = (int *)*puVar3" (identifier "piVar4") (= "=") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (expression_statement "(**(code **)(*piVar4 + 0xc))(piVar4);" (call_expression "(**(code **)(*piVar4 + 0xc))(piVar4)" (parenthesized_expression "(**(code **)(*piVar4 + 0xc))" (( "(") (pointer_expression "**(code **)(*piVar4 + 0xc)" (* "*") (pointer_expression "*(code **)(*piVar4 + 0xc)" (* "*") (cast_expression "(code **)(*piVar4 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar4 + 0xc)" (( "(") (binary_expression "*piVar4 + 0xc" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(piVar4)" (( "(") (identifier "piVar4") () ")"))) (; ";")) (expression_statement "*piVar7 = 2;" (assignment_expression "*piVar7 = 2" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (= "=") (number_literal "2")) (; ";")) (} "}"))) (if_statement "if (DAT_00302378[2] == 0) {\n        return uVar8;\n      }" (if "if") (parenthesized_expression "(DAT_00302378[2] == 0)" (( "(") (binary_expression "DAT_00302378[2] == 0" (subscript_expression "DAT_00302378[2]" (identifier "DAT_00302378") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return uVar8;\n      }" ({ "{") (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (if_statement "if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {\n        return uVar8;\n      }" (if "if") (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) == 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" (( "(") (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" (* "*") (cast_expression "(byte *)(DAT_00302378 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 5)" (( "(") (binary_expression "DAT_00302378 + 5" (identifier "DAT_00302378") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return uVar8;\n      }" ({ "{") (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" (identifier "FUN_0005ac40") (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" (( "(") (pointer_expression "*DAT_00302378" (* "*") (identifier "DAT_00302378")) (, ",") (string_literal ""Opened new descriptor %d for \"%s\""" (" """) (string_content "Opened new descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (" """)) (, ",") (identifier "uVar8") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*param_1" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n    }" ({ "{") (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 8)" (( "(") (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar6 = param_1[10] + -0x10;" (assignment_expression "iVar6 = param_1[10] + -0x10" (identifier "iVar6") (= "=") (binary_expression "param_1[10] + -0x10" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (+ "+") (number_literal "-0x10"))) (; ";")) (if_statement "if (iVar6 < 8) {\n      iVar6 = 8;\n    }" (if "if") (parenthesized_expression "(iVar6 < 8)" (( "(") (binary_expression "iVar6 < 8" (identifier "iVar6") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n      iVar6 = 8;\n    }" ({ "{") (expression_statement "iVar6 = 8;" (assignment_expression "iVar6 = 8" (identifier "iVar6") (= "=") (number_literal "8")) (; ";")) (} "}"))) (expression_statement "param_1[0xb] = iVar6;" (assignment_expression "param_1[0xb] = iVar6" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "iVar6")) (; ";")) (expression_statement "cVar5 = FUN_00143670(param_1);" (assignment_expression "cVar5 = FUN_00143670(param_1)" (identifier "cVar5") (= "=") (call_expression "FUN_00143670(param_1)" (identifier "FUN_00143670") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (cVar5 == '\0') {\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }" (if "if") (parenthesized_expression "(cVar5 == '\0')" (( "(") (binary_expression "cVar5 == '\0'" (identifier "cVar5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar10 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_0005aca0(uVar10);\n    }" ({ "{") (expression_statement "uVar10 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar10 = gettext("out of file descriptors and couldn\'t close any")" (identifier "uVar10") (= "=") (call_expression "gettext("out of file descriptors and couldn\'t close any")" (identifier "gettext") (argument_list "("out of file descriptors and couldn\'t close any")" (( "(") (string_literal ""out of file descriptors and couldn\'t close any"" (" """) (string_content "out of file descriptors and couldn") (escape_sequence "\'") (string_content "t close any") (" """)) () ")")))) (; ";")) (expression_statement "FUN_0005aca0(uVar10);" (call_expression "FUN_0005aca0(uVar10)" (identifier "FUN_0005aca0") (argument_list "(uVar10)" (( "(") (identifier "uVar10") () ")"))) (; ";")) (} "}"))) (expression_statement "param_4 = uVar11;" (assignment_expression "param_4 = uVar11" (identifier "param_4") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);\n    }" ({ "{") (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 0xc)" (( "(") (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "puVar3 = (undefined4 *)*param_1;" (assignment_expression "puVar3 = (undefined4 *)*param_1" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*param_1" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);\n  }" ({ "{") (expression_statement "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 8))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 8)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 8)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 8)" (( "(") (binary_expression "*(int *)*puVar3 + 8" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" (identifier "iVar6") (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "iVar9 = param_1[7] - iVar6 >> 2;" (assignment_expression "iVar9 = param_1[7] - iVar6 >> 2" (identifier "iVar9") (= "=") (binary_expression "param_1[7] - iVar6 >> 2" (binary_expression "param_1[7] - iVar6" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (- "-") (identifier "iVar6")) (>> ">>") (number_literal "2"))) (; ";")) (expression_statement "uVar11 = iVar9 * -0x55555555;" (assignment_expression "uVar11 = iVar9 * -0x55555555" (identifier "uVar11") (= "=") (binary_expression "iVar9 * -0x55555555" (identifier "iVar9") (* "*") (number_literal "-0x55555555"))) (; ";")) (if_statement "if (uVar11 <= uVar8) {\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" (if "if") (parenthesized_expression "(uVar11 <= uVar8)" (( "(") (binary_expression "uVar11 <= uVar8" (identifier "uVar11") (<= "<=") (identifier "uVar8")) () ")")) (compound_statement "{\n    uVar1 = uVar8 + 0x40;\n    if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }\n  }" ({ "{") (expression_statement "uVar1 = uVar8 + 0x40;" (assignment_expression "uVar1 = uVar8 + 0x40" (identifier "uVar1") (= "=") (binary_expression "uVar8 + 0x40" (identifier "uVar8") (+ "+") (number_literal "0x40"))) (; ";")) (if_statement "if (uVar11 < uVar1) {\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }\n    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" (if "if") (parenthesized_expression "(uVar11 < uVar1)" (( "(") (binary_expression "uVar11 < uVar1" (identifier "uVar11") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n                    \n      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);\n      iVar6 = param_1[6];\n    }" ({ "{") (expression_statement "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);" (call_expression "FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555)" (identifier "FUN_00143e20") (argument_list "(param_1 + 6,uVar1 + iVar9 * 0x55555555)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) (, ",") (binary_expression "uVar1 + iVar9 * 0x55555555" (identifier "uVar1") (+ "+") (binary_expression "iVar9 * 0x55555555" (identifier "iVar9") (* "*") (number_literal "0x55555555"))) () ")"))) (; ";")) (expression_statement "iVar6 = param_1[6];" (assignment_expression "iVar6 = param_1[6]" (identifier "iVar6") (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (} "}")) (else_clause "else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" (else "else") (if_statement "if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {\n      param_1[7] = iVar9;\n    }" (if "if") (parenthesized_expression "((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9))" (( "(") (binary_expression "(uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" (parenthesized_expression "(uVar1 < uVar11)" (( "(") (binary_expression "uVar1 < uVar11" (identifier "uVar1") (< "<") (identifier "uVar11")) () ")")) (&& "&&") (parenthesized_expression "(iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)" (( "(") (comma_expression "iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9" (assignment_expression "iVar9 = iVar6 + uVar1 * 0xc" (identifier "iVar9") (= "=") (binary_expression "iVar6 + uVar1 * 0xc" (identifier "iVar6") (+ "+") (binary_expression "uVar1 * 0xc" (identifier "uVar1") (* "*") (number_literal "0xc")))) (, ",") (binary_expression "param_1[7] != iVar9" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (!= "!=") (identifier "iVar9"))) () ")"))) () ")")) (compound_statement "{\n      param_1[7] = iVar9;\n    }" ({ "{") (expression_statement "param_1[7] = iVar9;" (assignment_expression "param_1[7] = iVar9" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "iVar9")) (; ";")) (} "}"))))) (} "}"))) (expression_statement "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);" (assignment_expression "puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc)" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)(iVar6 + uVar8 * 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + uVar8 * 0xc)" (( "(") (binary_expression "iVar6 + uVar8 * 0xc" (identifier "iVar6") (+ "+") (binary_expression "uVar8 * 0xc" (identifier "uVar8") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "*puVar2 = param_3;" (assignment_expression "*puVar2 = param_3" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((int)puVar2 + 9)" (* "*") (cast_expression "(bool *)((int)puVar2 + 9)" (( "(") (type_descriptor "bool *" (primitive_type "bool") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar2 + 9)" (( "(") (binary_expression "(int)puVar2 + 9" (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2")) (+ "+") (number_literal "9")) () ")")))) (= "=") (binary_expression "(param_4 & 3) != 0" (parenthesized_expression "(param_4 & 3)" (( "(") (binary_expression "param_4 & 3" (identifier "param_4") (& "&") (number_literal "3")) () ")")) (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "puVar2[1] = 0xffffffff;" (assignment_expression "puVar2[1] = 0xffffffff" (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)(puVar2 + 2) = 1;" (assignment_expression "*(undefined1 *)(puVar2 + 2) = 1" (pointer_expression "*(undefined1 *)(puVar2 + 2)" (* "*") (cast_expression "(undefined1 *)(puVar2 + 2)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 2)" (( "(") (binary_expression "puVar2 + 2" (identifier "puVar2") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined1 *)((int)puVar2 + 10) = 0;" (assignment_expression "*(undefined1 *)((int)puVar2 + 10) = 0" (pointer_expression "*(undefined1 *)((int)puVar2 + 10)" (* "*") (cast_expression "(undefined1 *)((int)puVar2 + 10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar2 + 10)" (( "(") (binary_expression "(int)puVar2 + 10" (cast_expression "(int)puVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar2")) (+ "+") (number_literal "10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = param_1[10];" (assignment_expression "iVar6 = param_1[10]" (identifier "iVar6") (= "=") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]"))) (; ";")) (expression_statement "param_1[10] = iVar6 + 1;" (assignment_expression "param_1[10] = iVar6 + 1" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar6 + 1 < param_1[0xb]) {\n    iVar6 = DAT_00302378[2];\n  }\n  else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" (if "if") (parenthesized_expression "(iVar6 + 1 < param_1[0xb])" (( "(") (binary_expression "iVar6 + 1 < param_1[0xb]" (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1")) (< "<") (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]"))) () ")")) (compound_statement "{\n    iVar6 = DAT_00302378[2];\n  }" ({ "{") (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" (identifier "iVar6") (= "=") (subscript_expression "DAT_00302378[2]" (identifier "DAT_00302378") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" (else "else") (compound_statement "{\n    FUN_00143670(param_1);\n    iVar6 = DAT_00302378[2];\n  }" ({ "{") (expression_statement "FUN_00143670(param_1);" (call_expression "FUN_00143670(param_1)" (identifier "FUN_00143670") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "iVar6 = DAT_00302378[2];" (assignment_expression "iVar6 = DAT_00302378[2]" (identifier "iVar6") (= "=") (subscript_expression "DAT_00302378[2]" (identifier "DAT_00302378") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))) (if_statement "if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" (if "if") (parenthesized_expression "((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0))" (( "(") (binary_expression "(iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)(DAT_00302378 + 5) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(DAT_00302378 + 5) & 4) != 0" (parenthesized_expression "(*(byte *)(DAT_00302378 + 5) & 4)" (( "(") (binary_expression "*(byte *)(DAT_00302378 + 5) & 4" (pointer_expression "*(byte *)(DAT_00302378 + 5)" (* "*") (cast_expression "(byte *)(DAT_00302378 + 5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00302378 + 5)" (( "(") (binary_expression "DAT_00302378 + 5" (identifier "DAT_00302378") (+ "+") (number_literal "5")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);\n  }" ({ "{") (expression_statement "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);" (call_expression "FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" (identifier "FUN_0005ac40") (argument_list "(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3)" (( "(") (pointer_expression "*DAT_00302378" (* "*") (identifier "DAT_00302378")) (, ",") (string_literal ""Opened new descriptor %d for \"%s\""" (" """) (string_content "Opened new descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (" """)) (, ",") (identifier "uVar8") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (if_statement "if (puVar3 == (undefined4 *)0x0) {\n    return uVar8;\n  }" (if "if") (parenthesized_expression "(puVar3 == (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 == (undefined4 *)0x0" (identifier "puVar3") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return uVar8;\n  }" ({ "{") (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}"))) (expression_statement "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);" (call_expression "(**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3)" (parenthesized_expression "(**(code **)(*(int *)*puVar3 + 0xc))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar3 + 0xc)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar3 + 0xc)" (* "*") (cast_expression "(code **)(*(int *)*puVar3 + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar3 + 0xc)" (( "(") (binary_expression "*(int *)*puVar3 + 0xc" (pointer_expression "*(int *)*puVar3" (* "*") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "((int *)*puVar3)" (( "(") (cast_expression "(int *)*puVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) () ")"))) (; ";")) (return_statement "return uVar8;" (return "return") (identifier "uVar8") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: int open(Descriptors * this, int descriptor, char * name, int flags,
   int mode) */

int __thiscall gold::type_1::function_1(type_1 *this,char *var_5,int __oflag,...)

{
  type_2 var_21;
  type_3 *var_16;
  type_4 var_23;
  type_5 *var_24;
  type_6 *pLVar5;
  bool bVar6;
  int var_9;
  int *piVar8;
  type_2 var_20;
  char *var_7;
  type_4 var_6;
  type_2 var_19;
  type_2 var_11;
  type_7 in_stack_00000014;
  
  bVar6 = Initialize_lock::var_1(&this->initialize_lock_);
  if ((!bVar6) && (-1 < (int)var_5)) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/descriptors.cc",0x53,"open");
  }
  if ((parameters->options_ != (type_5 *)0x0) && ((parameters->debug_ & 4) != 0)) {
    this->limit_ = 8;
  }
  if (-1 < (int)var_5) {
    var_16 = this->lock_;
    (*var_16->lock_->_vptr_Lock_impl[2])(var_16->lock_);
    var_6 = (this->open_descriptors_).
              super__Vector_base<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
              ._M_impl._M_start;
    if ((char *)(((int)(this->open_descriptors_).
                       super__Vector_base<gold::type_1::var_3,_std::allocator<gold::type_1::var_3>var_4>
                       ._M_impl._M_finish - (int)var_6 >> 2) * -0x55555555) <= var_5) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */
      var_2("../../gold/descriptors.cc",0x5d,"open");
    }
    var_6 = var_6 + (int)var_5;
    var_7 = var_6->name;
    if ((var_7 == (char *)__oflag) ||
       ((var_7 != (char *)0x0 && (var_9 = var_8(var_7,(char *)__oflag), var_9 == 0)))) {
      if (var_6->inuse != false) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */
        var_2("../../gold/descriptors.cc",0x62,"open");
      }
      var_6->inuse = true;
      if ((char *)this->stack_top_ == var_5) {
        this->stack_top_ = var_6->stack_next;
        var_6->stack_next = -1;
        var_6->is_on_stack = false;
      }
      if ((parameters->options_ != (type_5 *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */
        Errors::var_10(parameters->errors_,"Reused existing descriptor %d for \"%s\"",var_5,__oflag)
        ;
        (*var_16->lock_->_vptr_Lock_impl[3])(var_16->lock_);
        return (int)var_5;
      }
      (*var_16->lock_->_vptr_Lock_impl[3])(var_16->lock_);
      return (int)var_5;
    }
    (*var_16->lock_->_vptr_Lock_impl[3])(var_16->lock_);
  }
  while( true ) {
    var_19 = var_11 | 0x80000;
    var_20 = var_12((char *)__oflag,var_19,in_stack_00000014);
    if (-1 < (int)var_20) break;
    piVar8 = var_13();
    if (1 < *piVar8 - 0x17U) {
      if ((*piVar8 == 2) && (-1 < (int)var_5)) {
        var_16 = this->lock_;
        pLVar5 = var_16->lock_;
        (*pLVar5->_vptr_Lock_impl[2])(pLVar5);
        var_7 = (char *)var_14("file %s was removed during the link");
                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */
        var_15(var_7,__oflag);
        pLVar5 = var_16->lock_;
        (*pLVar5->_vptr_Lock_impl[3])(pLVar5);
        *piVar8 = 2;
      }
      if (parameters->options_ == (type_5 *)0x0) {
        return var_20;
      }
      if ((parameters->debug_ & 4) == 0) {
        return var_20;
      }
      Errors::var_10(parameters->errors_,"Opened new descriptor %d for \"%s\"",var_20,__oflag);
      return var_20;
    }
    var_16 = this->lock_;
    if (var_16 != (type_3 *)0x0) {
      (*var_16->lock_->_vptr_Lock_impl[2])(var_16->lock_);
    }
    var_9 = this->current_ + -0x10;
    if (var_9 < 8) {
      var_9 = 8;
    }
    this->limit_ = var_9;
                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */
    bVar6 = var_17(this);
    if (!bVar6) {
      var_7 = (char *)var_14("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */
      var_18(var_7);
    }
    var_11 = var_19;
    if (var_16 != (type_3 *)0x0) {
      (*var_16->lock_->_vptr_Lock_impl[3])(var_16->lock_);
    }
  }
  var_16 = this->lock_;
  if (var_16 != (type_3 *)0x0) {
    (*var_16->lock_->_vptr_Lock_impl[2])(var_16->lock_);
  }
  var_23 = (this->open_descriptors_).
           super__Vector_base<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
           ._M_impl._M_finish;
  var_6 = (this->open_descriptors_).
            super__Vector_base<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
            ._M_impl._M_start;
  var_9 = (int)var_23 - (int)var_6 >> 2;
  var_19 = var_9 * -0x55555555;
  if (var_19 <= var_20) {
    var_21 = var_20 + 0x40;
    if (var_19 < var_21) {
                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */
      std::
      vector<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
      ::var_22(&this->open_descriptors_,var_21 + var_9 * 0x55555555);
      var_6 = (this->open_descriptors_).
                super__Vector_base<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
                ._M_impl._M_start;
    }
    else if ((var_21 < var_19) && (var_23 != var_6 + var_21)) {
      (this->open_descriptors_).
      super__Vector_base<gold::Descriptors::var_3,_std::allocator<gold::Descriptors::var_3>var_4>
      ._M_impl._M_finish = var_6 + var_21;
    }
  }
  var_6 = var_6 + var_20;
  var_6->name = (char *)__oflag;
  var_6->is_write = (var_11 & 3) != 0;
  var_6->stack_next = -1;
  var_6->inuse = true;
  var_6->is_on_stack = false;
  var_9 = this->current_ + 1;
  this->current_ = var_9;
  if (var_9 < this->limit_) {
    var_24 = parameters->options_;
  }
  else {
    var_17(this);
    var_24 = parameters->options_;
  }
  if ((var_24 != (type_5 *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */
    Errors::var_10(parameters->errors_,"Opened new descriptor %d for \"%s\"",var_20,__oflag);
  }
  if (var_16 == (type_3 *)0x0) {
    return var_20;
  }
  (*var_16->lock_->_vptr_Lock_impl[3])(var_16->lock_);
  return var_20;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

uint MASKED(int *param_1,uint param_2,char *param_3,uint param_4,undefined4 param_5)

{
  uint uVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  char *__s1;
  int *piVar4;
  char cVar5;
  int iVar6;
  int *piVar7;
  uint uVar8;
  int iVar9;
  undefined4 uVar10;
  undefined4 extraout_ECX;
  uint uVar11;
  
  cVar5 = FUN_000622e0(param_1 + 1);
  if ((cVar5 != '\x01') && (-1 < (int)param_2)) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f0b0("../../gold/descriptors.cc",0x53,&DAT_00234e8c,extraout_ECX);
  }
  if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
    param_1[0xb] = 8;
  }
  if (-1 < (int)param_2) {
    puVar3 = (undefined4 *)*param_1;
    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
    if ((uint)((param_1[7] - param_1[6] >> 2) * -0x55555555) <= param_2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d92 to 00143d96 has its CatchHandler @ 00143dc9 */
      FUN_0005f0b0("../../gold/descriptors.cc",0x5d,&DAT_00234e8c,param_2);
    }
    puVar2 = (undefined4 *)(param_1[6] + param_2 * 0xc);
    __s1 = (char *)*puVar2;
    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar6 = strcmp(__s1,param_3), iVar6 == 0))))
    {
      if (*(char *)(puVar2 + 2) != '\0') {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143dc4 to 00143dc8 has its CatchHandler @ 00143dc9 */
        FUN_0005f0b0("../../gold/descriptors.cc",0x62,&DAT_00234e8c,&__DT_PLTGOT);
      }
      *(undefined1 *)(puVar2 + 2) = 1;
      if (param_1[9] == param_2) {
        param_1[9] = puVar2[1];
        puVar2[1] = 0xffffffff;
        *(undefined1 *)((int)puVar2 + 10) = 0;
      }
      if ((DAT_00302378[2] != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
                    /* try { // try from 00143c99 to 00143c9d has its CatchHandler @ 00143dc9 */
        FUN_0005ac40(*DAT_00302378,"Reused existing descriptor %d for \"%s\"",param_2,param_3);
        (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
        return param_2;
      }
      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
      return param_2;
    }
    (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
  }
  while( true ) {
    uVar11 = param_4 | 0x80000;
    uVar8 = open64(param_3,uVar11,param_5);
    if (-1 < (int)uVar8) break;
    piVar7 = __errno_location();
    if (1 < *piVar7 - 0x17U) {
      if ((*piVar7 == 2) && (-1 < (int)param_2)) {
        puVar3 = (undefined4 *)*param_1;
        piVar4 = (int *)*puVar3;
        (**(code **)(*piVar4 + 8))(piVar4);
        uVar10 = gettext("file %s was removed during the link");
                    /* try { // try from 00143d42 to 00143d46 has its CatchHandler @ 00143dd0 */
        FUN_0005ad00(uVar10,param_3);
        piVar4 = (int *)*puVar3;
        (**(code **)(*piVar4 + 0xc))(piVar4);
        *piVar7 = 2;
      }
      if (DAT_00302378[2] == 0) {
        return uVar8;
      }
      if ((*(byte *)(DAT_00302378 + 5) & 4) == 0) {
        return uVar8;
      }
      FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);
      return uVar8;
    }
    puVar3 = (undefined4 *)*param_1;
    if (puVar3 != (undefined4 *)0x0) {
      (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
    }
    iVar6 = param_1[10] + -0x10;
    if (iVar6 < 8) {
      iVar6 = 8;
    }
    param_1[0xb] = iVar6;
                    /* try { // try from 00143b01 to 00143b05 has its CatchHandler @ 00143dde */
    cVar5 = FUN_00143670(param_1);
    if (cVar5 == '\0') {
      uVar10 = gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00143d79 to 00143d7d has its CatchHandler @ 00143dde */
      FUN_0005aca0(uVar10);
    }
    param_4 = uVar11;
    if (puVar3 != (undefined4 *)0x0) {
      (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
    }
  }
  puVar3 = (undefined4 *)*param_1;
  if (puVar3 != (undefined4 *)0x0) {
    (**(code **)(*(int *)*puVar3 + 8))((int *)*puVar3);
  }
  iVar6 = param_1[6];
  iVar9 = param_1[7] - iVar6 >> 2;
  uVar11 = iVar9 * -0x55555555;
  if (uVar11 <= uVar8) {
    uVar1 = uVar8 + 0x40;
    if (uVar11 < uVar1) {
                    /* try { // try from 00143d03 to 00143d07 has its CatchHandler @ 00143dd7 */
      FUN_00143e20(param_1 + 6,uVar1 + iVar9 * 0x55555555);
      iVar6 = param_1[6];
    }
    else if ((uVar1 < uVar11) && (iVar9 = iVar6 + uVar1 * 0xc, param_1[7] != iVar9)) {
      param_1[7] = iVar9;
    }
  }
  puVar2 = (undefined4 *)(iVar6 + uVar8 * 0xc);
  *puVar2 = param_3;
  *(bool *)((int)puVar2 + 9) = (param_4 & 3) != 0;
  puVar2[1] = 0xffffffff;
  *(undefined1 *)(puVar2 + 2) = 1;
  *(undefined1 *)((int)puVar2 + 10) = 0;
  iVar6 = param_1[10];
  param_1[10] = iVar6 + 1;
  if (iVar6 + 1 < param_1[0xb]) {
    iVar6 = DAT_00302378[2];
  }
  else {
    FUN_00143670(param_1);
    iVar6 = DAT_00302378[2];
  }
  if ((iVar6 != 0) && ((*(byte *)(DAT_00302378 + 5) & 4) != 0)) {
                    /* try { // try from 00143c20 to 00143c70 has its CatchHandler @ 00143dd7 */
    FUN_0005ac40(*DAT_00302378,"Opened new descriptor %d for \"%s\"",uVar8,param_3);
  }
  if (puVar3 == (undefined4 *)0x0) {
    return uVar8;
  }
  (**(code **)(*(int *)*puVar3 + 0xc))((int *)*puVar3);
  return uVar8;
}

