
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": 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,...)

{
  Lock *pLVar1;
  pointer pOVar2;
  General_options *pGVar3;
  bool bVar4;
  int iVar5;
  uint uVar6;
  int *piVar7;
  ulong uVar8;
  char *pcVar9;
  uint in_ECX;
  pointer pOVar10;
  uint __oflag_00;
  ulong uVar11;
  uint in_R8D;
  
  uVar6 = (uint)__file;
  bVar4 = Initialize_lock::initialize(&this->initialize_lock_);
  if ((!bVar4) && (-1 < (int)uVar6)) {
                    /* 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)uVar6) {
    pLVar1 = this->lock_;
    (*pLVar1->lock_->_vptr_Lock_impl[2])();
    pOVar10 = (this->open_descriptors_).
              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
              ._M_impl._M_start;
    if ((ulong)((long)(this->open_descriptors_).
                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */
      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");
    }
    pOVar10 = pOVar10 + (int)uVar6;
    pcVar9 = pOVar10->name;
    if ((pcVar9 == ___oflag) ||
       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {
      if (pOVar10->inuse != false) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */
        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");
      }
      pOVar10->inuse = true;
      if (this->stack_top_ == uVar6) {
        this->stack_top_ = pOVar10->stack_next;
        pOVar10->stack_next = -1;
        pOVar10->is_on_stack = false;
      }
      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */
        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",
                      (ulong)__file & 0xffffffff,___oflag);
        (*pLVar1->lock_->_vptr_Lock_impl[3])();
        return uVar6;
      }
      (*pLVar1->lock_->_vptr_Lock_impl[3])();
      return uVar6;
    }
    (*pLVar1->lock_->_vptr_Lock_impl[3])();
  }
  while( true ) {
    __oflag_00 = in_ECX | 0x80000;
    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);
    if (-1 < (int)uVar6) {
      pLVar1 = this->lock_;
      if (pLVar1 != (Lock *)0x0) {
        (*pLVar1->lock_->_vptr_Lock_impl[2])();
      }
      pOVar2 = (this->open_descriptors_).
               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
               ._M_impl._M_finish;
      pOVar10 = (this->open_descriptors_).
                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                ._M_impl._M_start;
      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;
      if (uVar8 <= (ulong)(long)(int)uVar6) {
        uVar11 = (ulong)(int)(uVar6 + 0x40);
        if (uVar8 < uVar11) {
                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */
          std::
          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);
          pOVar10 = (this->open_descriptors_).
                    super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
                    ._M_impl._M_start;
        }
        else if ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {
          (this->open_descriptors_).
          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>
          ._M_impl._M_finish = pOVar10 + uVar11;
        }
      }
      pOVar10 = pOVar10 + (int)uVar6;
      pOVar10->is_write = (in_ECX & 3) != 0;
      pOVar10->name = ___oflag;
      pOVar10->stack_next = -1;
      pOVar10->inuse = true;
      pOVar10->is_on_stack = false;
      iVar5 = this->current_ + 1;
      this->current_ = iVar5;
      if (iVar5 < this->limit_) {
        pGVar3 = parameters->options_;
      }
      else {
        close_some_descriptor(this);
        pGVar3 = parameters->options_;
      }
      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */
        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,
                      ___oflag);
      }
      if (pLVar1 != (Lock *)0x0) {
        (*pLVar1->lock_->_vptr_Lock_impl[3])();
      }
      return uVar6;
    }
    piVar7 = __errno_location();
    if (1 < *piVar7 - 0x17U) break;
    pLVar1 = this->lock_;
    if (pLVar1 != (Lock *)0x0) {
      (*pLVar1->lock_->_vptr_Lock_impl[2])();
    }
    iVar5 = this->current_ + -0x10;
    if (iVar5 < 8) {
      iVar5 = 8;
    }
    this->limit_ = iVar5;
                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */
    bVar4 = close_some_descriptor(this);
    if (!bVar4) {
      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */
      gold_fatal(pcVar9);
    }
    in_ECX = __oflag_00;
    if (pLVar1 != (Lock *)0x0) {
      (*pLVar1->lock_->_vptr_Lock_impl[3])();
    }
  }
  if ((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))) {
    pLVar1 = this->lock_;
    (*pLVar1->lock_->_vptr_Lock_impl[2])();
    pcVar9 = (char *)gettext("file %s was removed during the link");
                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */
    gold_error(pcVar9,___oflag);
    (*pLVar1->lock_->_vptr_Lock_impl[3])();
    *piVar7 = 2;
  }
  if (parameters->options_ == (General_options *)0x0) {
    return uVar6;
  }
  if ((parameters->debug_ & 4) == 0) {
    return uVar6;
  }
  Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);
  return uVar6;
}



int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)

{
  long lVar1;
  undefined8 *puVar2;
  char *__s1;
  char cVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  ulong uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  long lVar10;
  uint __oflag;
  ulong uVar11;
  
  cVar3 = FUN_0019c6f0(param_1 + 1);
  if ((cVar3 != '\x01') && (-1 < param_2)) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);
  }
  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {
    *(undefined4 *)(param_1 + 9) = 8;
  }
  if (-1 < param_2) {
    puVar2 = (undefined8 *)*param_1;
    (**(code **)(*(long *)*puVar2 + 0x10))();
    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */
      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);
    }
    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);
    __s1 = (char *)*puVar9;
    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))
    {
      if (*(char *)((long)puVar9 + 0xc) != '\0') {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */
        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);
      }
      *(undefined1 *)((long)puVar9 + 0xc) = 1;
      if ((int)param_1[8] == param_2) {
        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);
        *(undefined4 *)(puVar9 + 1) = 0xffffffff;
        *(undefined1 *)((long)puVar9 + 0xe) = 0;
      }
      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {
                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */
        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",
                     param_2,param_3);
        (**(code **)(*(long *)*puVar2 + 0x18))();
        return param_2;
      }
      (**(code **)(*(long *)*puVar2 + 0x18))();
      return param_2;
    }
    (**(code **)(*(long *)*puVar2 + 0x18))();
  }
  while( true ) {
    __oflag = param_4 | 0x80000;
    iVar4 = open64(param_3,__oflag,(ulong)param_5);
    if (-1 < iVar4) {
      puVar2 = (undefined8 *)*param_1;
      if (puVar2 != (undefined8 *)0x0) {
        (**(code **)(*(long *)*puVar2 + 0x10))();
      }
      lVar10 = param_1[5];
      uVar7 = param_1[6] - lVar10 >> 4;
      if (uVar7 <= (ulong)(long)iVar4) {
        uVar11 = (ulong)(iVar4 + 0x40);
        if (uVar7 < uVar11) {
                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */
          FUN_002658f0(param_1 + 5,uVar11 - uVar7);
          lVar10 = param_1[5];
        }
        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {
          param_1[6] = lVar1;
        }
      }
      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);
      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;
      *puVar9 = param_3;
      *(undefined4 *)(puVar9 + 1) = 0xffffffff;
      *(undefined1 *)((long)puVar9 + 0xc) = 1;
      *(undefined1 *)((long)puVar9 + 0xe) = 0;
      iVar5 = *(int *)((long)param_1 + 0x44) + 1;
      *(int *)((long)param_1 + 0x44) = iVar5;
      if (iVar5 < (int)param_1[9]) {
        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);
      }
      else {
        FUN_002651e0(param_1);
        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);
      }
      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {
                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */
        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,
                     param_3);
      }
      if (puVar2 != (undefined8 *)0x0) {
        (**(code **)(*(long *)*puVar2 + 0x18))();
      }
      return iVar4;
    }
    piVar6 = __errno_location();
    if (1 < *piVar6 - 0x17U) break;
    puVar2 = (undefined8 *)*param_1;
    if (puVar2 != (undefined8 *)0x0) {
      (**(code **)(*(long *)*puVar2 + 0x10))();
    }
    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;
    if (iVar4 < 8) {
      iVar4 = 8;
    }
    *(int *)(param_1 + 9) = iVar4;
                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */
    cVar3 = FUN_002651e0(param_1);
    if (cVar3 == '\0') {
      uVar8 = gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */
      FUN_00191730(uVar8);
    }
    param_4 = __oflag;
    if (puVar2 != (undefined8 *)0x0) {
      (**(code **)(*(long *)*puVar2 + 0x18))();
    }
  }
  if ((*piVar6 == 2) && (-1 < param_2)) {
    puVar2 = (undefined8 *)*param_1;
    (**(code **)(*(long *)*puVar2 + 0x10))();
    uVar8 = gettext("file %s was removed during the link");
                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */
    FUN_00191870(uVar8,param_3);
    (**(code **)(*(long *)*puVar2 + 0x18))();
    *piVar6 = 2;
  }
  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {
    return iVar4;
  }
  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {
    return iVar4;
  }
  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);
  return iVar4;
}


PUSH R15
MOV R15D,R8D
PUSH R14
MOV R14,RDX
PUSH R13
MOV R13D,ECX
PUSH R12
MOV R12D,ESI
PUSH RBP
PUSH RBX
MOV RBX,RDI
ADD RDI,0x8
SUB RSP,0x18
CALL 0x0019c6f0
MOV EDX,R12D
NOT EDX
SHR EDX,0x1f
MOV dword ptr [RSP + 0x4],EDX
CMP AL,0x1
JZ 0x0026550e
TEST DL,DL
JNZ 0x00265877
MOV RAX,qword ptr [0x003f85c0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x00265529
TEST byte ptr [RAX + 0x24],0x4
JZ 0x00265529
MOV dword ptr [RBX + 0x48],0x8
TEST R12D,R12D
JS 0x00265646
MOV RBP,qword ptr [RBX]
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
MOV RAX,qword ptr [RBX + 0x28]
MOV RCX,qword ptr [RBX + 0x30]
MOVSXD RDX,R12D
SUB RCX,RAX
SAR RCX,0x4
CMP RDX,RCX
JNC 0x0026585f
SHL RDX,0x4
ADD RDX,RAX
MOV RDI,qword ptr [RDX]
CMP RDI,R14
JZ 0x0026558c
MOV qword ptr [RSP + 0x8],RDX
TEST RDI,RDI
JZ 0x002656f8
MOV RSI,R14
CALL 0x00144790
MOV RDX,qword ptr [RSP + 0x8]
TEST EAX,EAX
JNZ 0x002656f8
CMP byte ptr [RDX + 0xc],0x0
JNZ 0x0026588f
MOV byte ptr [RDX + 0xc],0x1
CMP dword ptr [RBX + 0x40],R12D
JNZ 0x002655b1
MOV EAX,dword ptr [RDX + 0x8]
MOV dword ptr [RBX + 0x40],EAX
MOV dword ptr [RDX + 0x8],0xffffffff
MOV byte ptr [RDX + 0xe],0x0
MOV RAX,qword ptr [0x003f85c0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x002655c9
TEST byte ptr [RAX + 0x24],0x4
JNZ 0x0026578f
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
ADD RSP,0x18
MOV EAX,R12D
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x00144760
MOV R13,RAX
MOV EAX,dword ptr [RAX]
LEA EDX,[RAX + -0x17]
CMP EDX,0x1
JA 0x002657b5
MOV R12,qword ptr [RBX]
TEST R12,R12
JZ 0x00265610
MOV RDI,qword ptr [R12]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
MOV EAX,dword ptr [RBX + 0x44]
MOV ECX,0x8
MOV RDI,RBX
SUB EAX,0x10
CMP EAX,0x8
CMOVL EAX,ECX
MOV dword ptr [RBX + 0x48],EAX
CALL 0x002651e0
TEST AL,AL
JZ 0x00265849
TEST R12,R12
JZ 0x00265643
MOV RDI,qword ptr [R12]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
MOV R13D,EBP
MOV EBP,R13D
MOV EDX,R15D
MOV RDI,R14
XOR EAX,EAX
OR EBP,0x80000
MOV ESI,EBP
CALL 0x00144620
MOV R12D,EAX
TEST EAX,EAX
JS 0x002655e8
MOV RBP,qword ptr [RBX]
TEST RBP,RBP
JZ 0x00265677
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
MOV RCX,qword ptr [RBX + 0x30]
MOV RDX,qword ptr [RBX + 0x28]
MOVSXD R15,R12D
MOV RAX,RCX
SUB RAX,RDX
SAR RAX,0x4
CMP R15,RAX
JNC 0x00265738
SHL R15,0x4
AND R13D,0x3
LEA RAX,[RDX + R15*0x1]
SETNZ byte ptr [RAX + 0xd]
MOV qword ptr [RAX],R14
MOV dword ptr [RAX + 0x8],0xffffffff
MOV byte ptr [RAX + 0xc],0x1
MOV byte ptr [RAX + 0xe],0x0
MOV EAX,dword ptr [RBX + 0x44]
ADD EAX,0x1
MOV dword ptr [RBX + 0x44],EAX
CMP EAX,dword ptr [RBX + 0x48]
JGE 0x00265770
MOV RAX,qword ptr [0x003f85c0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x002656dd
TEST byte ptr [RAX + 0x24],0x4
JNZ 0x00265710
TEST RBP,RBP
JZ 0x002655d3
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
JMP 0x002655d3
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
JMP 0x00265646
MOV RDI,qword ptr [RAX]
MOV RCX,R14
MOV EDX,R12D
LEA RSI,[0x355500]
XOR EAX,EAX
CALL 0x00191650
TEST RBP,RBP
JNZ 0x002656e6
JMP 0x002655d3
LEA ESI,[R12 + 0x40]
MOVSXD RSI,ESI
CMP RSI,RAX
JA 0x002657f9
JNC 0x00265695
SHL RSI,0x4
LEA RAX,[RDX + RSI*0x1]
CMP RCX,RAX
JZ 0x00265695
MOV qword ptr [RBX + 0x30],RAX
JMP 0x00265695
MOV RDI,RBX
CALL 0x002651e0
MOV RAX,qword ptr [0x003f85c0]
CMP qword ptr [RAX + 0x10],0x0
JNZ 0x002656d7
JMP 0x002656dd
MOV RDI,qword ptr [RAX]
MOV RCX,R14
MOV EDX,R12D
LEA RSI,[0x3554b0]
XOR EAX,EAX
CALL 0x00191650
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
JMP 0x002655d3
CMP EAX,0x2
JNZ 0x002657c1
CMP byte ptr [RSP + 0x4],0x0
JNZ 0x0026580e
MOV RAX,qword ptr [0x003f85c0]
CMP qword ptr [RAX + 0x10],0x0
JZ 0x002655d3
TEST byte ptr [RAX + 0x24],0x4
JZ 0x002655d3
MOV RDI,qword ptr [RAX]
MOV RCX,R14
MOV EDX,R12D
LEA RSI,[0x355500]
XOR EAX,EAX
CALL 0x00191650
JMP 0x002655d3
SUB RSI,RAX
LEA RDI,[RBX + 0x28]
CALL 0x002658f0
MOV RDX,qword ptr [RBX + 0x28]
JMP 0x00265695
MOV RBX,qword ptr [RBX]
MOV RDI,qword ptr [RBX]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
LEA RDI,[0x3554d8]
CALL 0x00144320
MOV RSI,R14
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00191870
MOV RDI,qword ptr [RBX]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
MOV dword ptr [R13],0x2
JMP 0x002657c1
LEA RDI,[0x355528]
CALL 0x00144320
MOV RDI,RAX
XOR EAX,EAX
CALL 0x00191730
LEA RDX,[0x355580]
MOV ESI,0x5d
LEA RDI,[0x355412]
CALL 0x00199900
LEA RDX,[0x355580]
MOV ESI,0x53
LEA RDI,[0x355412]
CALL 0x00199900
LEA RDX,[0x355580]
MOV ESI,0x62
LEA RDI,[0x355412]
CALL 0x00199900
(translation_unit "int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}\n\n" (function_definition "int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" primitive_type (function_declarator "FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" identifier (parameter_list "(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "uint __oflag;" type_identifier identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (expression_statement "cVar3 = FUN_0019c6f0(param_1 + 1);" (assignment_expression "cVar3 = FUN_0019c6f0(param_1 + 1)" identifier = (call_expression "FUN_0019c6f0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) ;) (if_statement "if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" if (parenthesized_expression "((cVar3 != '\x01') && (-1 < param_2))" ( (binary_expression "(cVar3 != '\x01') && (-1 < param_2)" (parenthesized_expression "(cVar3 != '\x01')" ( (binary_expression "cVar3 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) && (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" { comment (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" if (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" { (expression_statement "*(undefined4 *)(param_1 + 9) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 8" (pointer_expression "*(undefined4 *)(param_1 + 9)" * (cast_expression "(undefined4 *)(param_1 + 9)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" if (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) )) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" if (parenthesized_expression "((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2)" ( (binary_expression "(ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2" (call_expression "(ulong)(param_1[6] - param_1[5] >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[6] - param_1[5] >> 4)" ( (binary_expression "param_1[6] - param_1[5] >> 4" (binary_expression "param_1[6] - param_1[5]" (subscript_expression "param_1[6]" identifier [ number_literal ]) - (subscript_expression "param_1[5]" identifier [ number_literal ])) >> number_literal) ))) <= (cast_expression "(ulong)(long)param_2" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" { comment comment (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (expression_statement "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);" (assignment_expression "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5])" identifier = (cast_expression "(undefined8 *)((long)param_2 * 0x10 + param_1[5])" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 * 0x10 + param_1[5])" ( (binary_expression "(long)param_2 * 0x10 + param_1[5]" (binary_expression "(long)param_2 * 0x10" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ])) )))) ;) (expression_statement "__s1 = (char *)*puVar9;" (assignment_expression "__s1 = (char *)*puVar9" identifier = (cast_expression "(char *)*puVar9" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar9" * identifier))) ;) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" if (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))" ( (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" (parenthesized_expression "(__s1 == param_3)" ( (binary_expression "__s1 == param_3" identifier == identifier) )) || (parenthesized_expression "((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" ( (parenthesized_expression "(__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))" ( (binary_expression "__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)" (binary_expression "__s1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar4 = strcmp(__s1,param_3), iVar4 == 0)" ( (comma_expression "iVar4 = strcmp(__s1,param_3), iVar4 == 0" (assignment_expression "iVar4 = strcmp(__s1,param_3)" identifier = (call_expression "strcmp(__s1,param_3)" identifier (argument_list "(__s1,param_3)" ( identifier , identifier )))) , (binary_expression "iVar4 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" { (if_statement "if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" if (parenthesized_expression "(*(char *)((long)puVar9 + 0xc) != '\0')" ( (binary_expression "*(char *)((long)puVar9 + 0xc) != '\0'" (pointer_expression "*(char *)((long)puVar9 + 0xc)" * (cast_expression "(char *)((long)puVar9 + 0xc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" { comment comment (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" if (parenthesized_expression "((int)param_1[8] == param_2)" ( (binary_expression "(int)param_1[8] == param_2" (cast_expression "(int)param_1[8]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" { (expression_statement "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);" (assignment_expression "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1)" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xe)" ( (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) })) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" if (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" { comment (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (while_statement "while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" { (expression_statement "__oflag = param_4 | 0x80000;" (assignment_expression "__oflag = param_4 | 0x80000" identifier = (binary_expression "param_4 | 0x80000" identifier | number_literal)) ;) (expression_statement "iVar4 = open64(param_3,__oflag,(ulong)param_5);" (assignment_expression "iVar4 = open64(param_3,__oflag,(ulong)param_5)" identifier = (call_expression "open64(param_3,__oflag,(ulong)param_5)" identifier (argument_list "(param_3,__oflag,(ulong)param_5)" ( identifier , identifier , (cast_expression "(ulong)param_5" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) ;) (if_statement "if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" if (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) (compound_statement "{\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = param_1[6] - lVar10 >> 4;" (assignment_expression "uVar7 = param_1[6] - lVar10 >> 4" identifier = (binary_expression "param_1[6] - lVar10 >> 4" (binary_expression "param_1[6] - lVar10" (subscript_expression "param_1[6]" identifier [ number_literal ]) - identifier) >> number_literal)) ;) (if_statement "if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" if (parenthesized_expression "(uVar7 <= (ulong)(long)iVar4)" ( (binary_expression "uVar7 <= (ulong)(long)iVar4" identifier <= (cast_expression "(ulong)(long)iVar4" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)iVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" { (expression_statement "uVar11 = (ulong)(iVar4 + 0x40);" (assignment_expression "uVar11 = (ulong)(iVar4 + 0x40)" identifier = (call_expression "(ulong)(iVar4 + 0x40)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar4 + 0x40)" ( (binary_expression "iVar4 + 0x40" identifier + number_literal) )))) ;) (if_statement "if (uVar7 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" if (parenthesized_expression "(uVar7 < uVar11)" ( (binary_expression "uVar7 < uVar11" identifier < identifier) )) (compound_statement "{\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }" { comment (expression_statement "FUN_002658f0(param_1 + 5,uVar11 - uVar7);" (call_expression "FUN_002658f0(param_1 + 5,uVar11 - uVar7)" identifier (argument_list "(param_1 + 5,uVar11 - uVar7)" ( (binary_expression "param_1 + 5" identifier + number_literal) , (binary_expression "uVar11 - uVar7" identifier - identifier) ))) ;) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) }) (else_clause "else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" else (if_statement "if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" if (parenthesized_expression "((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1))" ( (binary_expression "(uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" (parenthesized_expression "(uVar11 < uVar7)" ( (binary_expression "uVar11 < uVar7" identifier < identifier) )) && (parenthesized_expression "(lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" ( (comma_expression "lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1" (assignment_expression "lVar1 = lVar10 + uVar11 * 0x10" identifier = (binary_expression "lVar10 + uVar11 * 0x10" identifier + (binary_expression "uVar11 * 0x10" identifier * number_literal))) , (binary_expression "param_1[6] != lVar1" (subscript_expression "param_1[6]" identifier [ number_literal ]) != identifier)) ))) )) (compound_statement "{\n          param_1[6] = lVar1;\n        }" { (expression_statement "param_1[6] = lVar1;" (assignment_expression "param_1[6] = lVar1" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) })))) })) (expression_statement "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);" (assignment_expression "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10)" identifier = (cast_expression "(undefined8 *)(lVar10 + (long)iVar4 * 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + (long)iVar4 * 0x10)" ( (binary_expression "lVar10 + (long)iVar4 * 0x10" identifier + (binary_expression "(long)iVar4 * 0x10" (cast_expression "(long)iVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) ;) (expression_statement "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((long)puVar9 + 0xd)" * (cast_expression "(bool *)((long)puVar9 + 0xd)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xd)" ( (binary_expression "(long)puVar9 + 0xd" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) 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 "*puVar9 = param_3;" (assignment_expression "*puVar9 = param_3" (pointer_expression "*puVar9" * identifier) = identifier) ;) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xe)" ( (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar5 = *(int *)((long)param_1 + 0x44) + 1;" (assignment_expression "iVar5 = *(int *)((long)param_1 + 0x44) + 1" identifier = (binary_expression "*(int *)((long)param_1 + 0x44) + 1" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal)) ;) (expression_statement "*(int *)((long)param_1 + 0x44) = iVar5;" (assignment_expression "*(int *)((long)param_1 + 0x44) = iVar5" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" if (parenthesized_expression "(iVar5 < (int)param_1[9])" ( (binary_expression "iVar5 < (int)param_1[9]" identifier < (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) )) (compound_statement "{\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" { (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" else (compound_statement "{\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" { (expression_statement "FUN_002651e0(param_1);" (call_expression "FUN_002651e0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) }))) (if_statement "if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" if (parenthesized_expression "((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0))" ( (binary_expression "(lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" (parenthesized_expression "(lVar10 != 0)" ( (binary_expression "lVar10 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" ( (binary_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0" (parenthesized_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4)" ( (binary_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4" (pointer_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24)" * (cast_expression "(byte *)((long)PTR_DAT_003f85c0 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)PTR_DAT_003f85c0 + 0x24)" ( (binary_expression "(long)PTR_DAT_003f85c0 + 0x24" (cast_expression "(long)PTR_DAT_003f85c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" { comment (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) })) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (return_statement "return iVar4;" return identifier ;) })) (expression_statement "piVar6 = __errno_location();" (assignment_expression "piVar6 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar6 - 0x17U) break;" if (parenthesized_expression "(1 < *piVar6 - 0x17U)" ( (binary_expression "1 < *piVar6 - 0x17U" number_literal < (binary_expression "*piVar6 - 0x17U" (pointer_expression "*piVar6" * identifier) - number_literal)) )) (break_statement "break;" break ;)) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10" identifier = (binary_expression "*(int *)((long)param_1 + 0x44) + -0x10" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal)) ;) (if_statement "if (iVar4 < 8) {\n      iVar4 = 8;\n    }" if (parenthesized_expression "(iVar4 < 8)" ( (binary_expression "iVar4 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar4 = 8;\n    }" { (expression_statement "iVar4 = 8;" (assignment_expression "iVar4 = 8" identifier = number_literal) ;) })) (expression_statement "*(int *)(param_1 + 9) = iVar4;" (assignment_expression "*(int *)(param_1 + 9) = iVar4" (pointer_expression "*(int *)(param_1 + 9)" * (cast_expression "(int *)(param_1 + 9)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = identifier) ;) comment (expression_statement "cVar3 = FUN_002651e0(param_1);" (assignment_expression "cVar3 = FUN_002651e0(param_1)" identifier = (call_expression "FUN_002651e0(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }" if (parenthesized_expression "(cVar3 == '\0')" ( (binary_expression "cVar3 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      FUN_00191730(uVar8);\n    }" { (expression_statement "uVar8 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar8 = 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_00191730(uVar8);" (call_expression "FUN_00191730(uVar8)" identifier (argument_list "(uVar8)" ( identifier ))) ;) })) (expression_statement "param_4 = __oflag;" (assignment_expression "param_4 = __oflag" identifier = identifier) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) })) (if_statement "if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" if (parenthesized_expression "((*piVar6 == 2) && (-1 < param_2))" ( (binary_expression "(*piVar6 == 2) && (-1 < param_2)" (parenthesized_expression "(*piVar6 == 2)" ( (binary_expression "*piVar6 == 2" (pointer_expression "*piVar6" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) ))) )) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "uVar8 = gettext("file %s was removed during the link");" (assignment_expression "uVar8 = 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_00191870(uVar8,param_3);" (call_expression "FUN_00191870(uVar8,param_3)" identifier (argument_list "(uVar8,param_3)" ( identifier , identifier ))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "*piVar6 = 2;" (assignment_expression "*piVar6 = 2" (pointer_expression "*piVar6" * identifier) = number_literal) ;) })) (if_statement "if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }" if (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }" if (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) == 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) == 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": 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  Lock *pLVar1;\n  pointer pOVar2;\n  General_options *pGVar3;\n  bool bVar4;\n  int iVar5;\n  uint uVar6;\n  int *piVar7;\n  ulong uVar8;\n  char *pcVar9;\n  uint in_ECX;\n  pointer pOVar10;\n  uint __oflag_00;\n  ulong uVar11;\n  uint in_R8D;\n  \n  uVar6 = (uint)__file;\n  bVar4 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar4) && (-1 < (int)uVar6)) {\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)uVar6) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar10 = pOVar10 + (int)uVar6;\n    pcVar9 = pOVar10->name;\n    if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  }\n  while( true ) {\n    __oflag_00 = in_ECX | 0x80000;\n    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);\n    if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) break;\n    pLVar1 = this->lock_;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }\n    iVar5 = this->current_ + -0x10;\n    if (iVar5 < 8) {\n      iVar5 = 8;\n    }\n    this->limit_ = iVar5;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    bVar4 = close_some_descriptor(this);\n    if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }\n    in_ECX = __oflag_00;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }\n  }\n  if ((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pcVar9 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    gold_error(pcVar9,___oflag);\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    *piVar7 = 2;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n    return uVar6;\n  }\n  if ((parameters->debug_ & 4) == 0) {\n    return uVar6;\n  }\n  Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);\n  return uVar6;\n}\n\n" comment comment comment comment (function_definition "int __thiscall gold::Descriptors::open(Descriptors *this,char *__file,int __oflag,...)\n\n{\n  Lock *pLVar1;\n  pointer pOVar2;\n  General_options *pGVar3;\n  bool bVar4;\n  int iVar5;\n  uint uVar6;\n  int *piVar7;\n  ulong uVar8;\n  char *pcVar9;\n  uint in_ECX;\n  pointer pOVar10;\n  uint __oflag_00;\n  ulong uVar11;\n  uint in_R8D;\n  \n  uVar6 = (uint)__file;\n  bVar4 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar4) && (-1 < (int)uVar6)) {\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)uVar6) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar10 = pOVar10 + (int)uVar6;\n    pcVar9 = pOVar10->name;\n    if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  }\n  while( true ) {\n    __oflag_00 = in_ECX | 0x80000;\n    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);\n    if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) break;\n    pLVar1 = this->lock_;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }\n    iVar5 = this->current_ + -0x10;\n    if (iVar5 < 8) {\n      iVar5 = 8;\n    }\n    this->limit_ = iVar5;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    bVar4 = close_some_descriptor(this);\n    if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }\n    in_ECX = __oflag_00;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }\n  }\n  if ((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pcVar9 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    gold_error(pcVar9,___oflag);\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    *piVar7 = 2;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n    return uVar6;\n  }\n  if ((parameters->debug_ & 4) == 0) {\n    return uVar6;\n  }\n  Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);\n  return uVar6;\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  Lock *pLVar1;\n  pointer pOVar2;\n  General_options *pGVar3;\n  bool bVar4;\n  int iVar5;\n  uint uVar6;\n  int *piVar7;\n  ulong uVar8;\n  char *pcVar9;\n  uint in_ECX;\n  pointer pOVar10;\n  uint __oflag_00;\n  ulong uVar11;\n  uint in_R8D;\n  \n  uVar6 = (uint)__file;\n  bVar4 = Initialize_lock::initialize(&this->initialize_lock_);\n  if ((!bVar4) && (-1 < (int)uVar6)) {\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)uVar6) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar10 = pOVar10 + (int)uVar6;\n    pcVar9 = pOVar10->name;\n    if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  }\n  while( true ) {\n    __oflag_00 = in_ECX | 0x80000;\n    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);\n    if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) break;\n    pLVar1 = this->lock_;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }\n    iVar5 = this->current_ + -0x10;\n    if (iVar5 < 8) {\n      iVar5 = 8;\n    }\n    this->limit_ = iVar5;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    bVar4 = close_some_descriptor(this);\n    if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }\n    in_ECX = __oflag_00;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }\n  }\n  if ((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pcVar9 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    gold_error(pcVar9,___oflag);\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    *piVar7 = 2;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n    return uVar6;\n  }\n  if ((parameters->debug_ & 4) == 0) {\n    return uVar6;\n  }\n  Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);\n  return uVar6;\n}" { (declaration "Lock *pLVar1;" type_identifier (pointer_declarator "*pLVar1" * identifier) ;) (declaration "pointer pOVar2;" type_identifier identifier ;) (declaration "General_options *pGVar3;" type_identifier (pointer_declarator "*pGVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "uint in_ECX;" type_identifier identifier ;) (declaration "pointer pOVar10;" type_identifier identifier ;) (declaration "uint __oflag_00;" type_identifier identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "uint in_R8D;" type_identifier identifier ;) (expression_statement "uVar6 = (uint)__file;" (assignment_expression "uVar6 = (uint)__file" identifier = (cast_expression "(uint)__file" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (ERROR "bVar4 = Initialize_lock::" (assignment_expression "bVar4 = 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 ((!bVar4) && (-1 < (int)uVar6)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/descriptors.cc",0x53,"open");\n  }" if (parenthesized_expression "((!bVar4) && (-1 < (int)uVar6))" ( (binary_expression "(!bVar4) && (-1 < (int)uVar6)" (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) && (parenthesized_expression "(-1 < (int)uVar6)" ( (binary_expression "-1 < (int)uVar6" number_literal < (cast_expression "(int)uVar6" ( (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)uVar6) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar10 = pOVar10 + (int)uVar6;\n    pcVar9 = pOVar10->name;\n    if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  }" if (parenthesized_expression "(-1 < (int)uVar6)" ( (binary_expression "-1 < (int)uVar6" number_literal < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n              ._M_impl._M_start;\n    if ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }\n    pOVar10 = pOVar10 + (int)uVar6;\n    pcVar9 = pOVar10->name;\n    if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  }" { (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (ERROR "pOVar10 = (this->open_descriptors_).\n              super__Vector_base<gold::" (assignment_expression "pOVar10 = (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 ((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\n      do_gold_unreachable("../../gold/descriptors.cc",0x5d,"open");\n    }" if (parenthesized_expression "((ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6)" ( (binary_expression "(ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4) <= (ulong)(long)(int)uVar6" (call_expression "(ulong)((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(this->open_descriptors_).\n                      super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4)" ( (binary_expression "(long)(this->open_descriptors_).\n                      super__Vector_base<gold" (cast_expression "(long)(this->open_descriptors_).\n                      super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (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) , (ERROR "_std::allocator<gold::Descriptors::" identifier : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10 >> 4" (binary_expression "Open_descriptor>_>\n                      ._M_impl._M_finish - (long)pOVar10" (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 "(long)pOVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal) ))) <= (cast_expression "(ulong)(long)(int)uVar6" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)(int)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */\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 "pOVar10 = pOVar10 + (int)uVar6;" (assignment_expression "pOVar10 = pOVar10 + (int)uVar6" identifier = (binary_expression "pOVar10 + (int)uVar6" identifier + (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pcVar9 = pOVar10->name;" (assignment_expression "pcVar9 = pOVar10->name" identifier = (field_expression "pOVar10->name" identifier -> field_identifier)) ;) (if_statement "if ((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))) {\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }" if (parenthesized_expression "((pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0))))" ( (binary_expression "(pcVar9 == ___oflag) ||\n       ((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))" (parenthesized_expression "(pcVar9 == ___oflag)" ( (binary_expression "pcVar9 == ___oflag" identifier == identifier) )) || (parenthesized_expression "((pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)))" ( (parenthesized_expression "(pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0))" ( (binary_expression "pcVar9 != (char *)0x0 && (iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)" (binary_expression "pcVar9 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0)" ( (comma_expression "iVar5 = strcmp(pcVar9,___oflag), iVar5 == 0" (assignment_expression "iVar5 = strcmp(pcVar9,___oflag)" identifier = (call_expression "strcmp(pcVar9,___oflag)" identifier (argument_list "(pcVar9,___oflag)" ( identifier , identifier )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }\n      pOVar10->inuse = true;\n      if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }\n      if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      return uVar6;\n    }" { (if_statement "if (pOVar10->inuse != false) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\n        do_gold_unreachable("../../gold/descriptors.cc",0x62,"open");\n      }" if (parenthesized_expression "(pOVar10->inuse != false)" ( (binary_expression "pOVar10->inuse != false" (field_expression "pOVar10->inuse" identifier -> field_identifier) != false) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */\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 "pOVar10->inuse = true;" (assignment_expression "pOVar10->inuse = true" (field_expression "pOVar10->inuse" identifier -> field_identifier) = true) ;) (if_statement "if (this->stack_top_ == uVar6) {\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }" if (parenthesized_expression "(this->stack_top_ == uVar6)" ( (binary_expression "this->stack_top_ == uVar6" (field_expression "this->stack_top_" identifier -> field_identifier) == identifier) )) (compound_statement "{\n        this->stack_top_ = pOVar10->stack_next;\n        pOVar10->stack_next = -1;\n        pOVar10->is_on_stack = false;\n      }" { (expression_statement "this->stack_top_ = pOVar10->stack_next;" (assignment_expression "this->stack_top_ = pOVar10->stack_next" (field_expression "this->stack_top_" identifier -> field_identifier) = (field_expression "pOVar10->stack_next" identifier -> field_identifier)) ;) (expression_statement "pOVar10->stack_next = -1;" (assignment_expression "pOVar10->stack_next = -1" (field_expression "pOVar10->stack_next" identifier -> field_identifier) = number_literal) ;) (expression_statement "pOVar10->is_on_stack = false;" (assignment_expression "pOVar10->is_on_stack = false" (field_expression "pOVar10->is_on_stack" identifier -> field_identifier) = false) ;) })) (if_statement "if ((parameters->options_ != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\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 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */\n        Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n        return uVar6;\n      }" { comment (labeled_statement "Errors::debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag);" (call_expression "debug(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag)" identifier (argument_list "(parameters->errors_,"Reused existing descriptor %d for \"%s\"",\n                      (ulong)__file & 0xffffffff,___oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , (binary_expression "(ulong)__file & 0xffffffff" (cast_expression "(ulong)__file" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) , identifier ))) ;)) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (return_statement "return uVar6;" return identifier ;) })) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (return_statement "return uVar6;" return identifier ;) })) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) })) (while_statement "while( true ) {\n    __oflag_00 = in_ECX | 0x80000;\n    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);\n    if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) break;\n    pLVar1 = this->lock_;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }\n    iVar5 = this->current_ + -0x10;\n    if (iVar5 < 8) {\n      iVar5 = 8;\n    }\n    this->limit_ = iVar5;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    bVar4 = close_some_descriptor(this);\n    if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }\n    in_ECX = __oflag_00;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    __oflag_00 = in_ECX | 0x80000;\n    uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);\n    if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }\n    piVar7 = __errno_location();\n    if (1 < *piVar7 - 0x17U) break;\n    pLVar1 = this->lock_;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }\n    iVar5 = this->current_ + -0x10;\n    if (iVar5 < 8) {\n      iVar5 = 8;\n    }\n    this->limit_ = iVar5;\n                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */\n    bVar4 = close_some_descriptor(this);\n    if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }\n    in_ECX = __oflag_00;\n    if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }\n  }" { (expression_statement "__oflag_00 = in_ECX | 0x80000;" (assignment_expression "__oflag_00 = in_ECX | 0x80000" identifier = (binary_expression "in_ECX | 0x80000" identifier | number_literal)) ;) (expression_statement "uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D);" (assignment_expression "uVar6 = open64(___oflag,__oflag_00,(ulong)in_R8D)" identifier = (call_expression "open64(___oflag,__oflag_00,(ulong)in_R8D)" identifier (argument_list "(___oflag,__oflag_00,(ulong)in_R8D)" ( identifier , identifier , (cast_expression "(ulong)in_R8D" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) ;) (if_statement "if (-1 < (int)uVar6) {\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }" if (parenthesized_expression "(-1 < (int)uVar6)" ( (binary_expression "-1 < (int)uVar6" number_literal < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      pLVar1 = this->lock_;\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }\n      pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n               ._M_impl._M_finish;\n      pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n                ._M_impl._M_start;\n      uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;\n      if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }\n      pOVar10 = pOVar10 + (int)uVar6;\n      pOVar10->is_write = (in_ECX & 3) != 0;\n      pOVar10->name = ___oflag;\n      pOVar10->stack_next = -1;\n      pOVar10->inuse = true;\n      pOVar10->is_on_stack = false;\n      iVar5 = this->current_ + 1;\n      this->current_ = iVar5;\n      if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }\n      if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }\n      if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }\n      return uVar6;\n    }" { (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }" if (parenthesized_expression "(pLVar1 != (Lock *)0x0)" ( (binary_expression "pLVar1 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*pLVar1->lock_->_vptr_Lock_impl[2])();\n      }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) })) (ERROR "pOVar2 = (this->open_descriptors_).\n               super__Vector_base<gold::" (assignment_expression "pOVar2 = (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 "pOVar10 = (this->open_descriptors_).\n                super__Vector_base<gold::" (assignment_expression "pOVar10 = (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 "uVar8 = (long)pOVar2 - (long)pOVar10 >> 4;" (assignment_expression "uVar8 = (long)pOVar2 - (long)pOVar10 >> 4" identifier = (binary_expression "(long)pOVar2 - (long)pOVar10 >> 4" (binary_expression "(long)pOVar2 - (long)pOVar10" (cast_expression "(long)pOVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pOVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) >> number_literal)) ;) (if_statement "if (uVar8 <= (ulong)(long)(int)uVar6) {\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }" if (parenthesized_expression "(uVar8 <= (ulong)(long)(int)uVar6)" ( (binary_expression "uVar8 <= (ulong)(long)(int)uVar6" identifier <= (cast_expression "(ulong)(long)(int)uVar6" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)(int)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)))) )) (compound_statement "{\n        uVar11 = (ulong)(int)(uVar6 + 0x40);\n        if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }\n      }" { (expression_statement "uVar11 = (ulong)(int)(uVar6 + 0x40);" (assignment_expression "uVar11 = (ulong)(int)(uVar6 + 0x40)" identifier = (call_expression "(ulong)(int)(uVar6 + 0x40)" (call_expression "(ulong)(int)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(int)" ( identifier ))) (argument_list "(uVar6 + 0x40)" ( (binary_expression "uVar6 + 0x40" identifier + number_literal) )))) ;) (if_statement "if (uVar8 < uVar11) {\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }" if (parenthesized_expression "(uVar8 < uVar11)" ( (binary_expression "uVar8 < uVar11" identifier < identifier) )) (compound_statement "{\n                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */\n          std::\n          vector<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ::_M_default_append(&this->open_descriptors_,uVar11 - uVar8);\n          pOVar10 = (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_,uVar11 - uVar8);" 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_,uVar11 - uVar8);" 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_,uVar11 - uVar8);" statement_identifier (ERROR "::Open_descriptor>_>\n          :" : : (binary_expression "Open_descriptor>_" identifier > identifier) > :) : (expression_statement "_M_default_append(&this->open_descriptors_,uVar11 - uVar8);" (call_expression "_M_default_append(&this->open_descriptors_,uVar11 - uVar8)" identifier (argument_list "(&this->open_descriptors_,uVar11 - uVar8)" ( (pointer_expression "&this->open_descriptors_" & (field_expression "this->open_descriptors_" identifier -> field_identifier)) , (binary_expression "uVar11 - uVar8" identifier - identifier) ))) ;)))) (ERROR "pOVar10 = (this->open_descriptors_).\n                    super__Vector_base<gold::" (assignment_expression "pOVar10 = (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 ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }" else (if_statement "if ((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)) {\n          (this->open_descriptors_).\n          super__Vector_base<gold::Descriptors::Open_descriptor,_std::allocator<gold::Descriptors::Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;\n        }" if (parenthesized_expression "((uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11))" ( (binary_expression "(uVar11 < uVar8) && (pOVar2 != pOVar10 + uVar11)" (parenthesized_expression "(uVar11 < uVar8)" ( (binary_expression "uVar11 < uVar8" identifier < identifier) )) && (parenthesized_expression "(pOVar2 != pOVar10 + uVar11)" ( (binary_expression "pOVar2 != pOVar10 + uVar11" identifier != (binary_expression "pOVar10 + uVar11" 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 = pOVar10 + uVar11;\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 = pOVar10 + uVar11;" 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 = pOVar10 + uVar11;" statement_identifier : (ERROR ":" :) (expression_statement "Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11;" (assignment_expression "Open_descriptor>_>\n          ._M_impl._M_finish = pOVar10 + uVar11" (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 "pOVar10 + uVar11" identifier + identifier)) ;))) })))) })) (expression_statement "pOVar10 = pOVar10 + (int)uVar6;" (assignment_expression "pOVar10 = pOVar10 + (int)uVar6" identifier = (binary_expression "pOVar10 + (int)uVar6" identifier + (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pOVar10->is_write = (in_ECX & 3) != 0;" (assignment_expression "pOVar10->is_write = (in_ECX & 3) != 0" (field_expression "pOVar10->is_write" identifier -> field_identifier) = (binary_expression "(in_ECX & 3) != 0" (parenthesized_expression "(in_ECX & 3)" ( (binary_expression "in_ECX & 3" identifier & number_literal) )) != number_literal)) ;) (expression_statement "pOVar10->name = ___oflag;" (assignment_expression "pOVar10->name = ___oflag" (field_expression "pOVar10->name" identifier -> field_identifier) = identifier) ;) (expression_statement "pOVar10->stack_next = -1;" (assignment_expression "pOVar10->stack_next = -1" (field_expression "pOVar10->stack_next" identifier -> field_identifier) = number_literal) ;) (expression_statement "pOVar10->inuse = true;" (assignment_expression "pOVar10->inuse = true" (field_expression "pOVar10->inuse" identifier -> field_identifier) = true) ;) (expression_statement "pOVar10->is_on_stack = false;" (assignment_expression "pOVar10->is_on_stack = false" (field_expression "pOVar10->is_on_stack" identifier -> field_identifier) = false) ;) (expression_statement "iVar5 = this->current_ + 1;" (assignment_expression "iVar5 = this->current_ + 1" identifier = (binary_expression "this->current_ + 1" (field_expression "this->current_" identifier -> field_identifier) + number_literal)) ;) (expression_statement "this->current_ = iVar5;" (assignment_expression "this->current_ = iVar5" (field_expression "this->current_" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar5 < this->limit_) {\n        pGVar3 = parameters->options_;\n      }\n      else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }" if (parenthesized_expression "(iVar5 < this->limit_)" ( (binary_expression "iVar5 < this->limit_" identifier < (field_expression "this->limit_" identifier -> field_identifier)) )) (compound_statement "{\n        pGVar3 = parameters->options_;\n      }" { (expression_statement "pGVar3 = parameters->options_;" (assignment_expression "pGVar3 = parameters->options_" identifier = (field_expression "parameters->options_" identifier -> field_identifier)) ;) }) (else_clause "else {\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }" else (compound_statement "{\n        close_some_descriptor(this);\n        pGVar3 = parameters->options_;\n      }" { (expression_statement "close_some_descriptor(this);" (call_expression "close_some_descriptor(this)" identifier (argument_list "(this)" ( identifier ))) ;) (expression_statement "pGVar3 = parameters->options_;" (assignment_expression "pGVar3 = parameters->options_" identifier = (field_expression "parameters->options_" identifier -> field_identifier)) ;) }))) (if_statement "if ((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)) {\n                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }" if (parenthesized_expression "((pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0))" ( (binary_expression "(pGVar3 != (General_options *)0x0) && ((parameters->debug_ & 4) != 0)" (parenthesized_expression "(pGVar3 != (General_options *)0x0)" ( (binary_expression "pGVar3 != (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 00265722 to 00265777 has its CatchHandler @ 002658b7 */\n        Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);\n      }" { comment (labeled_statement "Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag);" (call_expression "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag)" identifier (argument_list "(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,\n                      ___oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , (cast_expression "(ulong)uVar6" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier ))) ;)) })) (if_statement "if (pLVar1 != (Lock *)0x0) {\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }" if (parenthesized_expression "(pLVar1 != (Lock *)0x0)" ( (binary_expression "pLVar1 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*pLVar1->lock_->_vptr_Lock_impl[3])();\n      }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) })) (return_statement "return uVar6;" return identifier ;) })) (expression_statement "piVar7 = __errno_location();" (assignment_expression "piVar7 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar7 - 0x17U) break;" if (parenthesized_expression "(1 < *piVar7 - 0x17U)" ( (binary_expression "1 < *piVar7 - 0x17U" number_literal < (binary_expression "*piVar7 - 0x17U" (pointer_expression "*piVar7" * identifier) - number_literal)) )) (break_statement "break;" break ;)) (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }" if (parenthesized_expression "(pLVar1 != (Lock *)0x0)" ( (binary_expression "pLVar1 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) })) (expression_statement "iVar5 = this->current_ + -0x10;" (assignment_expression "iVar5 = this->current_ + -0x10" identifier = (binary_expression "this->current_ + -0x10" (field_expression "this->current_" identifier -> field_identifier) + number_literal)) ;) (if_statement "if (iVar5 < 8) {\n      iVar5 = 8;\n    }" if (parenthesized_expression "(iVar5 < 8)" ( (binary_expression "iVar5 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar5 = 8;\n    }" { (expression_statement "iVar5 = 8;" (assignment_expression "iVar5 = 8" identifier = number_literal) ;) })) (expression_statement "this->limit_ = iVar5;" (assignment_expression "this->limit_ = iVar5" (field_expression "this->limit_" identifier -> field_identifier) = identifier) ;) comment (expression_statement "bVar4 = close_some_descriptor(this);" (assignment_expression "bVar4 = close_some_descriptor(this)" identifier = (call_expression "close_some_descriptor(this)" identifier (argument_list "(this)" ( identifier )))) ;) (if_statement "if (!bVar4) {\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }" if (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) (compound_statement "{\n      pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */\n      gold_fatal(pcVar9);\n    }" { (expression_statement "pcVar9 = (char *)gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "pcVar9 = (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(pcVar9);" (call_expression "gold_fatal(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier ))) ;) })) (expression_statement "in_ECX = __oflag_00;" (assignment_expression "in_ECX = __oflag_00" identifier = identifier) ;) (if_statement "if (pLVar1 != (Lock *)0x0) {\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }" if (parenthesized_expression "(pLVar1 != (Lock *)0x0)" ( (binary_expression "pLVar1 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) })) })) (if_statement "if ((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))) {\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pcVar9 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    gold_error(pcVar9,___oflag);\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    *piVar7 = 2;\n  }" if (parenthesized_expression "((*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18)))" ( (binary_expression "(*piVar7 == 2) && (-1 < (char)((ulong)__file >> 0x18))" (parenthesized_expression "(*piVar7 == 2)" ( (binary_expression "*piVar7 == 2" (pointer_expression "*piVar7" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < (char)((ulong)__file >> 0x18))" ( (binary_expression "-1 < (char)((ulong)__file >> 0x18)" number_literal < (cast_expression "(char)((ulong)__file >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ulong)__file >> 0x18)" ( (binary_expression "(ulong)__file >> 0x18" (cast_expression "(ulong)__file" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) )))) ))) )) (compound_statement "{\n    pLVar1 = this->lock_;\n    (*pLVar1->lock_->_vptr_Lock_impl[2])();\n    pcVar9 = (char *)gettext("file %s was removed during the link");\n                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */\n    gold_error(pcVar9,___oflag);\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    *piVar7 = 2;\n  }" { (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (expression_statement "pcVar9 = (char *)gettext("file %s was removed during the link");" (assignment_expression "pcVar9 = (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(pcVar9,___oflag);" (call_expression "gold_error(pcVar9,___oflag)" identifier (argument_list "(pcVar9,___oflag)" ( identifier , identifier ))) ;) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (expression_statement "*piVar7 = 2;" (assignment_expression "*piVar7 = 2" (pointer_expression "*piVar7" * identifier) = number_literal) ;) })) (if_statement "if (parameters->options_ == (General_options *)0x0) {\n    return uVar6;\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 uVar6;\n  }" { (return_statement "return uVar6;" return identifier ;) })) (if_statement "if ((parameters->debug_ & 4) == 0) {\n    return uVar6;\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 uVar6;\n  }" { (return_statement "return uVar6;" return identifier ;) })) (labeled_statement "Errors::debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);" statement_identifier : (ERROR ":" :) (expression_statement "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag);" (call_expression "debug(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag)" identifier (argument_list "(parameters->errors_,"Opened new descriptor %d for \"%s\"",(ulong)uVar6,___oflag)" ( (field_expression "parameters->errors_" identifier -> field_identifier) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , (cast_expression "(ulong)uVar6" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier ))) ;)) (return_statement "return uVar6;" return identifier ;) })))
(translation_unit "int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}\n\n" (function_definition "int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" primitive_type (function_declarator "FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" identifier (parameter_list "(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "uint param_5" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "undefined8 *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "uint __oflag;" type_identifier identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (expression_statement "cVar3 = FUN_0019c6f0(param_1 + 1);" (assignment_expression "cVar3 = FUN_0019c6f0(param_1 + 1)" identifier = (call_expression "FUN_0019c6f0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) )))) ;) (if_statement "if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" if (parenthesized_expression "((cVar3 != '\x01') && (-1 < param_2))" ( (binary_expression "(cVar3 != '\x01') && (-1 < param_2)" (parenthesized_expression "(cVar3 != '\x01')" ( (binary_expression "cVar3 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) && (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) ))) )) (compound_statement "{\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" { (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" if (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" { (expression_statement "*(undefined4 *)(param_1 + 9) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 8" (pointer_expression "*(undefined4 *)(param_1 + 9)" * (cast_expression "(undefined4 *)(param_1 + 9)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" if (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) )) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" if (parenthesized_expression "((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2)" ( (binary_expression "(ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2" (call_expression "(ulong)(param_1[6] - param_1[5] >> 4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[6] - param_1[5] >> 4)" ( (binary_expression "param_1[6] - param_1[5] >> 4" (binary_expression "param_1[6] - param_1[5]" (subscript_expression "param_1[6]" identifier [ number_literal ]) - (subscript_expression "param_1[5]" identifier [ number_literal ])) >> number_literal) ))) <= (cast_expression "(ulong)(long)param_2" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" { (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (expression_statement "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);" (assignment_expression "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5])" identifier = (cast_expression "(undefined8 *)((long)param_2 * 0x10 + param_1[5])" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 * 0x10 + param_1[5])" ( (binary_expression "(long)param_2 * 0x10 + param_1[5]" (binary_expression "(long)param_2 * 0x10" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (subscript_expression "param_1[5]" identifier [ number_literal ])) )))) ;) (expression_statement "__s1 = (char *)*puVar9;" (assignment_expression "__s1 = (char *)*puVar9" identifier = (cast_expression "(char *)*puVar9" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar9" * identifier))) ;) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" if (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))" ( (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" (parenthesized_expression "(__s1 == param_3)" ( (binary_expression "__s1 == param_3" identifier == identifier) )) || (parenthesized_expression "((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" ( (parenthesized_expression "(__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))" ( (binary_expression "__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)" (binary_expression "__s1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "(iVar4 = strcmp(__s1,param_3), iVar4 == 0)" ( (comma_expression "iVar4 = strcmp(__s1,param_3), iVar4 == 0" (assignment_expression "iVar4 = strcmp(__s1,param_3)" identifier = (call_expression "strcmp(__s1,param_3)" identifier (argument_list "(__s1,param_3)" ( identifier , identifier )))) , (binary_expression "iVar4 == 0" identifier == number_literal)) ))) )) ))) )) (compound_statement "{\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" { (if_statement "if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" if (parenthesized_expression "(*(char *)((long)puVar9 + 0xc) != '\0')" ( (binary_expression "*(char *)((long)puVar9 + 0xc) != '\0'" (pointer_expression "*(char *)((long)puVar9 + 0xc)" * (cast_expression "(char *)((long)puVar9 + 0xc)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" { (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580)" identifier (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00355580)" ( (string_literal ""../../gold/descriptors.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00355580" & identifier) ))) ;) })) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (if_statement "if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" if (parenthesized_expression "((int)param_1[8] == param_2)" ( (binary_expression "(int)param_1[8] == param_2" (cast_expression "(int)param_1[8]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[8]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" { (expression_statement "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);" (assignment_expression "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1)" (pointer_expression "*(undefined4 *)(param_1 + 8)" * (cast_expression "(undefined4 *)(param_1 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xe)" ( (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) })) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" if (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" ( (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" { (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Reused existing descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return param_2;" return identifier ;) })) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (while_statement "while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" { (expression_statement "__oflag = param_4 | 0x80000;" (assignment_expression "__oflag = param_4 | 0x80000" identifier = (binary_expression "param_4 | 0x80000" identifier | number_literal)) ;) (expression_statement "iVar4 = open64(param_3,__oflag,(ulong)param_5);" (assignment_expression "iVar4 = open64(param_3,__oflag,(ulong)param_5)" identifier = (call_expression "open64(param_3,__oflag,(ulong)param_5)" identifier (argument_list "(param_3,__oflag,(ulong)param_5)" ( identifier , identifier , (cast_expression "(ulong)param_5" ( (type_descriptor "ulong" type_identifier) ) identifier) )))) ;) (if_statement "if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" if (parenthesized_expression "(-1 < iVar4)" ( (binary_expression "-1 < iVar4" number_literal < identifier) )) (compound_statement "{\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "uVar7 = param_1[6] - lVar10 >> 4;" (assignment_expression "uVar7 = param_1[6] - lVar10 >> 4" identifier = (binary_expression "param_1[6] - lVar10 >> 4" (binary_expression "param_1[6] - lVar10" (subscript_expression "param_1[6]" identifier [ number_literal ]) - identifier) >> number_literal)) ;) (if_statement "if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" if (parenthesized_expression "(uVar7 <= (ulong)(long)iVar4)" ( (binary_expression "uVar7 <= (ulong)(long)iVar4" identifier <= (cast_expression "(ulong)(long)iVar4" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(long)iVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" { (expression_statement "uVar11 = (ulong)(iVar4 + 0x40);" (assignment_expression "uVar11 = (ulong)(iVar4 + 0x40)" identifier = (call_expression "(ulong)(iVar4 + 0x40)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar4 + 0x40)" ( (binary_expression "iVar4 + 0x40" identifier + number_literal) )))) ;) (if_statement "if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" if (parenthesized_expression "(uVar7 < uVar11)" ( (binary_expression "uVar7 < uVar11" identifier < identifier) )) (compound_statement "{\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }" { (expression_statement "FUN_002658f0(param_1 + 5,uVar11 - uVar7);" (call_expression "FUN_002658f0(param_1 + 5,uVar11 - uVar7)" identifier (argument_list "(param_1 + 5,uVar11 - uVar7)" ( (binary_expression "param_1 + 5" identifier + number_literal) , (binary_expression "uVar11 - uVar7" identifier - identifier) ))) ;) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) }) (else_clause "else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" else (if_statement "if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" if (parenthesized_expression "((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1))" ( (binary_expression "(uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" (parenthesized_expression "(uVar11 < uVar7)" ( (binary_expression "uVar11 < uVar7" identifier < identifier) )) && (parenthesized_expression "(lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" ( (comma_expression "lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1" (assignment_expression "lVar1 = lVar10 + uVar11 * 0x10" identifier = (binary_expression "lVar10 + uVar11 * 0x10" identifier + (binary_expression "uVar11 * 0x10" identifier * number_literal))) , (binary_expression "param_1[6] != lVar1" (subscript_expression "param_1[6]" identifier [ number_literal ]) != identifier)) ))) )) (compound_statement "{\n          param_1[6] = lVar1;\n        }" { (expression_statement "param_1[6] = lVar1;" (assignment_expression "param_1[6] = lVar1" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) })))) })) (expression_statement "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);" (assignment_expression "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10)" identifier = (cast_expression "(undefined8 *)(lVar10 + (long)iVar4 * 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + (long)iVar4 * 0x10)" ( (binary_expression "lVar10 + (long)iVar4 * 0x10" identifier + (binary_expression "(long)iVar4 * 0x10" (cast_expression "(long)iVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) ;) (expression_statement "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((long)puVar9 + 0xd)" * (cast_expression "(bool *)((long)puVar9 + 0xd)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xd)" ( (binary_expression "(long)puVar9 + 0xd" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) 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 "*puVar9 = param_3;" (assignment_expression "*puVar9 = param_3" (pointer_expression "*puVar9" * identifier) = identifier) ;) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" * (cast_expression "(undefined4 *)(puVar9 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar9 + 1)" ( (binary_expression "puVar9 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xc)" ( (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" * (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + 0xe)" ( (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar5 = *(int *)((long)param_1 + 0x44) + 1;" (assignment_expression "iVar5 = *(int *)((long)param_1 + 0x44) + 1" identifier = (binary_expression "*(int *)((long)param_1 + 0x44) + 1" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal)) ;) (expression_statement "*(int *)((long)param_1 + 0x44) = iVar5;" (assignment_expression "*(int *)((long)param_1 + 0x44) = iVar5" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" if (parenthesized_expression "(iVar5 < (int)param_1[9])" ( (binary_expression "iVar5 < (int)param_1[9]" identifier < (cast_expression "(int)param_1[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) )) (compound_statement "{\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" { (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" else (compound_statement "{\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" { (expression_statement "FUN_002651e0(param_1);" (call_expression "FUN_002651e0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) }))) (if_statement "if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" if (parenthesized_expression "((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0))" ( (binary_expression "(lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" (parenthesized_expression "(lVar10 != 0)" ( (binary_expression "lVar10 != 0" identifier != number_literal) )) && (parenthesized_expression "((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" ( (binary_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0" (parenthesized_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4)" ( (binary_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4" (pointer_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24)" * (cast_expression "(byte *)((long)PTR_DAT_003f85c0 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)PTR_DAT_003f85c0 + 0x24)" ( (binary_expression "(long)PTR_DAT_003f85c0 + 0x24" (cast_expression "(long)PTR_DAT_003f85c0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" { (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) })) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (return_statement "return iVar4;" return identifier ;) })) (expression_statement "piVar6 = __errno_location();" (assignment_expression "piVar6 = __errno_location()" identifier = (call_expression "__errno_location()" identifier (argument_list "()" ( )))) ;) (if_statement "if (1 < *piVar6 - 0x17U) break;" if (parenthesized_expression "(1 < *piVar6 - 0x17U)" ( (binary_expression "1 < *piVar6 - 0x17U" number_literal < (binary_expression "*piVar6 - 0x17U" (pointer_expression "*piVar6" * identifier) - number_literal)) )) (break_statement "break;" break ;)) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10" identifier = (binary_expression "*(int *)((long)param_1 + 0x44) + -0x10" (pointer_expression "*(int *)((long)param_1 + 0x44)" * (cast_expression "(int *)((long)param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x44)" ( (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal)) ;) (if_statement "if (iVar4 < 8) {\n      iVar4 = 8;\n    }" if (parenthesized_expression "(iVar4 < 8)" ( (binary_expression "iVar4 < 8" identifier < number_literal) )) (compound_statement "{\n      iVar4 = 8;\n    }" { (expression_statement "iVar4 = 8;" (assignment_expression "iVar4 = 8" identifier = number_literal) ;) })) (expression_statement "*(int *)(param_1 + 9) = iVar4;" (assignment_expression "*(int *)(param_1 + 9) = iVar4" (pointer_expression "*(int *)(param_1 + 9)" * (cast_expression "(int *)(param_1 + 9)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 9)" ( (binary_expression "param_1 + 9" identifier + number_literal) )))) = identifier) ;) (expression_statement "cVar3 = FUN_002651e0(param_1);" (assignment_expression "cVar3 = FUN_002651e0(param_1)" identifier = (call_expression "FUN_002651e0(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }" if (parenthesized_expression "(cVar3 == '\0')" ( (binary_expression "cVar3 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }" { (expression_statement "uVar8 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar8 = 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_00191730(uVar8);" (call_expression "FUN_00191730(uVar8)" identifier (argument_list "(uVar8)" ( identifier ))) ;) })) (expression_statement "param_4 = __oflag;" (assignment_expression "param_4 = __oflag" identifier = identifier) ;) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" if (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" ( (binary_expression "puVar2 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" { (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) })) (if_statement "if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" if (parenthesized_expression "((*piVar6 == 2) && (-1 < param_2))" ( (binary_expression "(*piVar6 == 2) && (-1 < param_2)" (parenthesized_expression "(*piVar6 == 2)" ( (binary_expression "*piVar6 == 2" (pointer_expression "*piVar6" * identifier) == number_literal) )) && (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) ))) )) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" { (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x10)" ( (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "uVar8 = gettext("file %s was removed during the link");" (assignment_expression "uVar8 = 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_00191870(uVar8,param_3);" (call_expression "FUN_00191870(uVar8,param_3)" identifier (argument_list "(uVar8,param_3)" ( identifier , identifier ))) ;) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar2 + 0x18)" ( (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" * (cast_expression "(long *)*puVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "*piVar6 = 2;" (assignment_expression "*piVar6 = 2" (pointer_expression "*piVar6" * identifier) = number_literal) ;) })) (if_statement "if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }" if (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (if_statement "if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }" if (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) == 0)" ( (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) == 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" ( (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" identifier [ number_literal ]) & number_literal) )) == number_literal) )) (compound_statement "{\n    return iVar4;\n  }" { (return_statement "return iVar4;" return identifier ;) })) (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" identifier (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" ( (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" * (cast_expression "(undefined8 *)PTR_DAT_003f85c0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (string_literal ""Opened new descriptor %d for \"%s\""" " string_content escape_sequence string_content escape_sequence ") , identifier , identifier ))) ;) (return_statement "return iVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) 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 < IDENT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < 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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - (subscript_expression IDENT [ LIT ])) >> LIT) ))) <= (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) + (subscript_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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) })) (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 , (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (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 - IDENT) ))) ;) (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != 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 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 (sized_type_specifier long)) ) 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 (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) 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 (sized_type_specifier long)) ) IDENT) + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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 { (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) })) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression (pointer_expression * IDENT) - LIT)) )) (break_statement break ;)) (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) && (parenthesized_expression ( (binary_expression LIT < 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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (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 (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (string_literal " string_content escape_sequence string_content escape_sequence ") , IDENT , IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "int FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)\n\n{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" (primitive_type "int") (function_declarator "FUN_002654d0(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" (identifier "FUN_002654d0") (parameter_list "(long *param_1,int param_2,char *param_3,uint param_4,uint param_5)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (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 "uint param_5" (type_identifier "uint") (identifier "param_5")) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 *puVar2;\n  char *__s1;\n  char cVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  ulong uVar7;\n  undefined8 uVar8;\n  undefined8 *puVar9;\n  long lVar10;\n  uint __oflag;\n  ulong uVar11;\n  \n  cVar3 = FUN_0019c6f0(param_1 + 1);\n  if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }\n  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }\n  if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }\n  while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }\n  if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }\n  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }\n  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }\n  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);\n  return iVar4;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 *puVar2;" (type_identifier "undefined8") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "char *__s1;" (primitive_type "char") (pointer_declarator "*__s1" (* "*") (identifier "__s1")) (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "undefined8 uVar8;" (type_identifier "undefined8") (identifier "uVar8") (; ";")) (declaration "undefined8 *puVar9;" (type_identifier "undefined8") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "uint __oflag;" (type_identifier "uint") (identifier "__oflag") (; ";")) (declaration "ulong uVar11;" (type_identifier "ulong") (identifier "uVar11") (; ";")) (expression_statement "cVar3 = FUN_0019c6f0(param_1 + 1);" (assignment_expression "cVar3 = FUN_0019c6f0(param_1 + 1)" (identifier "cVar3") (= "=") (call_expression "FUN_0019c6f0(param_1 + 1)" (identifier "FUN_0019c6f0") (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")")))) (; ";")) (if_statement "if ((cVar3 != '\x01') && (-1 < param_2)) {\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" (if "if") (parenthesized_expression "((cVar3 != '\x01') && (-1 < param_2))" (( "(") (binary_expression "(cVar3 != '\x01') && (-1 < param_2)" (parenthesized_expression "(cVar3 != '\x01')" (( "(") (binary_expression "cVar3 != '\x01'" (identifier "cVar3") (!= "!=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(-1 < param_2)" (( "(") (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);\n  }" ({ "{") (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580)" (identifier "FUN_00199900") (argument_list "("../../gold/descriptors.cc",0x53,&DAT_00355580)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x53") (, ",") (pointer_expression "&DAT_00355580" (& "&") (identifier "DAT_00355580")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" (if "if") (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" (( "(") (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" (( "(") (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" (( "(") (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" (identifier "PTR_DAT_003f85c0") ([ "[") (number_literal "0x24") (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    *(undefined4 *)(param_1 + 9) = 8;\n  }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 9) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 9) = 8" (pointer_expression "*(undefined4 *)(param_1 + 9)" (* "*") (cast_expression "(undefined4 *)(param_1 + 9)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")")))) (= "=") (number_literal "8")) (; ";")) (} "}"))) (if_statement "if (-1 < param_2) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" (if "if") (parenthesized_expression "(-1 < param_2)" (( "(") (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }\n    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);\n    __s1 = (char *)*puVar9;\n    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n  }" ({ "{") (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x10)" (( "(") (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" (if "if") (parenthesized_expression "((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2)" (( "(") (binary_expression "(ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2" (call_expression "(ulong)(param_1[6] - param_1[5] >> 4)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[6] - param_1[5] >> 4)" (( "(") (binary_expression "param_1[6] - param_1[5] >> 4" (binary_expression "param_1[6] - param_1[5]" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (- "-") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (>> ">>") (number_literal "4")) () ")"))) (<= "<=") (cast_expression "(ulong)(long)param_2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")))) () ")")) (compound_statement "{\n                    \n                    \n      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);\n    }" ({ "{") (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580)" (identifier "FUN_00199900") (argument_list "("../../gold/descriptors.cc",0x5d,&DAT_00355580)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x5d") (, ",") (pointer_expression "&DAT_00355580" (& "&") (identifier "DAT_00355580")) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);" (assignment_expression "puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5])" (identifier "puVar9") (= "=") (cast_expression "(undefined8 *)((long)param_2 * 0x10 + param_1[5])" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 * 0x10 + param_1[5])" (( "(") (binary_expression "(long)param_2 * 0x10 + param_1[5]" (binary_expression "(long)param_2 * 0x10" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (* "*") (number_literal "0x10")) (+ "+") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) () ")")))) (; ";")) (expression_statement "__s1 = (char *)*puVar9;" (assignment_expression "__s1 = (char *)*puVar9" (identifier "__s1") (= "=") (cast_expression "(char *)*puVar9" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar9" (* "*") (identifier "puVar9")))) (; ";")) (if_statement "if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))\n    {\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" (if "if") (parenthesized_expression "((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))" (( "(") (binary_expression "(__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" (parenthesized_expression "(__s1 == param_3)" (( "(") (binary_expression "__s1 == param_3" (identifier "__s1") (== "==") (identifier "param_3")) () ")")) (|| "||") (parenthesized_expression "((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0)))" (( "(") (parenthesized_expression "(__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))" (( "(") (binary_expression "__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 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 "(iVar4 = strcmp(__s1,param_3), iVar4 == 0)" (( "(") (comma_expression "iVar4 = strcmp(__s1,param_3), iVar4 == 0" (assignment_expression "iVar4 = strcmp(__s1,param_3)" (identifier "iVar4") (= "=") (call_expression "strcmp(__s1,param_3)" (identifier "strcmp") (argument_list "(__s1,param_3)" (( "(") (identifier "__s1") (, ",") (identifier "param_3") () ")")))) (, ",") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0"))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }\n      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n      return param_2;\n    }" ({ "{") (if_statement "if (*(char *)((long)puVar9 + 0xc) != '\0') {\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" (if "if") (parenthesized_expression "(*(char *)((long)puVar9 + 0xc) != '\0')" (( "(") (binary_expression "*(char *)((long)puVar9 + 0xc) != '\0'" (pointer_expression "*(char *)((long)puVar9 + 0xc)" (* "*") (cast_expression "(char *)((long)puVar9 + 0xc)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xc)" (( "(") (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                    \n                    \n        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);\n      }" ({ "{") (expression_statement "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);" (call_expression "FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580)" (identifier "FUN_00199900") (argument_list "("../../gold/descriptors.cc",0x62,&DAT_00355580)" (( "(") (string_literal ""../../gold/descriptors.cc"" (" """) (string_content "../../gold/descriptors.cc") (" """)) (, ",") (number_literal "0x62") (, ",") (pointer_expression "&DAT_00355580" (& "&") (identifier "DAT_00355580")) () ")"))) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" (* "*") (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xc)" (( "(") (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if ((int)param_1[8] == param_2) {\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" (if "if") (parenthesized_expression "((int)param_1[8] == param_2)" (( "(") (binary_expression "(int)param_1[8] == param_2" (cast_expression "(int)param_1[8]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))) (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);\n        *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n        *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);" (assignment_expression "*(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1)" (pointer_expression "*(undefined4 *)(param_1 + 8)" (* "*") (cast_expression "(undefined4 *)(param_1 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(puVar9 + 1)" (* "*") (cast_expression "(undefined4 *)(puVar9 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 1)" (( "(") (binary_expression "puVar9 + 1" (identifier "puVar9") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" (* "*") (cast_expression "(undefined4 *)(puVar9 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 1)" (( "(") (binary_expression "puVar9 + 1" (identifier "puVar9") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" (* "*") (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xe)" (( "(") (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xe")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" (if "if") (parenthesized_expression "((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0))" (( "(") (binary_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)" (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) != 0)" (( "(") (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) != 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" (( "(") (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" (identifier "PTR_DAT_003f85c0") ([ "[") (number_literal "0x24") (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n        return param_2;\n      }" ({ "{") (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" (identifier "FUN_00191650") (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",\n                     param_2,param_3)" (( "(") (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" (* "*") (cast_expression "(undefined8 *)PTR_DAT_003f85c0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_003f85c0"))) (, ",") (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 **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (while_statement "while( true ) {\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    __oflag = param_4 | 0x80000;\n    iVar4 = open64(param_3,__oflag,(ulong)param_5);\n    if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }\n    piVar6 = __errno_location();\n    if (1 < *piVar6 - 0x17U) break;\n    puVar2 = (undefined8 *)*param_1;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }\n    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;\n    if (iVar4 < 8) {\n      iVar4 = 8;\n    }\n    *(int *)(param_1 + 9) = iVar4;\n                    \n    cVar3 = FUN_002651e0(param_1);\n    if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }\n    param_4 = __oflag;\n    if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }\n  }" ({ "{") (expression_statement "__oflag = param_4 | 0x80000;" (assignment_expression "__oflag = param_4 | 0x80000" (identifier "__oflag") (= "=") (binary_expression "param_4 | 0x80000" (identifier "param_4") (| "|") (number_literal "0x80000"))) (; ";")) (expression_statement "iVar4 = open64(param_3,__oflag,(ulong)param_5);" (assignment_expression "iVar4 = open64(param_3,__oflag,(ulong)param_5)" (identifier "iVar4") (= "=") (call_expression "open64(param_3,__oflag,(ulong)param_5)" (identifier "open64") (argument_list "(param_3,__oflag,(ulong)param_5)" (( "(") (identifier "param_3") (, ",") (identifier "__oflag") (, ",") (cast_expression "(ulong)param_5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_5")) () ")")))) (; ";")) (if_statement "if (-1 < iVar4) {\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" (if "if") (parenthesized_expression "(-1 < iVar4)" (( "(") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4")) () ")")) (compound_statement "{\n      puVar2 = (undefined8 *)*param_1;\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }\n      lVar10 = param_1[5];\n      uVar7 = param_1[6] - lVar10 >> 4;\n      if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }\n      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);\n      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;\n      *puVar9 = param_3;\n      *(undefined4 *)(puVar9 + 1) = 0xffffffff;\n      *(undefined1 *)((long)puVar9 + 0xc) = 1;\n      *(undefined1 *)((long)puVar9 + 0xe) = 0;\n      iVar5 = *(int *)((long)param_1 + 0x44) + 1;\n      *(int *)((long)param_1 + 0x44) = iVar5;\n      if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }\n      if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }\n      return iVar4;\n    }" ({ "{") (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x10))();\n      }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x10)" (( "(") (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" (identifier "lVar10") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "uVar7 = param_1[6] - lVar10 >> 4;" (assignment_expression "uVar7 = param_1[6] - lVar10 >> 4" (identifier "uVar7") (= "=") (binary_expression "param_1[6] - lVar10 >> 4" (binary_expression "param_1[6] - lVar10" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (- "-") (identifier "lVar10")) (>> ">>") (number_literal "4"))) (; ";")) (if_statement "if (uVar7 <= (ulong)(long)iVar4) {\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" (if "if") (parenthesized_expression "(uVar7 <= (ulong)(long)iVar4)" (( "(") (binary_expression "uVar7 <= (ulong)(long)iVar4" (identifier "uVar7") (<= "<=") (cast_expression "(ulong)(long)iVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (cast_expression "(long)iVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar4")))) () ")")) (compound_statement "{\n        uVar11 = (ulong)(iVar4 + 0x40);\n        if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }\n      }" ({ "{") (expression_statement "uVar11 = (ulong)(iVar4 + 0x40);" (assignment_expression "uVar11 = (ulong)(iVar4 + 0x40)" (identifier "uVar11") (= "=") (call_expression "(ulong)(iVar4 + 0x40)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(iVar4 + 0x40)" (( "(") (binary_expression "iVar4 + 0x40" (identifier "iVar4") (+ "+") (number_literal "0x40")) () ")")))) (; ";")) (if_statement "if (uVar7 < uVar11) {\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }\n        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" (if "if") (parenthesized_expression "(uVar7 < uVar11)" (( "(") (binary_expression "uVar7 < uVar11" (identifier "uVar7") (< "<") (identifier "uVar11")) () ")")) (compound_statement "{\n                    \n          FUN_002658f0(param_1 + 5,uVar11 - uVar7);\n          lVar10 = param_1[5];\n        }" ({ "{") (expression_statement "FUN_002658f0(param_1 + 5,uVar11 - uVar7);" (call_expression "FUN_002658f0(param_1 + 5,uVar11 - uVar7)" (identifier "FUN_002658f0") (argument_list "(param_1 + 5,uVar11 - uVar7)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) (, ",") (binary_expression "uVar11 - uVar7" (identifier "uVar11") (- "-") (identifier "uVar7")) () ")"))) (; ";")) (expression_statement "lVar10 = param_1[5];" (assignment_expression "lVar10 = param_1[5]" (identifier "lVar10") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (} "}")) (else_clause "else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" (else "else") (if_statement "if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {\n          param_1[6] = lVar1;\n        }" (if "if") (parenthesized_expression "((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1))" (( "(") (binary_expression "(uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" (parenthesized_expression "(uVar11 < uVar7)" (( "(") (binary_expression "uVar11 < uVar7" (identifier "uVar11") (< "<") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "(lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)" (( "(") (comma_expression "lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1" (assignment_expression "lVar1 = lVar10 + uVar11 * 0x10" (identifier "lVar1") (= "=") (binary_expression "lVar10 + uVar11 * 0x10" (identifier "lVar10") (+ "+") (binary_expression "uVar11 * 0x10" (identifier "uVar11") (* "*") (number_literal "0x10")))) (, ",") (binary_expression "param_1[6] != lVar1" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (!= "!=") (identifier "lVar1"))) () ")"))) () ")")) (compound_statement "{\n          param_1[6] = lVar1;\n        }" ({ "{") (expression_statement "param_1[6] = lVar1;" (assignment_expression "param_1[6] = lVar1" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "lVar1")) (; ";")) (} "}"))))) (} "}"))) (expression_statement "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);" (assignment_expression "puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10)" (identifier "puVar9") (= "=") (cast_expression "(undefined8 *)(lVar10 + (long)iVar4 * 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + (long)iVar4 * 0x10)" (( "(") (binary_expression "lVar10 + (long)iVar4 * 0x10" (identifier "lVar10") (+ "+") (binary_expression "(long)iVar4 * 0x10" (cast_expression "(long)iVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar4")) (* "*") (number_literal "0x10"))) () ")")))) (; ";")) (expression_statement "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;" (assignment_expression "*(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0" (pointer_expression "*(bool *)((long)puVar9 + 0xd)" (* "*") (cast_expression "(bool *)((long)puVar9 + 0xd)" (( "(") (type_descriptor "bool *" (primitive_type "bool") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xd)" (( "(") (binary_expression "(long)puVar9 + 0xd" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xd")) () ")")))) (= "=") (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 "*puVar9 = param_3;" (assignment_expression "*puVar9 = param_3" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "*(undefined4 *)(puVar9 + 1) = 0xffffffff;" (assignment_expression "*(undefined4 *)(puVar9 + 1) = 0xffffffff" (pointer_expression "*(undefined4 *)(puVar9 + 1)" (* "*") (cast_expression "(undefined4 *)(puVar9 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar9 + 1)" (( "(") (binary_expression "puVar9 + 1" (identifier "puVar9") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)((long)puVar9 + 0xc) = 1;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xc) = 1" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xc)" (* "*") (cast_expression "(undefined1 *)((long)puVar9 + 0xc)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xc)" (( "(") (binary_expression "(long)puVar9 + 0xc" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined1 *)((long)puVar9 + 0xe) = 0;" (assignment_expression "*(undefined1 *)((long)puVar9 + 0xe) = 0" (pointer_expression "*(undefined1 *)((long)puVar9 + 0xe)" (* "*") (cast_expression "(undefined1 *)((long)puVar9 + 0xe)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + 0xe)" (( "(") (binary_expression "(long)puVar9 + 0xe" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (number_literal "0xe")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar5 = *(int *)((long)param_1 + 0x44) + 1;" (assignment_expression "iVar5 = *(int *)((long)param_1 + 0x44) + 1" (identifier "iVar5") (= "=") (binary_expression "*(int *)((long)param_1 + 0x44) + 1" (pointer_expression "*(int *)((long)param_1 + 0x44)" (* "*") (cast_expression "(int *)((long)param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x44)" (( "(") (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x44")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)((long)param_1 + 0x44) = iVar5;" (assignment_expression "*(int *)((long)param_1 + 0x44) = iVar5" (pointer_expression "*(int *)((long)param_1 + 0x44)" (* "*") (cast_expression "(int *)((long)param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x44)" (( "(") (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (if_statement "if (iVar5 < (int)param_1[9]) {\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }\n      else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" (if "if") (parenthesized_expression "(iVar5 < (int)param_1[9])" (( "(") (binary_expression "iVar5 < (int)param_1[9]" (identifier "iVar5") (< "<") (cast_expression "(int)param_1[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")))) () ")")) (compound_statement "{\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" ({ "{") (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" (identifier "lVar10") (= "=") (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" (else "else") (compound_statement "{\n        FUN_002651e0(param_1);\n        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n      }" ({ "{") (expression_statement "FUN_002651e0(param_1);" (call_expression "FUN_002651e0(param_1)" (identifier "FUN_002651e0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10)" (identifier "lVar10") (= "=") (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}")))) (if_statement "if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" (if "if") (parenthesized_expression "((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0))" (( "(") (binary_expression "(lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" (parenthesized_expression "(lVar10 != 0)" (( "(") (binary_expression "lVar10 != 0" (identifier "lVar10") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)" (( "(") (binary_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0" (parenthesized_expression "(*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4)" (( "(") (binary_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4" (pointer_expression "*(byte *)((long)PTR_DAT_003f85c0 + 0x24)" (* "*") (cast_expression "(byte *)((long)PTR_DAT_003f85c0 + 0x24)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)PTR_DAT_003f85c0 + 0x24)" (( "(") (binary_expression "(long)PTR_DAT_003f85c0 + 0x24" (cast_expression "(long)PTR_DAT_003f85c0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "PTR_DAT_003f85c0")) (+ "+") (number_literal "0x24")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n                    \n        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);\n      }" ({ "{") (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" (identifier "FUN_00191650") (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,\n                     param_3)" (( "(") (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" (* "*") (cast_expression "(undefined8 *)PTR_DAT_003f85c0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_003f85c0"))) (, ",") (string_literal ""Opened new descriptor %d for \"%s\""" (" """) (string_content "Opened new descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (" """)) (, ",") (identifier "iVar4") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        (**(code **)(*(long *)*puVar2 + 0x18))();\n      }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (expression_statement "piVar6 = __errno_location();" (assignment_expression "piVar6 = __errno_location()" (identifier "piVar6") (= "=") (call_expression "__errno_location()" (identifier "__errno_location") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (1 < *piVar6 - 0x17U) break;" (if "if") (parenthesized_expression "(1 < *piVar6 - 0x17U)" (( "(") (binary_expression "1 < *piVar6 - 0x17U" (number_literal "1") (< "<") (binary_expression "*piVar6 - 0x17U" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (- "-") (number_literal "0x17U"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x10))();\n    }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x10)" (( "(") (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x44) + -0x10" (identifier "iVar4") (= "=") (binary_expression "*(int *)((long)param_1 + 0x44) + -0x10" (pointer_expression "*(int *)((long)param_1 + 0x44)" (* "*") (cast_expression "(int *)((long)param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x44)" (( "(") (binary_expression "(long)param_1 + 0x44" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x44")) () ")")))) (+ "+") (number_literal "-0x10"))) (; ";")) (if_statement "if (iVar4 < 8) {\n      iVar4 = 8;\n    }" (if "if") (parenthesized_expression "(iVar4 < 8)" (( "(") (binary_expression "iVar4 < 8" (identifier "iVar4") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n      iVar4 = 8;\n    }" ({ "{") (expression_statement "iVar4 = 8;" (assignment_expression "iVar4 = 8" (identifier "iVar4") (= "=") (number_literal "8")) (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + 9) = iVar4;" (assignment_expression "*(int *)(param_1 + 9) = iVar4" (pointer_expression "*(int *)(param_1 + 9)" (* "*") (cast_expression "(int *)(param_1 + 9)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 9)" (( "(") (binary_expression "param_1 + 9" (identifier "param_1") (+ "+") (number_literal "9")) () ")")))) (= "=") (identifier "iVar4")) (; ";")) (expression_statement "cVar3 = FUN_002651e0(param_1);" (assignment_expression "cVar3 = FUN_002651e0(param_1)" (identifier "cVar3") (= "=") (call_expression "FUN_002651e0(param_1)" (identifier "FUN_002651e0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (cVar3 == '\0') {\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }" (if "if") (parenthesized_expression "(cVar3 == '\0')" (( "(") (binary_expression "cVar3 == '\0'" (identifier "cVar3") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar8 = gettext("out of file descriptors and couldn\'t close any");\n                    \n                    \n      FUN_00191730(uVar8);\n    }" ({ "{") (expression_statement "uVar8 = gettext("out of file descriptors and couldn\'t close any");" (assignment_expression "uVar8 = gettext("out of file descriptors and couldn\'t close any")" (identifier "uVar8") (= "=") (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_00191730(uVar8);" (call_expression "FUN_00191730(uVar8)" (identifier "FUN_00191730") (argument_list "(uVar8)" (( "(") (identifier "uVar8") () ")"))) (; ";")) (} "}"))) (expression_statement "param_4 = __oflag;" (assignment_expression "param_4 = __oflag" (identifier "param_4") (= "=") (identifier "__oflag")) (; ";")) (if_statement "if (puVar2 != (undefined8 *)0x0) {\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" (if "if") (parenthesized_expression "(puVar2 != (undefined8 *)0x0)" (( "(") (binary_expression "puVar2 != (undefined8 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(*(long *)*puVar2 + 0x18))();\n    }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if ((*piVar6 == 2) && (-1 < param_2)) {\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" (if "if") (parenthesized_expression "((*piVar6 == 2) && (-1 < param_2))" (( "(") (binary_expression "(*piVar6 == 2) && (-1 < param_2)" (parenthesized_expression "(*piVar6 == 2)" (( "(") (binary_expression "*piVar6 == 2" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (== "==") (number_literal "2")) () ")")) (&& "&&") (parenthesized_expression "(-1 < param_2)" (( "(") (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) () ")"))) () ")")) (compound_statement "{\n    puVar2 = (undefined8 *)*param_1;\n    (**(code **)(*(long *)*puVar2 + 0x10))();\n    uVar8 = gettext("file %s was removed during the link");\n                    \n    FUN_00191870(uVar8,param_3);\n    (**(code **)(*(long *)*puVar2 + 0x18))();\n    *piVar6 = 2;\n  }" ({ "{") (expression_statement "puVar2 = (undefined8 *)*param_1;" (assignment_expression "puVar2 = (undefined8 *)*param_1" (identifier "puVar2") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x10)" (( "(") (binary_expression "*(long *)*puVar2 + 0x10" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar8 = gettext("file %s was removed during the link");" (assignment_expression "uVar8 = gettext("file %s was removed during the link")" (identifier "uVar8") (= "=") (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_00191870(uVar8,param_3);" (call_expression "FUN_00191870(uVar8,param_3)" (identifier "FUN_00191870") (argument_list "(uVar8,param_3)" (( "(") (identifier "uVar8") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "(**(code **)(*(long *)*puVar2 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar2 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar2 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar2 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar2 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar2 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar2 + 0x18)" (( "(") (binary_expression "*(long *)*puVar2 + 0x18" (pointer_expression "*(long *)*puVar2" (* "*") (cast_expression "(long *)*puVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*piVar6 = 2;" (assignment_expression "*piVar6 = 2" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (= "=") (number_literal "2")) (; ";")) (} "}"))) (if_statement "if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {\n    return iVar4;\n  }" (if "if") (parenthesized_expression "(*(long *)(PTR_DAT_003f85c0 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_003f85c0 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return iVar4;\n  }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (if_statement "if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {\n    return iVar4;\n  }" (if "if") (parenthesized_expression "((PTR_DAT_003f85c0[0x24] & 4) == 0)" (( "(") (binary_expression "(PTR_DAT_003f85c0[0x24] & 4) == 0" (parenthesized_expression "(PTR_DAT_003f85c0[0x24] & 4)" (( "(") (binary_expression "PTR_DAT_003f85c0[0x24] & 4" (subscript_expression "PTR_DAT_003f85c0[0x24]" (identifier "PTR_DAT_003f85c0") ([ "[") (number_literal "0x24") (] "]")) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return iVar4;\n  }" ({ "{") (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}"))) (expression_statement "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);" (call_expression "FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" (identifier "FUN_00191650") (argument_list "(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3)" (( "(") (pointer_expression "*(undefined8 *)PTR_DAT_003f85c0" (* "*") (cast_expression "(undefined8 *)PTR_DAT_003f85c0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_003f85c0"))) (, ",") (string_literal ""Opened new descriptor %d for \"%s\""" (" """) (string_content "Opened new descriptor %d for ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (" """)) (, ",") (identifier "iVar4") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return iVar4;" (return "return") (identifier "iVar4") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: int open(Descriptors * this, int descriptor, char * name, int flags,
   int mode) */

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

{
  type_2 *var_15;
  type_3 var_19;
  type_4 *var_21;
  bool bVar4;
  int var_10;
  type_5 var_11;
  int *piVar7;
  type_6 var_16;
  char *var_7;
  type_5 var_13;
  type_3 var_6;
  type_5 __oflag_00;
  type_6 var_17;
  type_5 in_R8D;
  
  var_11 = (type_5)__file;
  bVar4 = Initialize_lock::var_1(&this->initialize_lock_);
  if ((!bVar4) && (-1 < (int)var_11)) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/descriptors.cc",0x53,"open");
  }
  if ((parameters->options_ != (type_4 *)0x0) && ((parameters->debug_ & 4) != 0)) {
    this->limit_ = 8;
  }
  if (-1 < (int)var_11) {
    var_15 = this->lock_;
    (*var_15->lock_->_vptr_Lock_impl[2])();
    var_6 = (this->open_descriptors_).
              super__Vector_base<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
              ._M_impl._M_start;
    if ((type_6)((long)(this->open_descriptors_).
                      super__Vector_base<var_5::type_1::var_3,_std::allocator<var_5::type_1::var_3>var_4>
                      ._M_impl._M_finish - (long)var_6 >> 4) <= (type_6)(long)(int)var_11) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */
      var_2("../../gold/descriptors.cc",0x5d,"open");
    }
    var_6 = var_6 + (int)var_11;
    var_7 = var_6->name;
    if ((var_7 == var_8) ||
       ((var_7 != (char *)0x0 && (var_10 = var_9(var_7,var_8), var_10 == 0)))) {
      if (var_6->inuse != false) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */
        var_2("../../gold/descriptors.cc",0x62,"open");
      }
      var_6->inuse = true;
      if (this->stack_top_ == var_11) {
        this->stack_top_ = var_6->stack_next;
        var_6->stack_next = -1;
        var_6->is_on_stack = false;
      }
      if ((parameters->options_ != (type_4 *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */
        Errors::var_12(parameters->errors_,"Reused existing descriptor %d for \"%s\"",
                      (type_6)__file & 0xffffffff,var_8);
        (*var_15->lock_->_vptr_Lock_impl[3])();
        return var_11;
      }
      (*var_15->lock_->_vptr_Lock_impl[3])();
      return var_11;
    }
    (*var_15->lock_->_vptr_Lock_impl[3])();
  }
  while( true ) {
    __oflag_00 = var_13 | 0x80000;
    var_11 = var_14(var_8,__oflag_00,(type_6)in_R8D);
    if (-1 < (int)var_11) {
      var_15 = this->lock_;
      if (var_15 != (type_2 *)0x0) {
        (*var_15->lock_->_vptr_Lock_impl[2])();
      }
      var_19 = (this->open_descriptors_).
               super__Vector_base<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
               ._M_impl._M_finish;
      var_6 = (this->open_descriptors_).
                super__Vector_base<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
                ._M_impl._M_start;
      var_16 = (long)var_19 - (long)var_6 >> 4;
      if (var_16 <= (type_6)(long)(int)var_11) {
        var_17 = (type_6)(int)(var_11 + 0x40);
        if (var_16 < var_17) {
                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */
          std::
          vector<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
          ::var_18(&this->open_descriptors_,var_17 - var_16);
          var_6 = (this->open_descriptors_).
                    super__Vector_base<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
                    ._M_impl._M_start;
        }
        else if ((var_17 < var_16) && (var_19 != var_6 + var_17)) {
          (this->open_descriptors_).
          super__Vector_base<var_5::Descriptors::var_3,_std::allocator<var_5::Descriptors::var_3>var_4>
          ._M_impl._M_finish = var_6 + var_17;
        }
      }
      var_6 = var_6 + (int)var_11;
      var_6->is_write = (var_13 & 3) != 0;
      var_6->name = var_8;
      var_6->stack_next = -1;
      var_6->inuse = true;
      var_6->is_on_stack = false;
      var_10 = this->current_ + 1;
      this->current_ = var_10;
      if (var_10 < this->limit_) {
        var_21 = parameters->options_;
      }
      else {
        var_20(this);
        var_21 = parameters->options_;
      }
      if ((var_21 != (type_4 *)0x0) && ((parameters->debug_ & 4) != 0)) {
                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */
        Errors::var_12(parameters->errors_,"Opened new descriptor %d for \"%s\"",(type_6)var_11,
                      var_8);
      }
      if (var_15 != (type_2 *)0x0) {
        (*var_15->lock_->_vptr_Lock_impl[3])();
      }
      return var_11;
    }
    piVar7 = var_22();
    if (1 < *piVar7 - 0x17U) break;
    var_15 = this->lock_;
    if (var_15 != (type_2 *)0x0) {
      (*var_15->lock_->_vptr_Lock_impl[2])();
    }
    var_10 = this->current_ + -0x10;
    if (var_10 < 8) {
      var_10 = 8;
    }
    this->limit_ = var_10;
                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */
    bVar4 = var_20(this);
    if (!bVar4) {
      var_7 = (char *)var_23("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */
      var_24(var_7);
    }
    var_13 = __oflag_00;
    if (var_15 != (type_2 *)0x0) {
      (*var_15->lock_->_vptr_Lock_impl[3])();
    }
  }
  if ((*piVar7 == 2) && (-1 < (char)((type_6)__file >> 0x18))) {
    var_15 = this->lock_;
    (*var_15->lock_->_vptr_Lock_impl[2])();
    var_7 = (char *)var_23("file %s was removed during the link");
                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */
    var_25(var_7,var_8);
    (*var_15->lock_->_vptr_Lock_impl[3])();
    *piVar7 = 2;
  }
  if (parameters->options_ == (type_4 *)0x0) {
    return var_11;
  }
  if ((parameters->debug_ & 4) == 0) {
    return var_11;
  }
  Errors::var_12(parameters->errors_,"Opened new descriptor %d for \"%s\"",(type_6)var_11,var_8);
  return var_11;
}


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

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

{
  long lVar1;
  undefined8 *puVar2;
  char *__s1;
  char cVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  ulong uVar7;
  undefined8 uVar8;
  undefined8 *puVar9;
  long lVar10;
  uint __oflag;
  ulong uVar11;
  
  cVar3 = FUN_0019c6f0(param_1 + 1);
  if ((cVar3 != '\x01') && (-1 < param_2)) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/descriptors.cc",0x53,&DAT_00355580);
  }
  if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {
    *(undefined4 *)(param_1 + 9) = 8;
  }
  if (-1 < param_2) {
    puVar2 = (undefined8 *)*param_1;
    (**(code **)(*(long *)*puVar2 + 0x10))();
    if ((ulong)(param_1[6] - param_1[5] >> 4) <= (ulong)(long)param_2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00265872 to 00265876 has its CatchHandler @ 002658a7 */
      FUN_00199900("../../gold/descriptors.cc",0x5d,&DAT_00355580);
    }
    puVar9 = (undefined8 *)((long)param_2 * 0x10 + param_1[5]);
    __s1 = (char *)*puVar9;
    if ((__s1 == param_3) || ((__s1 != (char *)0x0 && (iVar4 = strcmp(__s1,param_3), iVar4 == 0))))
    {
      if (*(char *)((long)puVar9 + 0xc) != '\0') {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002658a2 to 002658a6 has its CatchHandler @ 002658a7 */
        FUN_00199900("../../gold/descriptors.cc",0x62,&DAT_00355580);
      }
      *(undefined1 *)((long)puVar9 + 0xc) = 1;
      if ((int)param_1[8] == param_2) {
        *(undefined4 *)(param_1 + 8) = *(undefined4 *)(puVar9 + 1);
        *(undefined4 *)(puVar9 + 1) = 0xffffffff;
        *(undefined1 *)((long)puVar9 + 0xe) = 0;
      }
      if ((*(long *)(PTR_DAT_003f85c0 + 0x10) != 0) && ((PTR_DAT_003f85c0[0x24] & 4) != 0)) {
                    /* try { // try from 002657a1 to 002657a5 has its CatchHandler @ 002658a7 */
        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Reused existing descriptor %d for \"%s\"",
                     param_2,param_3);
        (**(code **)(*(long *)*puVar2 + 0x18))();
        return param_2;
      }
      (**(code **)(*(long *)*puVar2 + 0x18))();
      return param_2;
    }
    (**(code **)(*(long *)*puVar2 + 0x18))();
  }
  while( true ) {
    __oflag = param_4 | 0x80000;
    iVar4 = open64(param_3,__oflag,(ulong)param_5);
    if (-1 < iVar4) {
      puVar2 = (undefined8 *)*param_1;
      if (puVar2 != (undefined8 *)0x0) {
        (**(code **)(*(long *)*puVar2 + 0x10))();
      }
      lVar10 = param_1[5];
      uVar7 = param_1[6] - lVar10 >> 4;
      if (uVar7 <= (ulong)(long)iVar4) {
        uVar11 = (ulong)(iVar4 + 0x40);
        if (uVar7 < uVar11) {
                    /* try { // try from 00265800 to 00265804 has its CatchHandler @ 002658b7 */
          FUN_002658f0(param_1 + 5,uVar11 - uVar7);
          lVar10 = param_1[5];
        }
        else if ((uVar11 < uVar7) && (lVar1 = lVar10 + uVar11 * 0x10, param_1[6] != lVar1)) {
          param_1[6] = lVar1;
        }
      }
      puVar9 = (undefined8 *)(lVar10 + (long)iVar4 * 0x10);
      *(bool *)((long)puVar9 + 0xd) = (param_4 & 3) != 0;
      *puVar9 = param_3;
      *(undefined4 *)(puVar9 + 1) = 0xffffffff;
      *(undefined1 *)((long)puVar9 + 0xc) = 1;
      *(undefined1 *)((long)puVar9 + 0xe) = 0;
      iVar5 = *(int *)((long)param_1 + 0x44) + 1;
      *(int *)((long)param_1 + 0x44) = iVar5;
      if (iVar5 < (int)param_1[9]) {
        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);
      }
      else {
        FUN_002651e0(param_1);
        lVar10 = *(long *)(PTR_DAT_003f85c0 + 0x10);
      }
      if ((lVar10 != 0) && ((*(byte *)((long)PTR_DAT_003f85c0 + 0x24) & 4) != 0)) {
                    /* try { // try from 00265722 to 00265777 has its CatchHandler @ 002658b7 */
        FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,
                     param_3);
      }
      if (puVar2 != (undefined8 *)0x0) {
        (**(code **)(*(long *)*puVar2 + 0x18))();
      }
      return iVar4;
    }
    piVar6 = __errno_location();
    if (1 < *piVar6 - 0x17U) break;
    puVar2 = (undefined8 *)*param_1;
    if (puVar2 != (undefined8 *)0x0) {
      (**(code **)(*(long *)*puVar2 + 0x10))();
    }
    iVar4 = *(int *)((long)param_1 + 0x44) + -0x10;
    if (iVar4 < 8) {
      iVar4 = 8;
    }
    *(int *)(param_1 + 9) = iVar4;
                    /* try { // try from 00265627 to 0026562b has its CatchHandler @ 002658bf */
    cVar3 = FUN_002651e0(param_1);
    if (cVar3 == '\0') {
      uVar8 = gettext("out of file descriptors and couldn\'t close any");
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 0026585a to 0026585e has its CatchHandler @ 002658bf */
      FUN_00191730(uVar8);
    }
    param_4 = __oflag;
    if (puVar2 != (undefined8 *)0x0) {
      (**(code **)(*(long *)*puVar2 + 0x18))();
    }
  }
  if ((*piVar6 == 2) && (-1 < param_2)) {
    puVar2 = (undefined8 *)*param_1;
    (**(code **)(*(long *)*puVar2 + 0x10))();
    uVar8 = gettext("file %s was removed during the link");
                    /* try { // try from 0026582e to 00265832 has its CatchHandler @ 002658af */
    FUN_00191870(uVar8,param_3);
    (**(code **)(*(long *)*puVar2 + 0x18))();
    *piVar6 = 2;
  }
  if (*(long *)(PTR_DAT_003f85c0 + 0x10) == 0) {
    return iVar4;
  }
  if ((PTR_DAT_003f85c0[0x24] & 4) == 0) {
    return iVar4;
  }
  FUN_00191650(*(undefined8 *)PTR_DAT_003f85c0,"Opened new descriptor %d for \"%s\"",iVar4,param_3);
  return iVar4;
}

