
/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool process_one_opcode(Sized_dwarf_line_info<32,_true> * this, uchar *
   start, LineStateMachine * lsm, size_t * len) */

bool __thiscall
gold::Sized_dwarf_line_info<32,_true>::process_one_opcode
          (Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)

{
  _Rb_tree_header *p_Var1;
  byte bVar2;
  byte bVar3;
  char cVar4;
  uchar uVar5;
  pointer pvVar6;
  pointer pvVar7;
  bool bVar8;
  uint uVar9;
  long lVar10;
  int64_t iVar11;
  ulong uVar12;
  uint64_t uVar13;
  size_t sVar14;
  _Base_ptr p_Var15;
  _Base_ptr p_Var16;
  _Base_ptr p_Var17;
  pointer puVar18;
  size_t sVar19;
  uchar *puVar20;
  uchar *puVar21;
  int iVar22;
  size_t templen;
  size_t templen_1;
  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_60;
  
  bVar2 = *start;
  bVar3 = (this->header_).opcode_base;
  if (bVar3 <= bVar2) {
    lVar10 = (long)(this->header_).line_range;
    uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff);
    lsm->address = lsm->address +
                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length);
    cVar4 = (this->header_).line_base;
    lsm->basic_block = true;
    lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10);
    *len = 1;
    return true;
  }
  switch(bVar2) {
  case 0:
    bVar2 = start[1];
    uVar12 = (ulong)bVar2;
    if ((char)bVar2 < '\0') {
      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);
    }
    else {
      templen = 1;
    }
    puVar20 = start + 1 + templen;
    sVar19 = templen + 1 + uVar12;
    uVar5 = *puVar20;
    puVar21 = puVar20 + 1;
    if (uVar5 == '\x02') {
      uVar9 = *(uint *)(puVar20 + 1);
      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;
      lVar10 = (long)puVar21 - (long)this->buffer_;
      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |
                      uVar9 << 0x18);
      lsm->address = uVar12;
      p_Var17 = &p_Var1->_M_header;
      if (p_Var16 != (_Base_ptr)0x0) {
        do {
          if (*(long *)(p_Var16 + 1) < lVar10) {
            p_Var15 = p_Var16->_M_right;
          }
          else {
            p_Var15 = p_Var16->_M_left;
            p_Var17 = p_Var16;
          }
          p_Var16 = p_Var15;
        } while (p_Var15 != (_Base_ptr)0x0);
        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {
          if (this->track_relocs_type_ == 4) {
            uVar12 = 0;
          }
          uVar9 = *(uint *)&p_Var17[1]._M_parent;
          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;
          lsm->shndx = uVar9;
          break;
        }
      }
      bVar8 = input_is_relobj(this);
      if (bVar8) {
        this->data_valid_ = false;
      }
    }
    else if (uVar5 == '\x03') {
      sVar14 = strlen((char *)puVar21);
      templen = sVar14 + 1;
      bVar2 = puVar21[templen];
      uVar12 = (ulong)bVar2;
      if ((char)bVar2 < '\0') {
        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);
      }
      else {
        templen = 1;
      }
      pvVar6 = (this->directories_).
               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>
               ._M_impl._M_finish;
      pvVar7 = (this->files_).
               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>
               ._M_impl._M_finish;
      if ((ulong)((long)pvVar6[-1].
                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
                        ._M_impl._M_finish -
                  (long)pvVar6[-1].
                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
                        ._M_impl._M_start >> 5) <= uVar12) {
        uVar12 = 0;
      }
      templen_1._0_4_ = (undefined4)uVar12;
      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;
      sVar14 = strlen((char *)puVar21);
      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::
      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);
                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */
      std::
      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>
      ::
      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>
                (pvVar7 + -1,
                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>
                  *)&templen_1);
      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
           *)local_60._M_dataplus._M_p != &local_60.field_2) {
        operator_delete(local_60._M_dataplus._M_p);
      }
    }
    else if (uVar5 == '\x01') {
      lsm->line_num = -1;
      lsm->end_sequence = true;
      *len = sVar19;
      return true;
    }
    break;
  case 1:
    lsm->basic_block = false;
    *len = 1;
    return true;
  case 2:
    bVar2 = start[1];
    uVar12 = (ulong)bVar2;
    if ((char)bVar2 < '\0') {
      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);
    }
    else {
      templen = 1;
    }
    sVar19 = templen + 1;
    lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;
    break;
  case 3:
    bVar2 = start[1];
    if ((char)bVar2 < '\0') {
      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);
      uVar9 = (uint)iVar11;
      sVar19 = templen + 1;
    }
    else {
      uVar9 = (uint)bVar2;
      sVar19 = 2;
      if ((bVar2 & 0x40) != 0) {
        uVar9 = bVar2 | 0xffffff80;
      }
    }
    lsm->line_num = lsm->line_num + uVar9;
    break;
  case 4:
    bVar2 = start[1];
    uVar9 = (uint)bVar2;
    if ((char)bVar2 < '\0') {
      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);
      uVar9 = (uint)uVar13;
    }
    else {
      templen = 1;
    }
    lsm->file_num = uVar9;
    sVar19 = templen + 1;
    break;
  case 5:
    bVar2 = start[1];
    uVar9 = (uint)bVar2;
    sVar19 = 2;
    if ((char)bVar2 < '\0') {
      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);
      uVar9 = (uint)uVar13;
      sVar19 = templen + 1;
    }
    lsm->column_num = uVar9;
    break;
  case 6:
    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);
    sVar19 = 1;
    break;
  case 7:
    lsm->basic_block = true;
    sVar19 = 1;
    break;
  case 8:
    sVar19 = 1;
    lsm->address = lsm->address +
                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /
                               (long)(this->header_).line_range) * (this->header_).min_insn_length);
    break;
  case 9:
    sVar19 = 3;
    lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);
    break;
  default:
    puVar18 = (this->header_).std_opcode_lengths.
              super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl._M_start;
    if (puVar18[bVar2] == '\0') {
      sVar19 = 1;
    }
    else {
      iVar22 = 0;
      sVar19 = 1;
      puVar21 = start + 1;
      do {
        puVar20 = puVar21 + 1;
        lVar10 = 1;
        if ((char)*puVar21 < '\0') {
          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);
          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);
          puVar18 = (this->header_).std_opcode_lengths.
                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.
                    _M_start;
          puVar20 = puVar21 + lVar10;
        }
        sVar19 = sVar19 + lVar10;
        iVar22 = iVar22 + 1;
        puVar21 = puVar20;
      } while (iVar22 < (int)(uint)puVar18[bVar2]);
    }
  }
  *len = sVar19;
  return false;
}



undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)

{
  byte bVar1;
  byte bVar2;
  char cVar3;
  uint uVar4;
  long lVar5;
  ulong uVar6;
  size_t sVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  byte *pbVar11;
  byte *pbVar12;
  int iVar13;
  long lVar14;
  long local_70;
  undefined4 local_68;
  undefined4 uStack_64;
  undefined1 *local_60 [2];
  undefined1 local_50 [32];
  
  bVar1 = *param_2;
  bVar2 = *(byte *)(param_1 + 0x38);
  if (bVar2 <= bVar1) {
    iVar13 = *(int *)(param_1 + 0x34);
    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);
    *(long *)(param_3 + 2) =
         *(long *)(param_3 + 2) +
         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));
    cVar3 = *(char *)(param_1 + 0x31);
    *(undefined1 *)((long)param_3 + 0x1d) = 1;
    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);
    *param_4 = 1;
    return 1;
  }
  switch(bVar1) {
  case 0:
    bVar1 = param_2[1];
    uVar6 = (ulong)bVar1;
    if ((char)bVar1 < '\0') {
      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    pbVar11 = param_2 + 1 + local_70;
    lVar10 = local_70 + 1 + uVar6;
    bVar1 = *pbVar11;
    pbVar12 = pbVar11 + 1;
    if (bVar1 == 2) {
      uVar4 = *(uint *)(pbVar11 + 1);
      lVar9 = *(long *)(param_1 + 0xe0);
      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);
      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |
                     uVar4 << 0x18);
      *(ulong *)(param_3 + 2) = uVar6;
      lVar5 = param_1 + 0xd8;
      if (lVar9 != 0) {
        do {
          if (*(long *)(lVar9 + 0x20) < lVar14) {
            lVar8 = *(long *)(lVar9 + 0x18);
          }
          else {
            lVar8 = *(long *)(lVar9 + 0x10);
            lVar5 = lVar9;
          }
          lVar9 = lVar8;
        } while (lVar8 != 0);
        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {
          if (*(int *)(param_1 + 0x80) == 4) {
            uVar6 = 0;
          }
          uVar4 = *(uint *)(lVar5 + 0x28);
          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);
          param_3[6] = uVar4;
          break;
        }
      }
      cVar3 = FUN_0046ab30(param_1);
      if (cVar3 != '\0') {
        *(undefined1 *)(param_1 + 8) = 0;
      }
    }
    else if (bVar1 == 3) {
      sVar7 = strlen((char *)pbVar12);
      local_70 = sVar7 + 1;
      bVar1 = pbVar12[local_70];
      uVar6 = (ulong)bVar1;
      if ((char)bVar1 < '\0') {
        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);
      }
      else {
        local_70 = 1;
      }
      lVar9 = *(long *)(param_1 + 0xb8);
      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -
                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {
        uVar6 = 0;
      }
      local_68 = (undefined4)uVar6;
      local_60[0] = local_50;
      sVar7 = strlen((char *)pbVar12);
      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);
                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */
      FUN_0046d2a0(lVar9 + -0x18,&local_68);
      if (local_60[0] != local_50) {
        FUN_0049e330();
      }
    }
    else if (bVar1 == 1) {
      param_3[4] = 0xffffffff;
      *(undefined1 *)((long)param_3 + 0x1e) = 1;
      *param_4 = lVar10;
      return 1;
    }
    break;
  case 1:
    *(undefined1 *)((long)param_3 + 0x1d) = 0;
    *param_4 = 1;
    return 1;
  case 2:
    bVar1 = param_2[1];
    uVar6 = (ulong)bVar1;
    if ((char)bVar1 < '\0') {
      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    lVar10 = local_70 + 1;
    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);
    break;
  case 3:
    bVar1 = param_2[1];
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_0037a060(param_2 + 2,&local_70);
      lVar10 = local_70 + 1;
    }
    else {
      uVar4 = (uint)bVar1;
      lVar10 = 2;
      if ((bVar1 & 0x40) != 0) {
        uVar4 = bVar1 | 0xffffff80;
      }
    }
    param_3[4] = param_3[4] + uVar4;
    break;
  case 4:
    bVar1 = param_2[1];
    uVar4 = (uint)bVar1;
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    *param_3 = uVar4;
    lVar10 = local_70 + 1;
    break;
  case 5:
    bVar1 = param_2[1];
    uVar4 = (uint)bVar1;
    lVar10 = 2;
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
      lVar10 = local_70 + 1;
    }
    param_3[5] = uVar4;
    break;
  case 6:
    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;
    lVar10 = 1;
    break;
  case 7:
    *(undefined1 *)((long)param_3 + 0x1d) = 1;
    lVar10 = 1;
    break;
  case 8:
    lVar10 = 1;
    *(long *)(param_3 + 2) =
         *(long *)(param_3 + 2) +
         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *
               *(int *)(param_1 + 0x28));
    break;
  case 9:
    lVar10 = 3;
    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);
    break;
  default:
    lVar9 = *(long *)(param_1 + 0x40);
    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {
      lVar10 = 1;
    }
    else {
      iVar13 = 0;
      lVar10 = 1;
      pbVar12 = param_2 + 1;
      do {
        pbVar11 = pbVar12 + 1;
        lVar5 = 1;
        if ((char)*pbVar12 < '\0') {
          FUN_00379ff0(pbVar11,&local_68);
          lVar5 = CONCAT44(uStack_64,local_68);
          lVar9 = *(long *)(param_1 + 0x40);
          pbVar11 = pbVar12 + lVar5;
        }
        lVar10 = lVar10 + lVar5;
        iVar13 = iVar13 + 1;
        pbVar12 = pbVar11;
      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));
    }
  }
  *param_4 = lVar10;
  return 0;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDX
SUB RSP,0x58
MOVZX EAX,byte ptr [RSI]
MOVZX EDX,byte ptr [RDI + 0x38]
CMP DL,AL
JBE 0x0046e190
MOV RBP,RCX
MOV R12,RDI
LEA R14,[RSI + 0x1]
CMP AL,0x9
JA 0x0046e360
LEA RCX,[0x5865d0]
MOVSXD RAX,dword ptr [RCX + RAX*0x4]
ADD RAX,RCX
JMP RAX
SUB EAX,EDX
MOVZX EAX,AL
CDQ
IDIV dword ptr [RDI + 0x34]
IMUL EAX,dword ptr [RDI + 0x28]
CDQE
ADD qword ptr [RBX + 0x8],RAX
MOVSX EAX,byte ptr [RDI + 0x31]
MOV byte ptr [RBX + 0x1d],0x1
ADD EAX,EDX
ADD dword ptr [RBX + 0x10],EAX
MOV EAX,0x1
MOV qword ptr [RCX],0x1
ADD RSP,0x58
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
NOT EDX
MOV R13D,0x1
MOVZX EAX,DL
CDQ
IDIV dword ptr [RDI + 0x34]
IMUL EAX,dword ptr [RDI + 0x28]
CDQE
ADD qword ptr [RBX + 0x8],RAX
MOV qword ptr [RBP],R13
ADD RSP,0x58
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOVZX EAX,byte ptr [RSI + 0x1]
MOV R13D,0x3
SHL EAX,0x8
MOV EDX,EAX
MOVZX EAX,byte ptr [RSI + 0x2]
OR EAX,EDX
MOVZX EAX,AX
ADD qword ptr [RBX + 0x8],RAX
JMP 0x0046e1e9
MOVZX EAX,byte ptr [RSI + 0x1]
TEST AL,AL
JS 0x0046e440
MOV qword ptr [RSP + 0x18],0x1
MOV RDX,qword ptr [RSP + 0x18]
ADD R14,RDX
LEA R13,[RDX + RAX*0x1 + 0x1]
MOVZX EAX,byte ptr [R14]
LEA R15,[R14 + 0x1]
CMP AL,0x2
JZ 0x0046e530
CMP AL,0x3
JZ 0x0046e480
CMP AL,0x1
JNZ 0x0046e1e9
MOV dword ptr [RBX + 0x10],0xffffffff
MOV byte ptr [RBX + 0x1e],0x1
MOV qword ptr [RBP],R13
JMP 0x0046e1bc
MOV byte ptr [RBX + 0x1d],0x0
MOV EAX,0x1
MOV qword ptr [RBP],0x1
JMP 0x0046e1bc
MOVZX EAX,byte ptr [RSI + 0x1]
TEST AL,AL
JS 0x0046e420
MOV qword ptr [RSP + 0x18],0x1
MOVSXD RDX,dword ptr [R12 + 0x28]
MOV RCX,qword ptr [RSP + 0x18]
IMUL RAX,RDX
LEA R13,[RCX + 0x1]
ADD qword ptr [RBX + 0x8],RAX
JMP 0x0046e1e9
MOVZX EDX,byte ptr [RSI + 0x1]
TEST DL,DL
JS 0x0046e3f8
MOVZX EAX,DL
AND EDX,0x40
MOV R13D,0x2
JZ 0x0046e2de
OR RAX,-0x80
ADD dword ptr [RBX + 0x10],EAX
JMP 0x0046e1e9
MOVZX EAX,byte ptr [RSI + 0x1]
TEST AL,AL
JS 0x0046e3d8
MOV qword ptr [RSP + 0x18],0x1
MOV RCX,qword ptr [RSP + 0x18]
MOV dword ptr [RBX],EAX
LEA R13,[RCX + 0x1]
JMP 0x0046e1e9
MOVZX EAX,byte ptr [RSI + 0x1]
MOV R13D,0x2
MOV RDX,RAX
TEST AL,AL
JS 0x0046e460
MOV dword ptr [RBX + 0x14],EAX
JMP 0x0046e1e9
XOR byte ptr [RBX + 0x1c],0x1
MOV R13D,0x1
JMP 0x0046e1e9
MOV byte ptr [RBX + 0x1d],0x1
MOV R13D,0x1
JMP 0x0046e1e9
MOV RSI,qword ptr [RDI + 0x40]
MOVZX EBX,AL
CMP byte ptr [RSI + RBX*0x1],0x0
JZ 0x0046e5c6
LEA RAX,[RSP + 0x20]
XOR R15D,R15D
MOV R13D,0x1
MOV qword ptr [RSP + 0x8],RAX
JMP 0x0046e3a7
ADD R13,RAX
MOVZX EAX,byte ptr [RSI + RBX*0x1]
ADD R15D,0x1
MOV R14,RDI
CMP EAX,R15D
JLE 0x0046e1e9
MOVZX EDX,byte ptr [R14]
LEA RDI,[R14 + 0x1]
MOV EAX,0x1
TEST DL,DL
JNS 0x0046e390
MOV RSI,qword ptr [RSP + 0x8]
CALL 0x00379ff0
MOV RAX,qword ptr [RSP + 0x20]
MOV RSI,qword ptr [R12 + 0x40]
LEA RDI,[R14 + RAX*0x1]
JMP 0x0046e390
MOVZX EDX,AL
LEA RAX,[RSP + 0x18]
LEA RDI,[RSI + 0x2]
MOV RSI,RAX
CALL 0x00379ff0
JMP 0x0046e305
LEA RAX,[RSP + 0x18]
LEA RDI,[RSI + 0x2]
MOV RSI,RAX
CALL 0x0037a060
MOV RCX,qword ptr [RSP + 0x18]
LEA R13,[RCX + 0x1]
JMP 0x0046e2de
MOVZX EDX,AL
LEA RAX,[RSP + 0x18]
LEA RDI,[RSI + 0x2]
MOV RSI,RAX
CALL 0x00379ff0
JMP 0x0046e2a5
MOVZX EDX,AL
LEA RAX,[RSP + 0x18]
LEA RDI,[RSI + 0x2]
MOV RSI,RAX
CALL 0x00379ff0
JMP 0x0046e235
LEA RAX,[RSP + 0x18]
LEA RDI,[RSI + 0x2]
MOV RSI,RAX
CALL 0x00379ff0
MOV RCX,qword ptr [RSP + 0x18]
LEA R13,[RCX + 0x1]
JMP 0x0046e32d
MOV RDI,R15
CALL 0x00177490
ADD RAX,0x1
LEA RCX,[R15 + RAX*0x1]
MOV qword ptr [RSP + 0x18],RAX
MOVZX EAX,byte ptr [RCX]
TEST AL,AL
JS 0x0046e5d1
MOV qword ptr [RSP + 0x18],0x1
MOV RCX,qword ptr [R12 + 0xa0]
LEA RBX,[RSP + 0x20]
MOV R12,qword ptr [R12 + 0xb8]
MOV RDI,R15
MOV RDX,qword ptr [RCX + -0x10]
SUB RDX,qword ptr [RCX + -0x18]
SAR RDX,0x5
CMP RAX,RDX
MOV EDX,0x0
CMOVNC RAX,RDX
SUB R12,0x18
MOV dword ptr [RSP + 0x20],EAX
LEA RAX,[RBX + 0x18]
MOV qword ptr [RSP + 0x28],RAX
CALL 0x00177490
LEA RDI,[RBX + 0x8]
MOV RSI,R15
LEA RDX,[R15 + RAX*0x1]
CALL 0x001a61c0
MOV RSI,RBX
MOV RDI,R12
CALL 0x0046d2a0
MOV RDI,qword ptr [RSP + 0x28]
ADD RBX,0x18
CMP RDI,RBX
JZ 0x0046e1e9
CALL 0x0049e330
JMP 0x0046e1e9
MOV EDX,dword ptr [R14 + 0x1]
MOV RAX,qword ptr [R12 + 0xe0]
LEA RSI,[R12 + 0xd8]
SUB R15,qword ptr [R12 + 0x60]
BSWAP EDX
MOV EDX,EDX
MOV qword ptr [RBX + 0x8],RDX
TEST RAX,RAX
JZ 0x0046e58b
MOV RCX,RSI
JMP 0x0046e56c
MOV RCX,RAX
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0046e580
CMP R15,qword ptr [RAX + 0x20]
JLE 0x0046e560
MOV RAX,qword ptr [RAX + 0x18]
JMP 0x0046e567
CMP RSI,RCX
JZ 0x0046e58b
CMP R15,qword ptr [RCX + 0x20]
JGE 0x0046e5a6
MOV RDI,R12
CALL 0x0046ab30
TEST AL,AL
JZ 0x0046e1e9
MOV byte ptr [R12 + 0x8],0x0
JMP 0x0046e1e9
CMP dword ptr [R12 + 0x80],0x4
CMOVZ RDX,RAX
MOV EAX,dword ptr [RCX + 0x28]
ADD RDX,qword ptr [RCX + 0x30]
MOV qword ptr [RBX + 0x8],RDX
MOV dword ptr [RBX + 0x18],EAX
JMP 0x0046e1e9
MOV R13D,0x1
JMP 0x0046e1e9
MOVZX EDX,AL
LEA RSI,[RSP + 0x18]
LEA RDI,[RCX + 0x1]
CALL 0x00379ff0
JMP 0x0046e4a9
(translation_unit "undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)\n\n{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}\n\n" (function_definition "undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)\n\n{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" type_identifier (function_declarator "FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)" identifier (parameter_list "(long param_1,byte *param_2,uint *param_3,long *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_70;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_68;" type_identifier identifier ;) (declaration "undefined4 uStack_64;" type_identifier identifier ;) (declaration "undefined1 *local_60 [2];" type_identifier (pointer_declarator "*local_60 [2]" * (array_declarator "local_60 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 local_50 [32];" type_identifier (array_declarator "local_50 [32]" identifier [ number_literal ]) ;) (expression_statement "bVar1 = *param_2;" (assignment_expression "bVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "bVar2 = *(byte *)(param_1 + 0x38);" (assignment_expression "bVar2 = *(byte *)(param_1 + 0x38)" identifier = (pointer_expression "*(byte *)(param_1 + 0x38)" * (cast_expression "(byte *)(param_1 + 0x38)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" if (parenthesized_expression "(bVar2 <= bVar1)" ( (binary_expression "bVar2 <= bVar1" identifier <= identifier) )) (compound_statement "{\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" { (expression_statement "iVar13 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar13 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);" (assignment_expression "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" identifier = (call_expression "(ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)bVar1 - (uint)bVar2 & 0xff)" ( (binary_expression "(uint)bVar1 - (uint)bVar2 & 0xff" (binary_expression "(uint)bVar1 - (uint)bVar2" (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) - (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) ;) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" ( (binary_expression "(int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)uVar6 / (long)iVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar6 / (long)iVar13)" ( (binary_expression "(long)uVar6 / (long)iVar13" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) / (cast_expression "(long)iVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) * (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ))))) ;) (expression_statement "cVar3 = *(char *)(param_1 + 0x31);" (assignment_expression "cVar3 = *(char *)(param_1 + 0x31)" identifier = (pointer_expression "*(char *)(param_1 + 0x31)" * (cast_expression "(char *)(param_1 + 0x31)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x31)" ( (binary_expression "param_1 + 0x31" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);" (assignment_expression "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (binary_expression "param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (binary_expression "param_3[4] + (int)cVar3" (subscript_expression "param_3[4]" identifier [ number_literal ]) + (cast_expression "(int)cVar3" ( (type_descriptor "int" primitive_type) ) identifier)) + (cast_expression "(int)((long)uVar6 % (long)iVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar6 % (long)iVar13)" ( (binary_expression "(long)uVar6 % (long)iVar13" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) % (cast_expression "(long)iVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))))) ;) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" * identifier) = number_literal) ;) (return_statement "return 1;" return number_literal ;) })) (switch_statement "switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" switch (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" { (case_statement "case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "pbVar11 = param_2 + 1 + local_70;" (assignment_expression "pbVar11 = param_2 + 1 + local_70" identifier = (binary_expression "param_2 + 1 + local_70" (binary_expression "param_2 + 1" identifier + number_literal) + identifier)) ;) (expression_statement "lVar10 = local_70 + 1 + uVar6;" (assignment_expression "lVar10 = local_70 + 1 + uVar6" identifier = (binary_expression "local_70 + 1 + uVar6" (binary_expression "local_70 + 1" identifier + number_literal) + identifier)) ;) (expression_statement "bVar1 = *pbVar11;" (assignment_expression "bVar1 = *pbVar11" identifier = (pointer_expression "*pbVar11" * identifier)) ;) (expression_statement "pbVar12 = pbVar11 + 1;" (assignment_expression "pbVar12 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (if_statement "if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 2)" ( (binary_expression "bVar1 == 2" identifier == number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }" { (expression_statement "uVar4 = *(uint *)(pbVar11 + 1);" (assignment_expression "uVar4 = *(uint *)(pbVar11 + 1)" identifier = (pointer_expression "*(uint *)(pbVar11 + 1)" * (cast_expression "(uint *)(pbVar11 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar11 + 1)" ( (binary_expression "pbVar11 + 1" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0xe0);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xe0)" identifier = (pointer_expression "*(long *)(param_1 + 0xe0)" * (cast_expression "(long *)(param_1 + 0xe0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) ))))) ;) (expression_statement "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);" (assignment_expression "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60)" identifier = (binary_expression "(long)pbVar12 - *(long *)(param_1 + 0x60)" (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (pointer_expression "*(long *)(param_1 + 0x60)" * (cast_expression "(long *)(param_1 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);" (assignment_expression "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" identifier = (call_expression "(ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" ( (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "*(ulong *)(param_3 + 2) = uVar6;" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar5 = param_1 + 0xd8;" (assignment_expression "lVar5 = param_1 + 0xd8" identifier = (binary_expression "param_1 + 0xd8" identifier + number_literal)) ;) (if_statement "if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" { (do_statement "do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);" do (compound_statement "{\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        }" { (if_statement "if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" if (parenthesized_expression "(*(long *)(lVar9 + 0x20) < lVar14)" ( (binary_expression "*(long *)(lVar9 + 0x20) < lVar14" (pointer_expression "*(long *)(lVar9 + 0x20)" * (cast_expression "(long *)(lVar9 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }" { (expression_statement "lVar8 = *(long *)(lVar9 + 0x18);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x18)" identifier = (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) ))))) ;) }) (else_clause "else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" else (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" { (expression_statement "lVar8 = *(long *)(lVar9 + 0x10);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x10)" identifier = (pointer_expression "*(long *)(lVar9 + 0x10)" * (cast_expression "(long *)(lVar9 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar5 = lVar9;" (assignment_expression "lVar5 = lVar9" identifier = identifier) ;) }))) (expression_statement "lVar9 = lVar8;" (assignment_expression "lVar9 = lVar8" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) ;) (if_statement "if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" if (parenthesized_expression "((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14))" ( (binary_expression "(param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)" (parenthesized_expression "(param_1 + 0xd8 != lVar5)" ( (binary_expression "param_1 + 0xd8 != lVar5" (binary_expression "param_1 + 0xd8" identifier + number_literal) != identifier) )) && (parenthesized_expression "(*(long *)(lVar5 + 0x20) <= lVar14)" ( (binary_expression "*(long *)(lVar5 + 0x20) <= lVar14" (pointer_expression "*(long *)(lVar5 + 0x20)" * (cast_expression "(long *)(lVar5 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" { (if_statement "if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }" if (parenthesized_expression "(*(int *)(param_1 + 0x80) == 4)" ( (binary_expression "*(int *)(param_1 + 0x80) == 4" (pointer_expression "*(int *)(param_1 + 0x80)" * (cast_expression "(int *)(param_1 + 0x80)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x80)" ( (binary_expression "param_1 + 0x80" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n            uVar6 = 0;\n          }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = *(uint *)(lVar5 + 0x28);" (assignment_expression "uVar4 = *(uint *)(lVar5 + 0x28)" identifier = (pointer_expression "*(uint *)(lVar5 + 0x28)" * (cast_expression "(uint *)(lVar5 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x28)" ( (binary_expression "lVar5 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30)" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "uVar6 + *(long *)(lVar5 + 0x30)" identifier + (pointer_expression "*(long *)(lVar5 + 0x30)" * (cast_expression "(long *)(lVar5 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x30)" ( (binary_expression "lVar5 + 0x30" identifier + number_literal) )))))) ;) (expression_statement "param_3[6] = uVar4;" (assignment_expression "param_3[6] = uVar4" (subscript_expression "param_3[6]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;) })) })) (expression_statement "cVar3 = FUN_0046ab30(param_1);" (assignment_expression "cVar3 = FUN_0046ab30(param_1)" identifier = (call_expression "FUN_0046ab30(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" { (expression_statement "*(undefined1 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 8) = 0" (pointer_expression "*(undefined1 *)(param_1 + 8)" * (cast_expression "(undefined1 *)(param_1 + 8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) })) }) (else_clause "else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" else (if_statement "if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 3)" ( (binary_expression "bVar1 == 3" identifier == number_literal) )) (compound_statement "{\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }" { (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" identifier = (call_expression "strlen((char *)pbVar12)" identifier (argument_list "((char *)pbVar12)" ( (cast_expression "(char *)pbVar12" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_70 = sVar7 + 1;" (assignment_expression "local_70 = sVar7 + 1" identifier = (binary_expression "sVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar1 = pbVar12[local_70];" (assignment_expression "bVar1 = pbVar12[local_70]" identifier = (subscript_expression "pbVar12[local_70]" identifier [ identifier ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }" { (expression_statement "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" identifier (argument_list "(pbVar12 + local_70 + 1,&local_70,bVar1)" ( (binary_expression "pbVar12 + local_70 + 1" (binary_expression "pbVar12 + local_70" identifier + identifier) + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n        local_70 = 1;\n      }" else (compound_statement "{\n        local_70 = 1;\n      }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "lVar9 = *(long *)(param_1 + 0xb8);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xb8)" identifier = (pointer_expression "*(long *)(param_1 + 0xb8)" * (cast_expression "(long *)(param_1 + 0xb8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb8)" ( (binary_expression "param_1 + 0xb8" identifier + number_literal) ))))) ;) (if_statement "if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }" if (parenthesized_expression "((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6)" ( (binary_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6" (call_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5" (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18)" (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10)" * (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x10)" ( (binary_expression "*(long *)(param_1 + 0xa0) + -0x10" (pointer_expression "*(long *)(param_1 + 0xa0)" * (cast_expression "(long *)(param_1 + 0xa0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) )))) + number_literal) )))) - (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x18)" * (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x18)" ( (binary_expression "*(long *)(param_1 + 0xa0) + -0x18" (pointer_expression "*(long *)(param_1 + 0xa0)" * (cast_expression "(long *)(param_1 + 0xa0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) )))) + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n        uVar6 = 0;\n      }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) })) (expression_statement "local_68 = (undefined4)uVar6;" (assignment_expression "local_68 = (undefined4)uVar6" identifier = (cast_expression "(undefined4)uVar6" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (expression_statement "local_60[0] = local_50;" (assignment_expression "local_60[0] = local_50" (subscript_expression "local_60[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" identifier = (call_expression "strlen((char *)pbVar12)" identifier (argument_list "((char *)pbVar12)" ( (cast_expression "(char *)pbVar12" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);" (call_expression "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7)" identifier (argument_list "(local_60,pbVar12,pbVar12 + sVar7)" ( identifier , identifier , (binary_expression "pbVar12 + sVar7" identifier + identifier) ))) ;) comment (expression_statement "FUN_0046d2a0(lVar9 + -0x18,&local_68);" (call_expression "FUN_0046d2a0(lVar9 + -0x18,&local_68)" identifier (argument_list "(lVar9 + -0x18,&local_68)" ( (binary_expression "lVar9 + -0x18" identifier + number_literal) , (pointer_expression "&local_68" & identifier) ))) ;) (if_statement "if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(local_60[0] != local_50)" ( (binary_expression "local_60[0] != local_50" (subscript_expression "local_60[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" else (if_statement "if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 1)" ( (binary_expression "bVar1 == 1" identifier == number_literal) )) (compound_statement "{\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" { (expression_statement "param_3[4] = 0xffffffff;" (assignment_expression "param_3[4] = 0xffffffff" (subscript_expression "param_3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((long)param_3 + 0x1e) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1e) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1e)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1e)" ( (binary_expression "(long)param_3 + 0x1e" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))))) (break_statement "break;" break ;)) (case_statement "case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;" case number_literal : (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 0" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" * identifier) = number_literal) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (binary_expression "uVar6 * (long)*(int *)(param_1 + 0x28)" identifier * (cast_expression "(long)*(int *)(param_1 + 0x28)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))))))) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }" { (expression_statement "uVar4 = FUN_0037a060(param_2 + 2,&local_70);" (assignment_expression "uVar4 = FUN_0037a060(param_2 + 2,&local_70)" identifier = (call_expression "FUN_0037a060(param_2 + 2,&local_70)" identifier (argument_list "(param_2 + 2,&local_70)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) )))) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" else (compound_statement "{\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" { (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" identifier = number_literal) ;) (if_statement "if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }" if (parenthesized_expression "((bVar1 & 0x40) != 0)" ( (binary_expression "(bVar1 & 0x40) != 0" (parenthesized_expression "(bVar1 & 0x40)" ( (binary_expression "bVar1 & 0x40" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar4 = bVar1 | 0xffffff80;\n      }" { (expression_statement "uVar4 = bVar1 | 0xffffff80;" (assignment_expression "uVar4 = bVar1 | 0xffffff80" identifier = (binary_expression "bVar1 | 0xffffff80" identifier | number_literal)) ;) })) }))) (expression_statement "param_3[4] = param_3[4] + uVar4;" (assignment_expression "param_3[4] = param_3[4] + uVar4" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (binary_expression "param_3[4] + uVar4" (subscript_expression "param_3[4]" identifier [ number_literal ]) + identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "*param_3 = uVar4;" (assignment_expression "*param_3 = uVar4" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" { (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) })) (expression_statement "param_3[5] = uVar4;" (assignment_expression "param_3[5] = uVar4" (subscript_expression "param_3[5]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;" case number_literal : (expression_statement "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;" (assignment_expression "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1" (pointer_expression "*(byte *)(param_3 + 7)" * (cast_expression "(byte *)(param_3 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 7)" ( (binary_expression "param_3 + 7" identifier + number_literal) )))) = (binary_expression "(byte)param_3[7] ^ 1" (cast_expression "(byte)param_3[7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_3[7]" identifier [ number_literal ])) ^ number_literal)) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;" case number_literal : (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;" case number_literal : (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" ( (binary_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" ( (binary_expression "(long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)" (cast_expression "(long)(ulong)(~(uint)bVar2 & 0xff)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (call_expression "(ulong)(~(uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(~(uint)bVar2 & 0xff)" ( (binary_expression "~(uint)bVar2 & 0xff" (unary_expression "~(uint)bVar2" ~ (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) / (cast_expression "(long)*(int *)(param_1 + 0x34)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))))) ))) * (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ))))) ;) (break_statement "break;" break ;)) (case_statement "case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;" case number_literal : (expression_statement "lVar10 = 3;" (assignment_expression "lVar10 = 3" identifier = number_literal) ;) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(ulong)CONCAT11(param_2[1],param_2[2])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(param_2[1],param_2[2])" identifier (argument_list "(param_2[1],param_2[2])" ( (subscript_expression "param_2[1]" identifier [ number_literal ]) , (subscript_expression "param_2[2]" identifier [ number_literal ]) )))))) ;) (break_statement "break;" break ;)) (case_statement "default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" default : (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" identifier = (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" if (parenthesized_expression "(*(char *)(lVar9 + (ulong)bVar1) == '\0')" ( (binary_expression "*(char *)(lVar9 + (ulong)bVar1) == '\0'" (pointer_expression "*(char *)(lVar9 + (ulong)bVar1)" * (cast_expression "(char *)(lVar9 + (ulong)bVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + (ulong)bVar1)" ( (binary_expression "lVar9 + (ulong)bVar1" identifier + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar10 = 1;\n    }" { (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" else (compound_statement "{\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (expression_statement "pbVar12 = param_2 + 1;" (assignment_expression "pbVar12 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (do_statement "do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));" do (compound_statement "{\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      }" { (expression_statement "pbVar11 = pbVar12 + 1;" (assignment_expression "pbVar11 = pbVar12 + 1" identifier = (binary_expression "pbVar12 + 1" identifier + number_literal)) ;) (expression_statement "lVar5 = 1;" (assignment_expression "lVar5 = 1" identifier = number_literal) ;) (if_statement "if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" if (parenthesized_expression "((char)*pbVar12 < '\0')" ( (binary_expression "(char)*pbVar12 < '\0'" (cast_expression "(char)*pbVar12" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*pbVar12" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" { (expression_statement "FUN_00379ff0(pbVar11,&local_68);" (call_expression "FUN_00379ff0(pbVar11,&local_68)" identifier (argument_list "(pbVar11,&local_68)" ( identifier , (pointer_expression "&local_68" & identifier) ))) ;) (expression_statement "lVar5 = CONCAT44(uStack_64,local_68);" (assignment_expression "lVar5 = CONCAT44(uStack_64,local_68)" identifier = (call_expression "CONCAT44(uStack_64,local_68)" identifier (argument_list "(uStack_64,local_68)" ( identifier , identifier )))) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" identifier = (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "pbVar11 = pbVar12 + lVar5;" (assignment_expression "pbVar11 = pbVar12 + lVar5" identifier = (binary_expression "pbVar12 + lVar5" identifier + identifier)) ;) })) (expression_statement "lVar10 = lVar10 + lVar5;" (assignment_expression "lVar10 = lVar10 + lVar5" identifier = (binary_expression "lVar10 + lVar5" identifier + identifier)) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "pbVar12 = pbVar11;" (assignment_expression "pbVar12 = pbVar11" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1))" ( (binary_expression "iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" identifier < (binary_expression "(int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)(lVar9 + (ulong)bVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + (ulong)bVar1)" ( (binary_expression "lVar9 + (ulong)bVar1" identifier + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ))))) )) ;) })))) })) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* DWARF original prototype: bool process_one_opcode(Sized_dwarf_line_info<32,_true> * this, uchar *\n   start, LineStateMachine * lsm, size_t * len) */\n\nbool __thiscall\ngold::Sized_dwarf_line_info<32,_true>::process_one_opcode\n          (Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)\n\n{\n  _Rb_tree_header *p_Var1;\n  byte bVar2;\n  byte bVar3;\n  char cVar4;\n  uchar uVar5;\n  pointer pvVar6;\n  pointer pvVar7;\n  bool bVar8;\n  uint uVar9;\n  long lVar10;\n  int64_t iVar11;\n  ulong uVar12;\n  uint64_t uVar13;\n  size_t sVar14;\n  _Base_ptr p_Var15;\n  _Base_ptr p_Var16;\n  _Base_ptr p_Var17;\n  pointer puVar18;\n  size_t sVar19;\n  uchar *puVar20;\n  uchar *puVar21;\n  int iVar22;\n  size_t templen;\n  size_t templen_1;\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_60;\n  \n  bVar2 = *start;\n  bVar3 = (this->header_).opcode_base;\n  if (bVar3 <= bVar2) {\n    lVar10 = (long)(this->header_).line_range;\n    uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff);\n    lsm->address = lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length);\n    cVar4 = (this->header_).line_base;\n    lsm->basic_block = true;\n    lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10);\n    *len = 1;\n    return true;\n  }\n  switch(bVar2) {\n  case 0:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    puVar20 = start + 1 + templen;\n    sVar19 = templen + 1 + uVar12;\n    uVar5 = *puVar20;\n    puVar21 = puVar20 + 1;\n    if (uVar5 == '\x02') {\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }\n    else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }\n    break;\n  case 1:\n    lsm->basic_block = false;\n    *len = 1;\n    return true;\n  case 2:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    sVar19 = templen + 1;\n    lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;\n    break;\n  case 3:\n    bVar2 = start[1];\n    if ((char)bVar2 < '\0') {\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }\n    else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }\n    lsm->line_num = lsm->line_num + uVar9;\n    break;\n  case 4:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }\n    else {\n      templen = 1;\n    }\n    lsm->file_num = uVar9;\n    sVar19 = templen + 1;\n    break;\n  case 5:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    sVar19 = 2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }\n    lsm->column_num = uVar9;\n    break;\n  case 6:\n    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);\n    sVar19 = 1;\n    break;\n  case 7:\n    lsm->basic_block = true;\n    sVar19 = 1;\n    break;\n  case 8:\n    sVar19 = 1;\n    lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length);\n    break;\n  case 9:\n    sVar19 = 3;\n    lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);\n    break;\n  default:\n    puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl._M_start;\n    if (puVar18[bVar2] == '\0') {\n      sVar19 = 1;\n    }\n    else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }\n  }\n  *len = sVar19;\n  return false;\n}\n\n" comment comment (declaration "bool __thiscall\ngold::Sized_dwarf_line_info<32,_true>::process_one_opcode\n          (Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)\n\n{\n  _Rb_tree_header *p_Var1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<32" < number_literal) , (ERROR "_true>::process_one_opcode\n          (Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)\n\n{\n  _Rb_tree_header" identifier > : : (function_declarator "process_one_opcode\n          (Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)" identifier (parameter_list "(Sized_dwarf_line_info<32,_true> *this,uchar *start,LineStateMachine *lsm,size_t *len)" ( (parameter_declaration "Sized_dwarf_line_info" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_true> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "uchar *start" type_identifier (pointer_declarator "*start" * identifier)) , (parameter_declaration "LineStateMachine *lsm" type_identifier (pointer_declarator "*lsm" * identifier)) , (parameter_declaration "size_t *len" primitive_type (pointer_declarator "*len" * identifier)) ))) { identifier) (pointer_declarator "*p_Var1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "uchar uVar5;" type_identifier identifier ;) (declaration "pointer pvVar6;" type_identifier identifier ;) (declaration "pointer pvVar7;" type_identifier identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "int64_t iVar11;" primitive_type identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "uint64_t uVar13;" primitive_type identifier ;) (declaration "size_t sVar14;" primitive_type identifier ;) (declaration "_Base_ptr p_Var15;" type_identifier identifier ;) (declaration "_Base_ptr p_Var16;" type_identifier identifier ;) (declaration "_Base_ptr p_Var17;" type_identifier identifier ;) (declaration "pointer puVar18;" type_identifier identifier ;) (declaration "size_t sVar19;" primitive_type identifier ;) (declaration "uchar *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "uchar *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "size_t templen;" primitive_type identifier ;) (declaration "size_t templen_1;" primitive_type identifier ;) (ERROR "basic_string<char," (binary_expression "basic_string<char" identifier < identifier) ,) (labeled_statement "_std::char_traits<char>,_std::allocator<char>_> local_60;" statement_identifier (ERROR "::char_traits<char>,_std:" : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) :) : (expression_statement "allocator<char>_> local_60;" (binary_expression "allocator<char>_> local_60" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) ;)) (expression_statement "bVar2 = *start;" (assignment_expression "bVar2 = *start" identifier = (pointer_expression "*start" * identifier)) ;) (expression_statement "bVar3 = (this->header_).opcode_base;" (assignment_expression "bVar3 = (this->header_).opcode_base" identifier = (field_expression "(this->header_).opcode_base" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (bVar3 <= bVar2) {\n    lVar10 = (long)(this->header_).line_range;\n    uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff);\n    lsm->address = lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length);\n    cVar4 = (this->header_).line_base;\n    lsm->basic_block = true;\n    lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10);\n    *len = 1;\n    return true;\n  }" if (parenthesized_expression "(bVar3 <= bVar2)" ( (binary_expression "bVar3 <= bVar2" identifier <= identifier) )) (compound_statement "{\n    lVar10 = (long)(this->header_).line_range;\n    uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff);\n    lsm->address = lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length);\n    cVar4 = (this->header_).line_base;\n    lsm->basic_block = true;\n    lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10);\n    *len = 1;\n    return true;\n  }" { (expression_statement "lVar10 = (long)(this->header_).line_range;" (assignment_expression "lVar10 = (long)(this->header_).line_range" identifier = (cast_expression "(long)(this->header_).line_range" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->header_).line_range" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff);" (assignment_expression "uVar12 = (ulong)((uint)bVar2 - (uint)bVar3 & 0xff)" identifier = (call_expression "(ulong)((uint)bVar2 - (uint)bVar3 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)bVar2 - (uint)bVar3 & 0xff)" ( (binary_expression "(uint)bVar2 - (uint)bVar3 & 0xff" (binary_expression "(uint)bVar2 - (uint)bVar3" (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier) - (cast_expression "(uint)bVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) ;) (expression_statement "lsm->address = lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length);" (assignment_expression "lsm->address = lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length)" (field_expression "lsm->address" identifier -> field_identifier) = (binary_expression "lsm->address +\n                   (long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length)" (field_expression "lsm->address" identifier -> field_identifier) + (cast_expression "(long)((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)uVar12 / lVar10) * (this->header_).min_insn_length)" ( (binary_expression "(int)((long)uVar12 / lVar10) * (this->header_).min_insn_length" (cast_expression "(int)((long)uVar12 / lVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar12 / lVar10)" ( (binary_expression "(long)uVar12 / lVar10" (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) / identifier) ))) * (field_expression "(this->header_).min_insn_length" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier)) ))))) ;) (expression_statement "cVar4 = (this->header_).line_base;" (assignment_expression "cVar4 = (this->header_).line_base" identifier = (field_expression "(this->header_).line_base" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "lsm->basic_block = true;" (assignment_expression "lsm->basic_block = true" (field_expression "lsm->basic_block" identifier -> field_identifier) = true) ;) (expression_statement "lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10);" (assignment_expression "lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10)" (field_expression "lsm->line_num" identifier -> field_identifier) = (binary_expression "lsm->line_num + (int)cVar4 + (int)((long)uVar12 % lVar10)" (binary_expression "lsm->line_num + (int)cVar4" (field_expression "lsm->line_num" identifier -> field_identifier) + (cast_expression "(int)cVar4" ( (type_descriptor "int" primitive_type) ) identifier)) + (cast_expression "(int)((long)uVar12 % lVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar12 % lVar10)" ( (binary_expression "(long)uVar12 % lVar10" (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) % identifier) ))))) ;) (expression_statement "*len = 1;" (assignment_expression "*len = 1" (pointer_expression "*len" * identifier) = number_literal) ;) (return_statement "return true;" return true ;) })) (switch_statement "switch(bVar2) {\n  case 0:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    puVar20 = start + 1 + templen;\n    sVar19 = templen + 1 + uVar12;\n    uVar5 = *puVar20;\n    puVar21 = puVar20 + 1;\n    if (uVar5 == '\x02') {\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }\n    else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }\n    break;\n  case 1:\n    lsm->basic_block = false;\n    *len = 1;\n    return true;\n  case 2:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    sVar19 = templen + 1;\n    lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;\n    break;\n  case 3:\n    bVar2 = start[1];\n    if ((char)bVar2 < '\0') {\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }\n    else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }\n    lsm->line_num = lsm->line_num + uVar9;\n    break;\n  case 4:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }\n    else {\n      templen = 1;\n    }\n    lsm->file_num = uVar9;\n    sVar19 = templen + 1;\n    break;\n  case 5:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    sVar19 = 2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }\n    lsm->column_num = uVar9;\n    break;\n  case 6:\n    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);\n    sVar19 = 1;\n    break;\n  case 7:\n    lsm->basic_block = true;\n    sVar19 = 1;\n    break;\n  case 8:\n    sVar19 = 1;\n    lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length);\n    break;\n  case 9:\n    sVar19 = 3;\n    lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);\n    break;\n  default:\n    puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl._M_start;\n    if (puVar18[bVar2] == '\0') {\n      sVar19 = 1;\n    }\n    else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }\n  }" switch (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n  case 0:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    puVar20 = start + 1 + templen;\n    sVar19 = templen + 1 + uVar12;\n    uVar5 = *puVar20;\n    puVar21 = puVar20 + 1;\n    if (uVar5 == '\x02') {\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }\n    else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }\n    break;\n  case 1:\n    lsm->basic_block = false;\n    *len = 1;\n    return true;\n  case 2:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    sVar19 = templen + 1;\n    lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;\n    break;\n  case 3:\n    bVar2 = start[1];\n    if ((char)bVar2 < '\0') {\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }\n    else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }\n    lsm->line_num = lsm->line_num + uVar9;\n    break;\n  case 4:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }\n    else {\n      templen = 1;\n    }\n    lsm->file_num = uVar9;\n    sVar19 = templen + 1;\n    break;\n  case 5:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    sVar19 = 2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }\n    lsm->column_num = uVar9;\n    break;\n  case 6:\n    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);\n    sVar19 = 1;\n    break;\n  case 7:\n    lsm->basic_block = true;\n    sVar19 = 1;\n    break;\n  case 8:\n    sVar19 = 1;\n    lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length);\n    break;\n  case 9:\n    sVar19 = 3;\n    lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);\n    break;\n  default:\n    puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl._M_start;\n    if (puVar18[bVar2] == '\0') {\n      sVar19 = 1;\n    }\n    else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }\n  }" { (case_statement "case 0:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    puVar20 = start + 1 + templen;\n    sVar19 = templen + 1 + uVar12;\n    uVar5 = *puVar20;\n    puVar21 = puVar20 + 1;\n    if (uVar5 == '\x02') {\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }\n    else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }\n    break;" case number_literal : (expression_statement "bVar2 = start[1];" (assignment_expression "bVar2 = start[1]" identifier = (subscript_expression "start[1]" identifier [ number_literal ])) ;) (expression_statement "uVar12 = (ulong)bVar2;" (assignment_expression "uVar12 = (ulong)bVar2" identifier = (cast_expression "(ulong)bVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }" { (expression_statement "uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);" (assignment_expression "uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier = (call_expression "read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier (argument_list "(start + 2,&templen,bVar2)" ( (binary_expression "start + 2" identifier + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) }) (else_clause "else {\n      templen = 1;\n    }" else (compound_statement "{\n      templen = 1;\n    }" { (expression_statement "templen = 1;" (assignment_expression "templen = 1" identifier = number_literal) ;) }))) (expression_statement "puVar20 = start + 1 + templen;" (assignment_expression "puVar20 = start + 1 + templen" identifier = (binary_expression "start + 1 + templen" (binary_expression "start + 1" identifier + number_literal) + identifier)) ;) (expression_statement "sVar19 = templen + 1 + uVar12;" (assignment_expression "sVar19 = templen + 1 + uVar12" identifier = (binary_expression "templen + 1 + uVar12" (binary_expression "templen + 1" identifier + number_literal) + identifier)) ;) (expression_statement "uVar5 = *puVar20;" (assignment_expression "uVar5 = *puVar20" identifier = (pointer_expression "*puVar20" * identifier)) ;) (expression_statement "puVar21 = puVar20 + 1;" (assignment_expression "puVar21 = puVar20 + 1" identifier = (binary_expression "puVar20 + 1" identifier + number_literal)) ;) (if_statement "if (uVar5 == '\x02') {\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }\n    else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" if (parenthesized_expression "(uVar5 == '\x02')" ( (binary_expression "uVar5 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n      uVar9 = *(uint *)(puVar20 + 1);\n      p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n      p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;\n      lVar10 = (long)puVar21 - (long)this->buffer_;\n      uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);\n      lsm->address = uVar12;\n      p_Var17 = &p_Var1->_M_header;\n      if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }\n      bVar8 = input_is_relobj(this);\n      if (bVar8) {\n        this->data_valid_ = false;\n      }\n    }" { (expression_statement "uVar9 = *(uint *)(puVar20 + 1);" (assignment_expression "uVar9 = *(uint *)(puVar20 + 1)" identifier = (pointer_expression "*(uint *)(puVar20 + 1)" * (cast_expression "(uint *)(puVar20 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar20 + 1)" ( (binary_expression "puVar20 + 1" identifier + number_literal) ))))) ;) (expression_statement "p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;" (assignment_expression "p_Var16 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" identifier = (field_expression "(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" (field_expression "(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header" (field_expression "(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->reloc_map_)._M_t._M_impl" (field_expression "(this->reloc_map_)._M_t" (parenthesized_expression "(this->reloc_map_)" ( (field_expression "this->reloc_map_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier) . field_identifier)) ;) (expression_statement "p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;" (assignment_expression "p_Var1 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header" identifier = (pointer_expression "&(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header" & (field_expression "(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->reloc_map_)._M_t._M_impl" (field_expression "(this->reloc_map_)._M_t" (parenthesized_expression "(this->reloc_map_)" ( (field_expression "this->reloc_map_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier))) ;) (expression_statement "lVar10 = (long)puVar21 - (long)this->buffer_;" (assignment_expression "lVar10 = (long)puVar21 - (long)this->buffer_" identifier = (binary_expression "(long)puVar21 - (long)this->buffer_" (cast_expression "(long)puVar21" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)this->buffer_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "this->buffer_" identifier -> field_identifier)))) ;) (expression_statement "uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18);" (assignment_expression "uVar12 = (ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18)" identifier = (call_expression "(ulong)(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18)" ( (binary_expression "uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8 |\n                      uVar9 << 0x18" (binary_expression "uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8 | (uVar9 & 0xff00) << 8" (binary_expression "uVar9 >> 0x18 | (uVar9 & 0xff0000) >> 8" (binary_expression "uVar9 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar9 & 0xff0000) >> 8" (parenthesized_expression "(uVar9 & 0xff0000)" ( (binary_expression "uVar9 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar9 & 0xff00) << 8" (parenthesized_expression "(uVar9 & 0xff00)" ( (binary_expression "uVar9 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar9 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "lsm->address = uVar12;" (assignment_expression "lsm->address = uVar12" (field_expression "lsm->address" identifier -> field_identifier) = identifier) ;) (expression_statement "p_Var17 = &p_Var1->_M_header;" (assignment_expression "p_Var17 = &p_Var1->_M_header" identifier = (pointer_expression "&p_Var1->_M_header" & (field_expression "p_Var1->_M_header" identifier -> field_identifier))) ;) (if_statement "if (p_Var16 != (_Base_ptr)0x0) {\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }" if (parenthesized_expression "(p_Var16 != (_Base_ptr)0x0)" ( (binary_expression "p_Var16 != (_Base_ptr)0x0" identifier != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) (compound_statement "{\n        do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);\n        if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }\n      }" { (do_statement "do {\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        } while (p_Var15 != (_Base_ptr)0x0);" do (compound_statement "{\n          if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }\n          p_Var16 = p_Var15;\n        }" { (if_statement "if (*(long *)(p_Var16 + 1) < lVar10) {\n            p_Var15 = p_Var16->_M_right;\n          }\n          else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }" if (parenthesized_expression "(*(long *)(p_Var16 + 1) < lVar10)" ( (binary_expression "*(long *)(p_Var16 + 1) < lVar10" (pointer_expression "*(long *)(p_Var16 + 1)" * (cast_expression "(long *)(p_Var16 + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var16 + 1)" ( (binary_expression "p_Var16 + 1" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n            p_Var15 = p_Var16->_M_right;\n          }" { (expression_statement "p_Var15 = p_Var16->_M_right;" (assignment_expression "p_Var15 = p_Var16->_M_right" identifier = (field_expression "p_Var16->_M_right" identifier -> field_identifier)) ;) }) (else_clause "else {\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }" else (compound_statement "{\n            p_Var15 = p_Var16->_M_left;\n            p_Var17 = p_Var16;\n          }" { (expression_statement "p_Var15 = p_Var16->_M_left;" (assignment_expression "p_Var15 = p_Var16->_M_left" identifier = (field_expression "p_Var16->_M_left" identifier -> field_identifier)) ;) (expression_statement "p_Var17 = p_Var16;" (assignment_expression "p_Var17 = p_Var16" identifier = identifier) ;) }))) (expression_statement "p_Var16 = p_Var15;" (assignment_expression "p_Var16 = p_Var15" identifier = identifier) ;) }) while (parenthesized_expression "(p_Var15 != (_Base_ptr)0x0)" ( (binary_expression "p_Var15 != (_Base_ptr)0x0" identifier != (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) ;) (if_statement "if ((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)) {\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }" if (parenthesized_expression "((p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10))" ( (binary_expression "(p_Var1 != (_Rb_tree_header *)p_Var17) && (*(long *)(p_Var17 + 1) <= lVar10)" (parenthesized_expression "(p_Var1 != (_Rb_tree_header *)p_Var17)" ( (binary_expression "p_Var1 != (_Rb_tree_header *)p_Var17" identifier != (cast_expression "(_Rb_tree_header *)p_Var17" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) && (parenthesized_expression "(*(long *)(p_Var17 + 1) <= lVar10)" ( (binary_expression "*(long *)(p_Var17 + 1) <= lVar10" (pointer_expression "*(long *)(p_Var17 + 1)" * (cast_expression "(long *)(p_Var17 + 1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var17 + 1)" ( (binary_expression "p_Var17 + 1" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n          if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }\n          uVar9 = *(uint *)&p_Var17[1]._M_parent;\n          lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;\n          lsm->shndx = uVar9;\n          break;\n        }" { (if_statement "if (this->track_relocs_type_ == 4) {\n            uVar12 = 0;\n          }" if (parenthesized_expression "(this->track_relocs_type_ == 4)" ( (binary_expression "this->track_relocs_type_ == 4" (field_expression "this->track_relocs_type_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n            uVar12 = 0;\n          }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) })) (expression_statement "uVar9 = *(uint *)&p_Var17[1]._M_parent;" (assignment_expression "uVar9 = *(uint *)&p_Var17[1]._M_parent" identifier = (pointer_expression "*(uint *)&p_Var17[1]._M_parent" * (cast_expression "(uint *)&p_Var17[1]._M_parent" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p_Var17[1]._M_parent" & (field_expression "p_Var17[1]._M_parent" (subscript_expression "p_Var17[1]" identifier [ number_literal ]) . field_identifier))))) ;) (expression_statement "lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12;" (assignment_expression "lsm->address = (long)&(p_Var17[1]._M_left)->_M_color + uVar12" (field_expression "lsm->address" identifier -> field_identifier) = (binary_expression "(long)&(p_Var17[1]._M_left)->_M_color + uVar12" (cast_expression "(long)&(p_Var17[1]._M_left)->_M_color" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(p_Var17[1]._M_left)->_M_color" & (field_expression "(p_Var17[1]._M_left)->_M_color" (parenthesized_expression "(p_Var17[1]._M_left)" ( (field_expression "p_Var17[1]._M_left" (subscript_expression "p_Var17[1]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + identifier)) ;) (expression_statement "lsm->shndx = uVar9;" (assignment_expression "lsm->shndx = uVar9" (field_expression "lsm->shndx" identifier -> field_identifier) = identifier) ;) (break_statement "break;" break ;) })) })) (expression_statement "bVar8 = input_is_relobj(this);" (assignment_expression "bVar8 = input_is_relobj(this)" identifier = (call_expression "input_is_relobj(this)" identifier (argument_list "(this)" ( identifier )))) ;) (if_statement "if (bVar8) {\n        this->data_valid_ = false;\n      }" if (parenthesized_expression "(bVar8)" ( identifier )) (compound_statement "{\n        this->data_valid_ = false;\n      }" { (expression_statement "this->data_valid_ = false;" (assignment_expression "this->data_valid_ = false" (field_expression "this->data_valid_" identifier -> field_identifier) = false) ;) })) }) (else_clause "else if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" else (if_statement "if (uVar5 == '\x03') {\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }\n    else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" if (parenthesized_expression "(uVar5 == '\x03')" ( (binary_expression "uVar5 == '\x03'" identifier == (char_literal "'\x03'" ' escape_sequence ')) )) (compound_statement "{\n      sVar14 = strlen((char *)puVar21);\n      templen = sVar14 + 1;\n      bVar2 = puVar21[templen];\n      uVar12 = (ulong)bVar2;\n      if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }\n      pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;\n      pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;\n      if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }\n      templen_1._0_4_ = (undefined4)uVar12;\n      local_60._M_dataplus._M_p = (pointer)&local_60.field_2;\n      sVar14 = strlen((char *)puVar21);\n      std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);\n                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */\n      std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }\n    }" { (expression_statement "sVar14 = strlen((char *)puVar21);" (assignment_expression "sVar14 = strlen((char *)puVar21)" identifier = (call_expression "strlen((char *)puVar21)" identifier (argument_list "((char *)puVar21)" ( (cast_expression "(char *)puVar21" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "templen = sVar14 + 1;" (assignment_expression "templen = sVar14 + 1" identifier = (binary_expression "sVar14 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = puVar21[templen];" (assignment_expression "bVar2 = puVar21[templen]" identifier = (subscript_expression "puVar21[templen]" identifier [ identifier ])) ;) (expression_statement "uVar12 = (ulong)bVar2;" (assignment_expression "uVar12 = (ulong)bVar2" identifier = (cast_expression "(ulong)bVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar2 < '\0') {\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }\n      else {\n        templen = 1;\n      }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);\n      }" { (expression_statement "uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2);" (assignment_expression "uVar12 = read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2)" identifier = (call_expression "read_unsigned_LEB_128_x(puVar21 + templen + 1,&templen,bVar2)" identifier (argument_list "(puVar21 + templen + 1,&templen,bVar2)" ( (binary_expression "puVar21 + templen + 1" (binary_expression "puVar21 + templen" identifier + identifier) + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) }) (else_clause "else {\n        templen = 1;\n      }" else (compound_statement "{\n        templen = 1;\n      }" { (expression_statement "templen = 1;" (assignment_expression "templen = 1" identifier = number_literal) ;) }))) (ERROR "pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>,_std::allocator<std::vector<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char,_std" (binary_expression "pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std::__cxx11::basic_string<char" (binary_expression "pvVar6 = (this->directories_).\n               super__Vector_base<std::vector<std" (assignment_expression "pvVar6 = (this->directories_).\n               super__Vector_base<std" identifier = (binary_expression "(this->directories_).\n               super__Vector_base<std" (field_expression "(this->directories_).\n               super__Vector_base" (parenthesized_expression "(this->directories_)" ( (field_expression "this->directories_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::__cxx11::basic_string" : : identifier : : identifier) < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>_>_>,_std" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (binary_expression "vector<std" identifier < identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>,_std" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish;" (field_expression "allocator<char>_>_>_>_>_>\n               ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>_>_>\n               ._M_impl" (binary_expression "allocator<char>_>_>_>_>_" (binary_expression "allocator<char>_>_>_>_" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (ERROR "pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>,_std::allocator<std::vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int,_std" (binary_expression "pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std::pair<int" (binary_expression "pvVar7 = (this->files_).\n               super__Vector_base<std::vector<std" (assignment_expression "pvVar7 = (this->files_).\n               super__Vector_base<std" identifier = (binary_expression "(this->files_).\n               super__Vector_base<std" (field_expression "(this->files_).\n               super__Vector_base" (parenthesized_expression "(this->files_)" ( (field_expression "this->files_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::vector" : : identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) , identifier) : : identifier : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<char>_>_>,_std" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>_>_>_>,_std" (binary_expression "allocator<char>_>_>_>_" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (binary_expression "vector<std" identifier < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>_>,_std" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish;" (field_expression "allocator<char>_>_>_>_>_>_>\n               ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>_>_>_>\n               ._M_impl" (binary_expression "allocator<char>_>_>_>_>_>_" (binary_expression "allocator<char>_>_>_>_>_" (binary_expression "allocator<char>_>_>_>_" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if ((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12) {\n        uVar12 = 0;\n      }" if (parenthesized_expression "((ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12)" ( (binary_expression "(ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5) <= uVar12" (call_expression "(ulong)((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>,_std::allocator<std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5)" ( (binary_expression "(long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::basic_string<char" (binary_expression "(long)pvVar6[-1].\n                        super__Vector_base<std" (cast_expression "(long)pvVar6[-1].\n                        super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pvVar6[-1].\n                        super__Vector_base" (subscript_expression "pvVar6[-1]" identifier [ number_literal ]) . field_identifier)) < identifier) (ERROR "::__cxx11::basic_string" : : identifier : : identifier) < identifier) , (ERROR "_std::" identifier : :) (binary_expression "char_traits<char" identifier < identifier) (ERROR ">" >) , (ERROR "_std::" identifier : :) (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) (ERROR ">" >) , (ERROR "_std::allocator<std::__cxx11::" identifier : : (binary_expression "allocator<std" identifier < identifier) : : identifier : :) (binary_expression "basic_string<char" identifier < identifier) , (ERROR "_std::" identifier : :) (binary_expression "char_traits<char" identifier < identifier) (ERROR ">" >) , (ERROR "_std::allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std::__cxx11::" identifier : : (binary_expression "allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base<std" (binary_expression "allocator<char>_>_>_>\n                        ._M_impl._M_finish -\n                  (long)pvVar6[-1].\n                        super__Vector_base" (field_expression "allocator<char>_>_>_>\n                        ._M_impl._M_finish" (field_expression "allocator<char>_>_>_>\n                        ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(long)pvVar6[-1].\n                        super__Vector_base" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pvVar6[-1].\n                        super__Vector_base" (subscript_expression "pvVar6[-1]" identifier [ number_literal ]) . field_identifier))) < identifier) : : identifier : :) (binary_expression "basic_string<char" identifier < identifier) , (ERROR "_std::" identifier : :) (binary_expression "char_traits<char" identifier < identifier) (ERROR ">" >) , (ERROR "_std::" identifier : :) (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) (ERROR ">" >) , (ERROR "_std::allocator<std::__cxx11::" identifier : : (binary_expression "allocator<std" identifier < identifier) : : identifier : :) (binary_expression "basic_string<char" identifier < identifier) , (ERROR "_std::" identifier : :) (binary_expression "char_traits<char" identifier < identifier) (ERROR ">" >) , (ERROR "_std::" identifier : :) (binary_expression "allocator<char>_>_>_>\n                        ._M_impl._M_start >> 5" (field_expression "allocator<char>_>_>_>\n                        ._M_impl._M_start" (field_expression "allocator<char>_>_>_>\n                        ._M_impl" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) >> number_literal) ))) <= identifier) )) (compound_statement "{\n        uVar12 = 0;\n      }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) })) (expression_statement "templen_1._0_4_ = (undefined4)uVar12;" (assignment_expression "templen_1._0_4_ = (undefined4)uVar12" (field_expression "templen_1._0_4_" identifier . field_identifier) = (cast_expression "(undefined4)uVar12" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (expression_statement "local_60._M_dataplus._M_p = (pointer)&local_60.field_2;" (assignment_expression "local_60._M_dataplus._M_p = (pointer)&local_60.field_2" (field_expression "local_60._M_dataplus._M_p" (field_expression "local_60._M_dataplus" identifier . field_identifier) . field_identifier) = (binary_expression "(pointer)&local_60.field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "local_60.field_2" identifier . field_identifier))) ;) (expression_statement "sVar14 = strlen((char *)puVar21);" (assignment_expression "sVar14 = strlen((char *)puVar21)" identifier = (call_expression "strlen((char *)puVar21)" identifier (argument_list "((char *)puVar21)" ( (cast_expression "(char *)puVar21" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (labeled_statement "std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n      _M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);" statement_identifier (ERROR "::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>:" : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > :) : (expression_statement "_M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14);" (binary_expression "_M_construct<char_const*>(&local_60,puVar21,puVar21 + sVar14)" (binary_expression "_M_construct<char_const" identifier < identifier) (ERROR "*" *) > (parenthesized_expression "(&local_60,puVar21,puVar21 + sVar14)" ( (comma_expression "&local_60,puVar21,puVar21 + sVar14" (pointer_expression "&local_60" & identifier) , (comma_expression "puVar21,puVar21 + sVar14" identifier , (binary_expression "puVar21 + sVar14" identifier + identifier))) ))) ;)) comment (ERROR "std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std::allocator<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>_>_>\n      ::\n      emplace_back<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "std::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>,_std" identifier (ERROR "::\n      vector<std::pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>" : : (binary_expression "vector<std" identifier < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) >) , identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : : (binary_expression "allocator<char>_>_>_>_>\n      ::\n      emplace_back<std" (binary_expression "allocator<char>_>_>_>_>\n      ::\n      emplace_back" (binary_expression "allocator<char>_>_>_>_" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > identifier) > (ERROR "::" : :) identifier) < identifier) : : (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1);" (binary_expression "allocator<char>_>_>_>\n                (pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1)" (binary_expression "allocator<char>_>_>_" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > identifier) > (parenthesized_expression "(pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1)" ( (comma_expression "pvVar7 + -1,\n                 (pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1" (binary_expression "pvVar7 + -1" identifier + number_literal) , (binary_expression "(pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)&templen_1" (parenthesized_expression "(pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_>\n                  *)" ( (ERROR "pair<int,_std::__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "pair<int,_std" (binary_expression "pair<int" identifier < identifier) , identifier) : : identifier : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_>\n                  *" (binary_expression "allocator<char>_>_" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) > (pointer_expression "*" * identifier)) )) & identifier)) ))) ;) (if_statement "if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2) {\n        operator_delete(local_60._M_dataplus._M_p);\n      }" if (parenthesized_expression "((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2)" ( (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2)" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n           *)local_60._M_dataplus._M_p != &local_60.field_2" (binary_expression "allocator<char>_>_9\n           *)local_60._M_dataplus._M_p" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n           *)local_60._M_dataplus._M_p" identifier * (ERROR ")" )) (field_expression "local_60._M_dataplus._M_p" (field_expression "local_60._M_dataplus" identifier . field_identifier) . field_identifier))) != (pointer_expression "&local_60.field_2" & (field_expression "local_60.field_2" identifier . field_identifier))) )) )) (compound_statement "{\n        operator_delete(local_60._M_dataplus._M_p);\n      }" { (expression_statement "operator_delete(local_60._M_dataplus._M_p);" (call_expression "operator_delete(local_60._M_dataplus._M_p)" identifier (argument_list "(local_60._M_dataplus._M_p)" ( (field_expression "local_60._M_dataplus._M_p" (field_expression "local_60._M_dataplus" identifier . field_identifier) . field_identifier) ))) ;) })) }) (else_clause "else if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" else (if_statement "if (uVar5 == '\x01') {\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" if (parenthesized_expression "(uVar5 == '\x01')" ( (binary_expression "uVar5 == '\x01'" identifier == (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n      lsm->line_num = -1;\n      lsm->end_sequence = true;\n      *len = sVar19;\n      return true;\n    }" { (expression_statement "lsm->line_num = -1;" (assignment_expression "lsm->line_num = -1" (field_expression "lsm->line_num" identifier -> field_identifier) = number_literal) ;) (expression_statement "lsm->end_sequence = true;" (assignment_expression "lsm->end_sequence = true" (field_expression "lsm->end_sequence" identifier -> field_identifier) = true) ;) (expression_statement "*len = sVar19;" (assignment_expression "*len = sVar19" (pointer_expression "*len" * identifier) = identifier) ;) (return_statement "return true;" return true ;) })))))) (break_statement "break;" break ;)) (case_statement "case 1:\n    lsm->basic_block = false;\n    *len = 1;\n    return true;" case number_literal : (expression_statement "lsm->basic_block = false;" (assignment_expression "lsm->basic_block = false" (field_expression "lsm->basic_block" identifier -> field_identifier) = false) ;) (expression_statement "*len = 1;" (assignment_expression "*len = 1" (pointer_expression "*len" * identifier) = number_literal) ;) (return_statement "return true;" return true ;)) (case_statement "case 2:\n    bVar2 = start[1];\n    uVar12 = (ulong)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }\n    sVar19 = templen + 1;\n    lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;\n    break;" case number_literal : (expression_statement "bVar2 = start[1];" (assignment_expression "bVar2 = start[1]" identifier = (subscript_expression "start[1]" identifier [ number_literal ])) ;) (expression_statement "uVar12 = (ulong)bVar2;" (assignment_expression "uVar12 = (ulong)bVar2" identifier = (cast_expression "(ulong)bVar2" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar2 < '\0') {\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }\n    else {\n      templen = 1;\n    }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n    }" { (expression_statement "uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);" (assignment_expression "uVar12 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier = (call_expression "read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier (argument_list "(start + 2,&templen,bVar2)" ( (binary_expression "start + 2" identifier + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) }) (else_clause "else {\n      templen = 1;\n    }" else (compound_statement "{\n      templen = 1;\n    }" { (expression_statement "templen = 1;" (assignment_expression "templen = 1" identifier = number_literal) ;) }))) (expression_statement "sVar19 = templen + 1;" (assignment_expression "sVar19 = templen + 1" identifier = (binary_expression "templen + 1" identifier + number_literal)) ;) (expression_statement "lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length;" (assignment_expression "lsm->address = lsm->address + uVar12 * (long)(this->header_).min_insn_length" (field_expression "lsm->address" identifier -> field_identifier) = (binary_expression "lsm->address + uVar12 * (long)(this->header_).min_insn_length" (field_expression "lsm->address" identifier -> field_identifier) + (binary_expression "uVar12 * (long)(this->header_).min_insn_length" identifier * (cast_expression "(long)(this->header_).min_insn_length" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->header_).min_insn_length" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier))))) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    bVar2 = start[1];\n    if ((char)bVar2 < '\0') {\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }\n    else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }\n    lsm->line_num = lsm->line_num + uVar9;\n    break;" case number_literal : (expression_statement "bVar2 = start[1];" (assignment_expression "bVar2 = start[1]" identifier = (subscript_expression "start[1]" identifier [ number_literal ])) ;) (if_statement "if ((char)bVar2 < '\0') {\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }\n    else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)iVar11;\n      sVar19 = templen + 1;\n    }" { (expression_statement "iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2);" (assignment_expression "iVar11 = read_signed_LEB_128_x(start + 2,&templen,bVar2)" identifier = (call_expression "read_signed_LEB_128_x(start + 2,&templen,bVar2)" identifier (argument_list "(start + 2,&templen,bVar2)" ( (binary_expression "start + 2" identifier + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) (expression_statement "uVar9 = (uint)iVar11;" (assignment_expression "uVar9 = (uint)iVar11" identifier = (cast_expression "(uint)iVar11" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "sVar19 = templen + 1;" (assignment_expression "sVar19 = templen + 1" identifier = (binary_expression "templen + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }" else (compound_statement "{\n      uVar9 = (uint)bVar2;\n      sVar19 = 2;\n      if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }\n    }" { (expression_statement "uVar9 = (uint)bVar2;" (assignment_expression "uVar9 = (uint)bVar2" identifier = (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "sVar19 = 2;" (assignment_expression "sVar19 = 2" identifier = number_literal) ;) (if_statement "if ((bVar2 & 0x40) != 0) {\n        uVar9 = bVar2 | 0xffffff80;\n      }" if (parenthesized_expression "((bVar2 & 0x40) != 0)" ( (binary_expression "(bVar2 & 0x40) != 0" (parenthesized_expression "(bVar2 & 0x40)" ( (binary_expression "bVar2 & 0x40" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar9 = bVar2 | 0xffffff80;\n      }" { (expression_statement "uVar9 = bVar2 | 0xffffff80;" (assignment_expression "uVar9 = bVar2 | 0xffffff80" identifier = (binary_expression "bVar2 | 0xffffff80" identifier | number_literal)) ;) })) }))) (expression_statement "lsm->line_num = lsm->line_num + uVar9;" (assignment_expression "lsm->line_num = lsm->line_num + uVar9" (field_expression "lsm->line_num" identifier -> field_identifier) = (binary_expression "lsm->line_num + uVar9" (field_expression "lsm->line_num" identifier -> field_identifier) + identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 4:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }\n    else {\n      templen = 1;\n    }\n    lsm->file_num = uVar9;\n    sVar19 = templen + 1;\n    break;" case number_literal : (expression_statement "bVar2 = start[1];" (assignment_expression "bVar2 = start[1]" identifier = (subscript_expression "start[1]" identifier [ number_literal ])) ;) (expression_statement "uVar9 = (uint)bVar2;" (assignment_expression "uVar9 = (uint)bVar2" identifier = (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }\n    else {\n      templen = 1;\n    }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n    }" { (expression_statement "uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);" (assignment_expression "uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier = (call_expression "read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier (argument_list "(start + 2,&templen,bVar2)" ( (binary_expression "start + 2" identifier + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) (expression_statement "uVar9 = (uint)uVar13;" (assignment_expression "uVar9 = (uint)uVar13" identifier = (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) }) (else_clause "else {\n      templen = 1;\n    }" else (compound_statement "{\n      templen = 1;\n    }" { (expression_statement "templen = 1;" (assignment_expression "templen = 1" identifier = number_literal) ;) }))) (expression_statement "lsm->file_num = uVar9;" (assignment_expression "lsm->file_num = uVar9" (field_expression "lsm->file_num" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar19 = templen + 1;" (assignment_expression "sVar19 = templen + 1" identifier = (binary_expression "templen + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n    bVar2 = start[1];\n    uVar9 = (uint)bVar2;\n    sVar19 = 2;\n    if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }\n    lsm->column_num = uVar9;\n    break;" case number_literal : (expression_statement "bVar2 = start[1];" (assignment_expression "bVar2 = start[1]" identifier = (subscript_expression "start[1]" identifier [ number_literal ])) ;) (expression_statement "uVar9 = (uint)bVar2;" (assignment_expression "uVar9 = (uint)bVar2" identifier = (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "sVar19 = 2;" (assignment_expression "sVar19 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar2 < '\0') {\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }" if (parenthesized_expression "((char)bVar2 < '\0')" ( (binary_expression "(char)bVar2 < '\0'" (cast_expression "(char)bVar2" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);\n      uVar9 = (uint)uVar13;\n      sVar19 = templen + 1;\n    }" { (expression_statement "uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2);" (assignment_expression "uVar13 = read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier = (call_expression "read_unsigned_LEB_128_x(start + 2,&templen,bVar2)" identifier (argument_list "(start + 2,&templen,bVar2)" ( (binary_expression "start + 2" identifier + number_literal) , (pointer_expression "&templen" & identifier) , identifier )))) ;) (expression_statement "uVar9 = (uint)uVar13;" (assignment_expression "uVar9 = (uint)uVar13" identifier = (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "sVar19 = templen + 1;" (assignment_expression "sVar19 = templen + 1" identifier = (binary_expression "templen + 1" identifier + number_literal)) ;) })) (expression_statement "lsm->column_num = uVar9;" (assignment_expression "lsm->column_num = uVar9" (field_expression "lsm->column_num" identifier -> field_identifier) = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 6:\n    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);\n    sVar19 = 1;\n    break;" case number_literal : (expression_statement "lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);" (assignment_expression "lsm->is_stmt = (bool)(lsm->is_stmt ^ 1)" (field_expression "lsm->is_stmt" identifier -> field_identifier) = (cast_expression "(bool)(lsm->is_stmt ^ 1)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(lsm->is_stmt ^ 1)" ( (binary_expression "lsm->is_stmt ^ 1" (field_expression "lsm->is_stmt" identifier -> field_identifier) ^ number_literal) )))) ;) (expression_statement "sVar19 = 1;" (assignment_expression "sVar19 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 7:\n    lsm->basic_block = true;\n    sVar19 = 1;\n    break;" case number_literal : (expression_statement "lsm->basic_block = true;" (assignment_expression "lsm->basic_block = true" (field_expression "lsm->basic_block" identifier -> field_identifier) = true) ;) (expression_statement "sVar19 = 1;" (assignment_expression "sVar19 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 8:\n    sVar19 = 1;\n    lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length);\n    break;" case number_literal : (expression_statement "sVar19 = 1;" (assignment_expression "sVar19 = 1" identifier = number_literal) ;) (expression_statement "lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length);" (assignment_expression "lsm->address = lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length)" (field_expression "lsm->address" identifier -> field_identifier) = (binary_expression "lsm->address +\n                   (long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length)" (field_expression "lsm->address" identifier -> field_identifier) + (cast_expression "(long)((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length)" ( (binary_expression "(int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range) * (this->header_).min_insn_length" (cast_expression "(int)((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range)" ( (binary_expression "(long)(ulong)(~(uint)bVar3 & 0xff) /\n                               (long)(this->header_).line_range" (cast_expression "(long)(ulong)(~(uint)bVar3 & 0xff)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (call_expression "(ulong)(~(uint)bVar3 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(~(uint)bVar3 & 0xff)" ( (binary_expression "~(uint)bVar3 & 0xff" (unary_expression "~(uint)bVar3" ~ (cast_expression "(uint)bVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) / (cast_expression "(long)(this->header_).line_range" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->header_).line_range" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier))) ))) * (field_expression "(this->header_).min_insn_length" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier)) ))))) ;) (break_statement "break;" break ;)) (case_statement "case 9:\n    sVar19 = 3;\n    lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);\n    break;" case number_literal : (expression_statement "sVar19 = 3;" (assignment_expression "sVar19 = 3" identifier = number_literal) ;) (expression_statement "lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2]);" (assignment_expression "lsm->address = lsm->address + (ulong)CONCAT11(start[1],start[2])" (field_expression "lsm->address" identifier -> field_identifier) = (binary_expression "lsm->address + (ulong)CONCAT11(start[1],start[2])" (field_expression "lsm->address" identifier -> field_identifier) + (cast_expression "(ulong)CONCAT11(start[1],start[2])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(start[1],start[2])" identifier (argument_list "(start[1],start[2])" ( (subscript_expression "start[1]" identifier [ number_literal ]) , (subscript_expression "start[2]" identifier [ number_literal ]) )))))) ;) (break_statement "break;" break ;)) (case_statement "default:\n    puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl._M_start;\n    if (puVar18[bVar2] == '\0') {\n      sVar19 = 1;\n    }\n    else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }" default : (ERROR "puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std::" (comma_expression "puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char,_std" (assignment_expression "puVar18 = (this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char" identifier = (binary_expression "(this->header_).std_opcode_lengths.\n              super__Vector_base<unsigned_char" (field_expression "(this->header_).std_opcode_lengths.\n              super__Vector_base" (field_expression "(this->header_).std_opcode_lengths" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) , identifier) : :) (expression_statement "allocator<unsigned_char>_>._M_impl._M_start;" (field_expression "allocator<unsigned_char>_>._M_impl._M_start" (field_expression "allocator<unsigned_char>_>._M_impl" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (puVar18[bVar2] == '\0') {\n      sVar19 = 1;\n    }\n    else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }" if (parenthesized_expression "(puVar18[bVar2] == '\0')" ( (binary_expression "puVar18[bVar2] == '\0'" (subscript_expression "puVar18[bVar2]" identifier [ identifier ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      sVar19 = 1;\n    }" { (expression_statement "sVar19 = 1;" (assignment_expression "sVar19 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }" else (compound_statement "{\n      iVar22 = 0;\n      sVar19 = 1;\n      puVar21 = start + 1;\n      do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);\n    }" { (expression_statement "iVar22 = 0;" (assignment_expression "iVar22 = 0" identifier = number_literal) ;) (expression_statement "sVar19 = 1;" (assignment_expression "sVar19 = 1" identifier = number_literal) ;) (expression_statement "puVar21 = start + 1;" (assignment_expression "puVar21 = start + 1" identifier = (binary_expression "start + 1" identifier + number_literal)) ;) (do_statement "do {\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      } while (iVar22 < (int)(uint)puVar18[bVar2]);" do (compound_statement "{\n        puVar20 = puVar21 + 1;\n        lVar10 = 1;\n        if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }\n        sVar19 = sVar19 + lVar10;\n        iVar22 = iVar22 + 1;\n        puVar21 = puVar20;\n      }" { (expression_statement "puVar20 = puVar21 + 1;" (assignment_expression "puVar20 = puVar21 + 1" identifier = (binary_expression "puVar21 + 1" identifier + number_literal)) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (if_statement "if ((char)*puVar21 < '\0') {\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }" if (parenthesized_expression "((char)*puVar21 < '\0')" ( (binary_expression "(char)*puVar21 < '\0'" (cast_expression "(char)*puVar21" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar21" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);\n          lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);\n          puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>._M_impl.\n                    _M_start;\n          puVar20 = puVar21 + lVar10;\n        }" { (expression_statement "read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21);" (call_expression "read_unsigned_LEB_128_x(puVar20,&templen_1,*puVar21)" identifier (argument_list "(puVar20,&templen_1,*puVar21)" ( identifier , (pointer_expression "&templen_1" & identifier) , (pointer_expression "*puVar21" * identifier) ))) ;) (expression_statement "lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1);" (assignment_expression "lVar10 = CONCAT44(templen_1._4_4_,(undefined4)templen_1)" identifier = (call_expression "CONCAT44(templen_1._4_4_,(undefined4)templen_1)" identifier (argument_list "(templen_1._4_4_,(undefined4)templen_1)" ( (field_expression "templen_1._4_4_" identifier . field_identifier) , (cast_expression "(undefined4)templen_1" ( (type_descriptor "undefined4" type_identifier) ) identifier) )))) ;) (ERROR "puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std::" (comma_expression "puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char,_std" (assignment_expression "puVar18 = (this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char" identifier = (binary_expression "(this->header_).std_opcode_lengths.\n                    super__Vector_base<unsigned_char" (field_expression "(this->header_).std_opcode_lengths.\n                    super__Vector_base" (field_expression "(this->header_).std_opcode_lengths" (parenthesized_expression "(this->header_)" ( (field_expression "this->header_" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) , identifier) : :) (expression_statement "allocator<unsigned_char>_>._M_impl.\n                    _M_start;" (field_expression "allocator<unsigned_char>_>._M_impl.\n                    _M_start" (field_expression "allocator<unsigned_char>_>._M_impl" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "puVar20 = puVar21 + lVar10;" (assignment_expression "puVar20 = puVar21 + lVar10" identifier = (binary_expression "puVar21 + lVar10" identifier + identifier)) ;) })) (expression_statement "sVar19 = sVar19 + lVar10;" (assignment_expression "sVar19 = sVar19 + lVar10" identifier = (binary_expression "sVar19 + lVar10" identifier + identifier)) ;) (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (expression_statement "puVar21 = puVar20;" (assignment_expression "puVar21 = puVar20" identifier = identifier) ;) }) while (parenthesized_expression "(iVar22 < (int)(uint)puVar18[bVar2])" ( (binary_expression "iVar22 < (int)(uint)puVar18[bVar2]" identifier < (cast_expression "(int)(uint)puVar18[bVar2]" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)puVar18[bVar2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar18[bVar2]" identifier [ identifier ])))) )) ;) })))) })) (expression_statement "*len = sVar19;" (assignment_expression "*len = sVar19" (pointer_expression "*len" * identifier) = identifier) ;) (return_statement "return false;" return false ;) (ERROR "}" }))
(translation_unit "undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)\n\n{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}\n\n" (function_definition "undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)\n\n{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" type_identifier (function_declarator "FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)" identifier (parameter_list "(long param_1,byte *param_2,uint *param_3,long *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_70;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 local_68;" type_identifier identifier ;) (declaration "undefined4 uStack_64;" type_identifier identifier ;) (declaration "undefined1 *local_60 [2];" type_identifier (pointer_declarator "*local_60 [2]" * (array_declarator "local_60 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 local_50 [32];" type_identifier (array_declarator "local_50 [32]" identifier [ number_literal ]) ;) (expression_statement "bVar1 = *param_2;" (assignment_expression "bVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "bVar2 = *(byte *)(param_1 + 0x38);" (assignment_expression "bVar2 = *(byte *)(param_1 + 0x38)" identifier = (pointer_expression "*(byte *)(param_1 + 0x38)" * (cast_expression "(byte *)(param_1 + 0x38)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) ))))) ;) (if_statement "if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" if (parenthesized_expression "(bVar2 <= bVar1)" ( (binary_expression "bVar2 <= bVar1" identifier <= identifier) )) (compound_statement "{\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" { (expression_statement "iVar13 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar13 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);" (assignment_expression "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" identifier = (call_expression "(ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)bVar1 - (uint)bVar2 & 0xff)" ( (binary_expression "(uint)bVar1 - (uint)bVar2 & 0xff" (binary_expression "(uint)bVar1 - (uint)bVar2" (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier) - (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) ;) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" ( (binary_expression "(int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)uVar6 / (long)iVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar6 / (long)iVar13)" ( (binary_expression "(long)uVar6 / (long)iVar13" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) / (cast_expression "(long)iVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) * (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ))))) ;) (expression_statement "cVar3 = *(char *)(param_1 + 0x31);" (assignment_expression "cVar3 = *(char *)(param_1 + 0x31)" identifier = (pointer_expression "*(char *)(param_1 + 0x31)" * (cast_expression "(char *)(param_1 + 0x31)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x31)" ( (binary_expression "param_1 + 0x31" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);" (assignment_expression "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (binary_expression "param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (binary_expression "param_3[4] + (int)cVar3" (subscript_expression "param_3[4]" identifier [ number_literal ]) + (cast_expression "(int)cVar3" ( (type_descriptor "int" primitive_type) ) identifier)) + (cast_expression "(int)((long)uVar6 % (long)iVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)uVar6 % (long)iVar13)" ( (binary_expression "(long)uVar6 % (long)iVar13" (cast_expression "(long)uVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) % (cast_expression "(long)iVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))))) ;) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" * identifier) = number_literal) ;) (return_statement "return 1;" return number_literal ;) })) (switch_statement "switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" switch (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" { (case_statement "case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "pbVar11 = param_2 + 1 + local_70;" (assignment_expression "pbVar11 = param_2 + 1 + local_70" identifier = (binary_expression "param_2 + 1 + local_70" (binary_expression "param_2 + 1" identifier + number_literal) + identifier)) ;) (expression_statement "lVar10 = local_70 + 1 + uVar6;" (assignment_expression "lVar10 = local_70 + 1 + uVar6" identifier = (binary_expression "local_70 + 1 + uVar6" (binary_expression "local_70 + 1" identifier + number_literal) + identifier)) ;) (expression_statement "bVar1 = *pbVar11;" (assignment_expression "bVar1 = *pbVar11" identifier = (pointer_expression "*pbVar11" * identifier)) ;) (expression_statement "pbVar12 = pbVar11 + 1;" (assignment_expression "pbVar12 = pbVar11 + 1" identifier = (binary_expression "pbVar11 + 1" identifier + number_literal)) ;) (if_statement "if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 2)" ( (binary_expression "bVar1 == 2" identifier == number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }" { (expression_statement "uVar4 = *(uint *)(pbVar11 + 1);" (assignment_expression "uVar4 = *(uint *)(pbVar11 + 1)" identifier = (pointer_expression "*(uint *)(pbVar11 + 1)" * (cast_expression "(uint *)(pbVar11 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar11 + 1)" ( (binary_expression "pbVar11 + 1" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0xe0);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xe0)" identifier = (pointer_expression "*(long *)(param_1 + 0xe0)" * (cast_expression "(long *)(param_1 + 0xe0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) ))))) ;) (expression_statement "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);" (assignment_expression "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60)" identifier = (binary_expression "(long)pbVar12 - *(long *)(param_1 + 0x60)" (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (pointer_expression "*(long *)(param_1 + 0x60)" * (cast_expression "(long *)(param_1 + 0x60)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))))) ;) (expression_statement "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);" (assignment_expression "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" identifier = (call_expression "(ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" ( (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal)) )))) ;) (expression_statement "*(ulong *)(param_3 + 2) = uVar6;" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar5 = param_1 + 0xd8;" (assignment_expression "lVar5 = param_1 + 0xd8" identifier = (binary_expression "param_1 + 0xd8" identifier + number_literal)) ;) (if_statement "if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" { (do_statement "do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);" do (compound_statement "{\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        }" { (if_statement "if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" if (parenthesized_expression "(*(long *)(lVar9 + 0x20) < lVar14)" ( (binary_expression "*(long *)(lVar9 + 0x20) < lVar14" (pointer_expression "*(long *)(lVar9 + 0x20)" * (cast_expression "(long *)(lVar9 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) )))) < identifier) )) (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }" { (expression_statement "lVar8 = *(long *)(lVar9 + 0x18);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x18)" identifier = (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) ))))) ;) }) (else_clause "else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" else (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" { (expression_statement "lVar8 = *(long *)(lVar9 + 0x10);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x10)" identifier = (pointer_expression "*(long *)(lVar9 + 0x10)" * (cast_expression "(long *)(lVar9 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "lVar5 = lVar9;" (assignment_expression "lVar5 = lVar9" identifier = identifier) ;) }))) (expression_statement "lVar9 = lVar8;" (assignment_expression "lVar9 = lVar8" identifier = identifier) ;) }) while (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) ;) (if_statement "if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" if (parenthesized_expression "((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14))" ( (binary_expression "(param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)" (parenthesized_expression "(param_1 + 0xd8 != lVar5)" ( (binary_expression "param_1 + 0xd8 != lVar5" (binary_expression "param_1 + 0xd8" identifier + number_literal) != identifier) )) && (parenthesized_expression "(*(long *)(lVar5 + 0x20) <= lVar14)" ( (binary_expression "*(long *)(lVar5 + 0x20) <= lVar14" (pointer_expression "*(long *)(lVar5 + 0x20)" * (cast_expression "(long *)(lVar5 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) <= identifier) ))) )) (compound_statement "{\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" { (if_statement "if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }" if (parenthesized_expression "(*(int *)(param_1 + 0x80) == 4)" ( (binary_expression "*(int *)(param_1 + 0x80) == 4" (pointer_expression "*(int *)(param_1 + 0x80)" * (cast_expression "(int *)(param_1 + 0x80)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x80)" ( (binary_expression "param_1 + 0x80" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n            uVar6 = 0;\n          }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = *(uint *)(lVar5 + 0x28);" (assignment_expression "uVar4 = *(uint *)(lVar5 + 0x28)" identifier = (pointer_expression "*(uint *)(lVar5 + 0x28)" * (cast_expression "(uint *)(lVar5 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x28)" ( (binary_expression "lVar5 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30)" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "uVar6 + *(long *)(lVar5 + 0x30)" identifier + (pointer_expression "*(long *)(lVar5 + 0x30)" * (cast_expression "(long *)(lVar5 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x30)" ( (binary_expression "lVar5 + 0x30" identifier + number_literal) )))))) ;) (expression_statement "param_3[6] = uVar4;" (assignment_expression "param_3[6] = uVar4" (subscript_expression "param_3[6]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;) })) })) (expression_statement "cVar3 = FUN_0046ab30(param_1);" (assignment_expression "cVar3 = FUN_0046ab30(param_1)" identifier = (call_expression "FUN_0046ab30(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (if_statement "if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" if (parenthesized_expression "(cVar3 != '\0')" ( (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" { (expression_statement "*(undefined1 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 8) = 0" (pointer_expression "*(undefined1 *)(param_1 + 8)" * (cast_expression "(undefined1 *)(param_1 + 8)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = number_literal) ;) })) }) (else_clause "else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" else (if_statement "if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 3)" ( (binary_expression "bVar1 == 3" identifier == number_literal) )) (compound_statement "{\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }" { (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" identifier = (call_expression "strlen((char *)pbVar12)" identifier (argument_list "((char *)pbVar12)" ( (cast_expression "(char *)pbVar12" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "local_70 = sVar7 + 1;" (assignment_expression "local_70 = sVar7 + 1" identifier = (binary_expression "sVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar1 = pbVar12[local_70];" (assignment_expression "bVar1 = pbVar12[local_70]" identifier = (subscript_expression "pbVar12[local_70]" identifier [ identifier ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }" { (expression_statement "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" identifier (argument_list "(pbVar12 + local_70 + 1,&local_70,bVar1)" ( (binary_expression "pbVar12 + local_70 + 1" (binary_expression "pbVar12 + local_70" identifier + identifier) + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n        local_70 = 1;\n      }" else (compound_statement "{\n        local_70 = 1;\n      }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "lVar9 = *(long *)(param_1 + 0xb8);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xb8)" identifier = (pointer_expression "*(long *)(param_1 + 0xb8)" * (cast_expression "(long *)(param_1 + 0xb8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb8)" ( (binary_expression "param_1 + 0xb8" identifier + number_literal) ))))) ;) (if_statement "if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }" if (parenthesized_expression "((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6)" ( (binary_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6" (call_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5" (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18)" (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10)" * (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x10)" ( (binary_expression "*(long *)(param_1 + 0xa0) + -0x10" (pointer_expression "*(long *)(param_1 + 0xa0)" * (cast_expression "(long *)(param_1 + 0xa0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) )))) + number_literal) )))) - (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x18)" * (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x18)" ( (binary_expression "*(long *)(param_1 + 0xa0) + -0x18" (pointer_expression "*(long *)(param_1 + 0xa0)" * (cast_expression "(long *)(param_1 + 0xa0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa0)" ( (binary_expression "param_1 + 0xa0" identifier + number_literal) )))) + number_literal) ))))) >> number_literal) ))) <= identifier) )) (compound_statement "{\n        uVar6 = 0;\n      }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) })) (expression_statement "local_68 = (undefined4)uVar6;" (assignment_expression "local_68 = (undefined4)uVar6" identifier = (cast_expression "(undefined4)uVar6" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (expression_statement "local_60[0] = local_50;" (assignment_expression "local_60[0] = local_50" (subscript_expression "local_60[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" identifier = (call_expression "strlen((char *)pbVar12)" identifier (argument_list "((char *)pbVar12)" ( (cast_expression "(char *)pbVar12" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);" (call_expression "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7)" identifier (argument_list "(local_60,pbVar12,pbVar12 + sVar7)" ( identifier , identifier , (binary_expression "pbVar12 + sVar7" identifier + identifier) ))) ;) (expression_statement "FUN_0046d2a0(lVar9 + -0x18,&local_68);" (call_expression "FUN_0046d2a0(lVar9 + -0x18,&local_68)" identifier (argument_list "(lVar9 + -0x18,&local_68)" ( (binary_expression "lVar9 + -0x18" identifier + number_literal) , (pointer_expression "&local_68" & identifier) ))) ;) (if_statement "if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }" if (parenthesized_expression "(local_60[0] != local_50)" ( (binary_expression "local_60[0] != local_50" (subscript_expression "local_60[0]" identifier [ number_literal ]) != identifier) )) (compound_statement "{\n        FUN_0049e330();\n      }" { (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" identifier (argument_list "()" ( ))) ;) })) }) (else_clause "else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" else (if_statement "if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" if (parenthesized_expression "(bVar1 == 1)" ( (binary_expression "bVar1 == 1" identifier == number_literal) )) (compound_statement "{\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" { (expression_statement "param_3[4] = 0xffffffff;" (assignment_expression "param_3[4] = 0xffffffff" (subscript_expression "param_3[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((long)param_3 + 0x1e) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1e) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1e)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1e)" ( (binary_expression "(long)param_3 + 0x1e" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 1;" return number_literal ;) })))))) (break_statement "break;" break ;)) (case_statement "case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;" case number_literal : (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 0" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" * identifier) = number_literal) ;) (return_statement "return 1;" return number_literal ;)) (case_statement "case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" identifier = (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (binary_expression "uVar6 * (long)*(int *)(param_1 + 0x28)" identifier * (cast_expression "(long)*(int *)(param_1 + 0x28)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))))))) ;) (break_statement "break;" break ;)) (case_statement "case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }" { (expression_statement "uVar4 = FUN_0037a060(param_2 + 2,&local_70);" (assignment_expression "uVar4 = FUN_0037a060(param_2 + 2,&local_70)" identifier = (call_expression "FUN_0037a060(param_2 + 2,&local_70)" identifier (argument_list "(param_2 + 2,&local_70)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) )))) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" else (compound_statement "{\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" { (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" identifier = number_literal) ;) (if_statement "if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }" if (parenthesized_expression "((bVar1 & 0x40) != 0)" ( (binary_expression "(bVar1 & 0x40) != 0" (parenthesized_expression "(bVar1 & 0x40)" ( (binary_expression "bVar1 & 0x40" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar4 = bVar1 | 0xffffff80;\n      }" { (expression_statement "uVar4 = bVar1 | 0xffffff80;" (assignment_expression "uVar4 = bVar1 | 0xffffff80" identifier = (binary_expression "bVar1 | 0xffffff80" identifier | number_literal)) ;) })) }))) (expression_statement "param_3[4] = param_3[4] + uVar4;" (assignment_expression "param_3[4] = param_3[4] + uVar4" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (binary_expression "param_3[4] + uVar4" (subscript_expression "param_3[4]" identifier [ number_literal ]) + identifier)) ;) (break_statement "break;" break ;)) (case_statement "case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" { (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) }) (else_clause "else {\n      local_70 = 1;\n    }" else (compound_statement "{\n      local_70 = 1;\n    }" { (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" identifier = number_literal) ;) }))) (expression_statement "*param_3 = uVar4;" (assignment_expression "*param_3 = uVar4" (pointer_expression "*param_3" * identifier) = identifier) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;" case number_literal : (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" identifier = number_literal) ;) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" if (parenthesized_expression "((char)bVar1 < '\0')" ( (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" ( (type_descriptor "char" primitive_type) ) identifier) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" { (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier = (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" identifier (argument_list "(param_2 + 2,&local_70,bVar1)" ( (binary_expression "param_2 + 2" identifier + number_literal) , (pointer_expression "&local_70" & identifier) , identifier )))) ;) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" identifier = (binary_expression "local_70 + 1" identifier + number_literal)) ;) })) (expression_statement "param_3[5] = uVar4;" (assignment_expression "param_3[5] = uVar4" (subscript_expression "param_3[5]" identifier [ number_literal ]) = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;" case number_literal : (expression_statement "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;" (assignment_expression "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1" (pointer_expression "*(byte *)(param_3 + 7)" * (cast_expression "(byte *)(param_3 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 7)" ( (binary_expression "param_3 + 7" identifier + number_literal) )))) = (binary_expression "(byte)param_3[7] ^ 1" (cast_expression "(byte)param_3[7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_3[7]" identifier [ number_literal ])) ^ number_literal)) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;" case number_literal : (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" * (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + 0x1d)" ( (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (break_statement "break;" break ;)) (case_statement "case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;" case number_literal : (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" ( (binary_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" ( (binary_expression "(long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)" (cast_expression "(long)(ulong)(~(uint)bVar2 & 0xff)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (call_expression "(ulong)(~(uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(~(uint)bVar2 & 0xff)" ( (binary_expression "~(uint)bVar2 & 0xff" (unary_expression "~(uint)bVar2" ~ (cast_expression "(uint)bVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) & number_literal) )))) / (cast_expression "(long)*(int *)(param_1 + 0x34)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))))) ))) * (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ))))) ;) (break_statement "break;" break ;)) (case_statement "case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;" case number_literal : (expression_statement "lVar10 = 3;" (assignment_expression "lVar10 = 3" identifier = number_literal) ;) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(ulong *)(param_3 + 2)" * (cast_expression "(ulong *)(param_3 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) = (binary_expression "*(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) + (cast_expression "(ulong)CONCAT11(param_2[1],param_2[2])" ( (type_descriptor "ulong" type_identifier) ) (call_expression "CONCAT11(param_2[1],param_2[2])" identifier (argument_list "(param_2[1],param_2[2])" ( (subscript_expression "param_2[1]" identifier [ number_literal ]) , (subscript_expression "param_2[2]" identifier [ number_literal ]) )))))) ;) (break_statement "break;" break ;)) (case_statement "default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" default : (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" identifier = (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" if (parenthesized_expression "(*(char *)(lVar9 + (ulong)bVar1) == '\0')" ( (binary_expression "*(char *)(lVar9 + (ulong)bVar1) == '\0'" (pointer_expression "*(char *)(lVar9 + (ulong)bVar1)" * (cast_expression "(char *)(lVar9 + (ulong)bVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + (ulong)bVar1)" ( (binary_expression "lVar9 + (ulong)bVar1" identifier + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      lVar10 = 1;\n    }" { (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" else (compound_statement "{\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" identifier = number_literal) ;) (expression_statement "pbVar12 = param_2 + 1;" (assignment_expression "pbVar12 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (do_statement "do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));" do (compound_statement "{\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      }" { (expression_statement "pbVar11 = pbVar12 + 1;" (assignment_expression "pbVar11 = pbVar12 + 1" identifier = (binary_expression "pbVar12 + 1" identifier + number_literal)) ;) (expression_statement "lVar5 = 1;" (assignment_expression "lVar5 = 1" identifier = number_literal) ;) (if_statement "if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" if (parenthesized_expression "((char)*pbVar12 < '\0')" ( (binary_expression "(char)*pbVar12 < '\0'" (cast_expression "(char)*pbVar12" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*pbVar12" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" { (expression_statement "FUN_00379ff0(pbVar11,&local_68);" (call_expression "FUN_00379ff0(pbVar11,&local_68)" identifier (argument_list "(pbVar11,&local_68)" ( identifier , (pointer_expression "&local_68" & identifier) ))) ;) (expression_statement "lVar5 = CONCAT44(uStack_64,local_68);" (assignment_expression "lVar5 = CONCAT44(uStack_64,local_68)" identifier = (call_expression "CONCAT44(uStack_64,local_68)" identifier (argument_list "(uStack_64,local_68)" ( identifier , identifier )))) ;) (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" identifier = (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "pbVar11 = pbVar12 + lVar5;" (assignment_expression "pbVar11 = pbVar12 + lVar5" identifier = (binary_expression "pbVar12 + lVar5" identifier + identifier)) ;) })) (expression_statement "lVar10 = lVar10 + lVar5;" (assignment_expression "lVar10 = lVar10 + lVar5" identifier = (binary_expression "lVar10 + lVar5" identifier + identifier)) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "pbVar12 = pbVar11;" (assignment_expression "pbVar12 = pbVar11" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1))" ( (binary_expression "iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" identifier < (binary_expression "(int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" (cast_expression "(int)(uint)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uint)" ( identifier ))) * (cast_expression "(byte *)(lVar9 + (ulong)bVar1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + (ulong)bVar1)" ( (binary_expression "lVar9 + (ulong)bVar1" identifier + (cast_expression "(ulong)bVar1" ( (type_descriptor "ulong" type_identifier) ) identifier)) ))))) )) ;) })))) })) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) / (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (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 (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) % (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (return_statement return LIT ;) })) (switch_statement switch (parenthesized_expression ( IDENT )) (compound_statement { (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (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) )))) < IDENT) )) (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 (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (break_statement break ;) })) })) (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (binary_expression IDENT + IDENT) + LIT) , (pointer_expression & IDENT) , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (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 (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) >> LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + IDENT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })))))) (break_statement break ;)) (case_statement case 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 * IDENT) = LIT) ;) (return_statement return LIT ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))))) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) })) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ^ LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;)) (case_statement case 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 = LIT) ;) (break_statement break ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (unary_expression ~ (cast_expression ( (type_descriptor TYPE) ) IDENT)) & LIT) )))) / (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (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) ))))) ))))) ;) (break_statement break ;)) (case_statement case LIT : (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) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) )))))) ;) (break_statement break ;)) (case_statement default : (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , 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) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) )) ;) })))) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return LIT ;) })))
(function_definition "undefined1 FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)\n\n{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" (type_identifier "undefined1") (function_declarator "FUN_0046e150(long param_1,byte *param_2,uint *param_3,long *param_4)" (identifier "FUN_0046e150") (parameter_list "(long param_1,byte *param_2,uint *param_3,long *param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "byte *param_2" (type_identifier "byte") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  byte bVar2;\n  char cVar3;\n  uint uVar4;\n  long lVar5;\n  ulong uVar6;\n  size_t sVar7;\n  long lVar8;\n  long lVar9;\n  long lVar10;\n  byte *pbVar11;\n  byte *pbVar12;\n  int iVar13;\n  long lVar14;\n  long local_70;\n  undefined4 local_68;\n  undefined4 uStack_64;\n  undefined1 *local_60 [2];\n  undefined1 local_50 [32];\n  \n  bVar1 = *param_2;\n  bVar2 = *(byte *)(param_1 + 0x38);\n  if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }\n  switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }\n  *param_4 = lVar10;\n  return 0;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "size_t sVar7;" (primitive_type "size_t") (identifier "sVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "byte *pbVar11;" (type_identifier "byte") (pointer_declarator "*pbVar11" (* "*") (identifier "pbVar11")) (; ";")) (declaration "byte *pbVar12;" (type_identifier "byte") (pointer_declarator "*pbVar12" (* "*") (identifier "pbVar12")) (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "long lVar14;" (sized_type_specifier "long" (long "long")) (identifier "lVar14") (; ";")) (declaration "long local_70;" (sized_type_specifier "long" (long "long")) (identifier "local_70") (; ";")) (declaration "undefined4 local_68;" (type_identifier "undefined4") (identifier "local_68") (; ";")) (declaration "undefined4 uStack_64;" (type_identifier "undefined4") (identifier "uStack_64") (; ";")) (declaration "undefined1 *local_60 [2];" (type_identifier "undefined1") (pointer_declarator "*local_60 [2]" (* "*") (array_declarator "local_60 [2]" (identifier "local_60") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "undefined1 local_50 [32];" (type_identifier "undefined1") (array_declarator "local_50 [32]" (identifier "local_50") ([ "[") (number_literal "32") (] "]")) (; ";")) (expression_statement "bVar1 = *param_2;" (assignment_expression "bVar1 = *param_2" (identifier "bVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "bVar2 = *(byte *)(param_1 + 0x38);" (assignment_expression "bVar2 = *(byte *)(param_1 + 0x38)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(param_1 + 0x38)" (* "*") (cast_expression "(byte *)(param_1 + 0x38)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (if_statement "if (bVar2 <= bVar1) {\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" (if "if") (parenthesized_expression "(bVar2 <= bVar1)" (( "(") (binary_expression "bVar2 <= bVar1" (identifier "bVar2") (<= "<=") (identifier "bVar1")) () ")")) (compound_statement "{\n    iVar13 = *(int *)(param_1 + 0x34);\n    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));\n    cVar3 = *(char *)(param_1 + 0x31);\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);\n    *param_4 = 1;\n    return 1;\n  }" ({ "{") (expression_statement "iVar13 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar13 = *(int *)(param_1 + 0x34)" (identifier "iVar13") (= "=") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (expression_statement "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);" (assignment_expression "uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" (identifier "uVar6") (= "=") (call_expression "(ulong)((uint)bVar1 - (uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)bVar1 - (uint)bVar2 & 0xff)" (( "(") (binary_expression "(uint)bVar1 - (uint)bVar2 & 0xff" (binary_expression "(uint)bVar1 - (uint)bVar2" (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1")) (- "-") (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2"))) (& "&") (number_literal "0xff")) () ")")))) (; ";")) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (+ "+") (cast_expression "(long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28))" (( "(") (binary_expression "(int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)uVar6 / (long)iVar13)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((long)uVar6 / (long)iVar13)" (( "(") (binary_expression "(long)uVar6 / (long)iVar13" (cast_expression "(long)uVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar6")) (/ "/") (cast_expression "(long)iVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar13"))) () ")"))) (* "*") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")"))))) (; ";")) (expression_statement "cVar3 = *(char *)(param_1 + 0x31);" (assignment_expression "cVar3 = *(char *)(param_1 + 0x31)" (identifier "cVar3") (= "=") (pointer_expression "*(char *)(param_1 + 0x31)" (* "*") (cast_expression "(char *)(param_1 + 0x31)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x31)" (( "(") (binary_expression "param_1 + 0x31" (identifier "param_1") (+ "+") (number_literal "0x31")) () ")"))))) (; ";")) (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" (* "*") (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + 0x1d)" (( "(") (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (number_literal "0x1d")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);" (assignment_expression "param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13)" (binary_expression "param_3[4] + (int)cVar3" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (+ "+") (cast_expression "(int)cVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "cVar3"))) (+ "+") (cast_expression "(int)((long)uVar6 % (long)iVar13)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((long)uVar6 % (long)iVar13)" (( "(") (binary_expression "(long)uVar6 % (long)iVar13" (cast_expression "(long)uVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar6")) (% "%") (cast_expression "(long)iVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar13"))) () ")"))))) (; ";")) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "1")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (switch_statement "switch(bVar1) {\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" (switch "switch") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (compound_statement "{\n  case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;\n  case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;\n  case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;\n  case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;\n  case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;\n  case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;\n  case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;\n  case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;\n  case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;\n  case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;\n  default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }\n  }" ({ "{") (case_statement "case 0:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    pbVar11 = param_2 + 1 + local_70;\n    lVar10 = local_70 + 1 + uVar6;\n    bVar1 = *pbVar11;\n    pbVar12 = pbVar11 + 1;\n    if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }\n    break;" (case "case") (number_literal "0") (: ":") (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" (identifier "bVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" (identifier "uVar6") (= "=") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" ({ "{") (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "uVar6") (= "=") (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "FUN_00379ff0") (argument_list "(param_2 + 2,&local_70,bVar1)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) (, ",") (identifier "bVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      local_70 = 1;\n    }" (else "else") (compound_statement "{\n      local_70 = 1;\n    }" ({ "{") (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" (identifier "local_70") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "pbVar11 = param_2 + 1 + local_70;" (assignment_expression "pbVar11 = param_2 + 1 + local_70" (identifier "pbVar11") (= "=") (binary_expression "param_2 + 1 + local_70" (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) (+ "+") (identifier "local_70"))) (; ";")) (expression_statement "lVar10 = local_70 + 1 + uVar6;" (assignment_expression "lVar10 = local_70 + 1 + uVar6" (identifier "lVar10") (= "=") (binary_expression "local_70 + 1 + uVar6" (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1")) (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "bVar1 = *pbVar11;" (assignment_expression "bVar1 = *pbVar11" (identifier "bVar1") (= "=") (pointer_expression "*pbVar11" (* "*") (identifier "pbVar11"))) (; ";")) (expression_statement "pbVar12 = pbVar11 + 1;" (assignment_expression "pbVar12 = pbVar11 + 1" (identifier "pbVar12") (= "=") (binary_expression "pbVar11 + 1" (identifier "pbVar11") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (bVar1 == 2) {\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }\n    else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" (if "if") (parenthesized_expression "(bVar1 == 2)" (( "(") (binary_expression "bVar1 == 2" (identifier "bVar1") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      uVar4 = *(uint *)(pbVar11 + 1);\n      lVar9 = *(long *)(param_1 + 0xe0);\n      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);\n      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);\n      *(ulong *)(param_3 + 2) = uVar6;\n      lVar5 = param_1 + 0xd8;\n      if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }\n      cVar3 = FUN_0046ab30(param_1);\n      if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(pbVar11 + 1);" (assignment_expression "uVar4 = *(uint *)(pbVar11 + 1)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(pbVar11 + 1)" (* "*") (cast_expression "(uint *)(pbVar11 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pbVar11 + 1)" (( "(") (binary_expression "pbVar11 + 1" (identifier "pbVar11") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "lVar9 = *(long *)(param_1 + 0xe0);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xe0)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1 + 0xe0)" (* "*") (cast_expression "(long *)(param_1 + 0xe0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe0)" (( "(") (binary_expression "param_1 + 0xe0" (identifier "param_1") (+ "+") (number_literal "0xe0")) () ")"))))) (; ";")) (expression_statement "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);" (assignment_expression "lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60)" (identifier "lVar14") (= "=") (binary_expression "(long)pbVar12 - *(long *)(param_1 + 0x60)" (cast_expression "(long)pbVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar12")) (- "-") (pointer_expression "*(long *)(param_1 + 0x60)" (* "*") (cast_expression "(long *)(param_1 + 0x60)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))))) (; ";")) (expression_statement "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18);" (assignment_expression "uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" (identifier "uVar6") (= "=") (call_expression "(ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18)" (( "(") (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |\n                     uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" (( "(") (binary_expression "uVar4 & 0xff0000" (identifier "uVar4") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" (( "(") (binary_expression "uVar4 & 0xff00" (identifier "uVar4") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar4 << 0x18" (identifier "uVar4") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (expression_statement "*(ulong *)(param_3 + 2) = uVar6;" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6" (pointer_expression "*(ulong *)(param_3 + 2)" (* "*") (cast_expression "(ulong *)(param_3 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "lVar5 = param_1 + 0xd8;" (assignment_expression "lVar5 = param_1 + 0xd8" (identifier "lVar5") (= "=") (binary_expression "param_1 + 0xd8" (identifier "param_1") (+ "+") (number_literal "0xd8"))) (; ";")) (if_statement "if (lVar9 != 0) {\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" (if "if") (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);\n        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }\n      }" ({ "{") (do_statement "do {\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        } while (lVar8 != 0);" (do "do") (compound_statement "{\n          if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }\n          lVar9 = lVar8;\n        }" ({ "{") (if_statement "if (*(long *)(lVar9 + 0x20) < lVar14) {\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }\n          else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" (if "if") (parenthesized_expression "(*(long *)(lVar9 + 0x20) < lVar14)" (( "(") (binary_expression "*(long *)(lVar9 + 0x20) < lVar14" (pointer_expression "*(long *)(lVar9 + 0x20)" (* "*") (cast_expression "(long *)(lVar9 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x20)" (( "(") (binary_expression "lVar9 + 0x20" (identifier "lVar9") (+ "+") (number_literal "0x20")) () ")")))) (< "<") (identifier "lVar14")) () ")")) (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x18);\n          }" ({ "{") (expression_statement "lVar8 = *(long *)(lVar9 + 0x18);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x18)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(lVar9 + 0x18)" (* "*") (cast_expression "(long *)(lVar9 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x18)" (( "(") (binary_expression "lVar9 + 0x18" (identifier "lVar9") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" (else "else") (compound_statement "{\n            lVar8 = *(long *)(lVar9 + 0x10);\n            lVar5 = lVar9;\n          }" ({ "{") (expression_statement "lVar8 = *(long *)(lVar9 + 0x10);" (assignment_expression "lVar8 = *(long *)(lVar9 + 0x10)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(lVar9 + 0x10)" (* "*") (cast_expression "(long *)(lVar9 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x10)" (( "(") (binary_expression "lVar9 + 0x10" (identifier "lVar9") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "lVar5 = lVar9;" (assignment_expression "lVar5 = lVar9" (identifier "lVar5") (= "=") (identifier "lVar9")) (; ";")) (} "}")))) (expression_statement "lVar9 = lVar8;" (assignment_expression "lVar9 = lVar8" (identifier "lVar9") (= "=") (identifier "lVar8")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar8 != 0)" (( "(") (binary_expression "lVar8 != 0" (identifier "lVar8") (!= "!=") (number_literal "0")) () ")")) (; ";")) (if_statement "if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" (if "if") (parenthesized_expression "((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14))" (( "(") (binary_expression "(param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)" (parenthesized_expression "(param_1 + 0xd8 != lVar5)" (( "(") (binary_expression "param_1 + 0xd8 != lVar5" (binary_expression "param_1 + 0xd8" (identifier "param_1") (+ "+") (number_literal "0xd8")) (!= "!=") (identifier "lVar5")) () ")")) (&& "&&") (parenthesized_expression "(*(long *)(lVar5 + 0x20) <= lVar14)" (( "(") (binary_expression "*(long *)(lVar5 + 0x20) <= lVar14" (pointer_expression "*(long *)(lVar5 + 0x20)" (* "*") (cast_expression "(long *)(lVar5 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")")))) (<= "<=") (identifier "lVar14")) () ")"))) () ")")) (compound_statement "{\n          if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }\n          uVar4 = *(uint *)(lVar5 + 0x28);\n          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);\n          param_3[6] = uVar4;\n          break;\n        }" ({ "{") (if_statement "if (*(int *)(param_1 + 0x80) == 4) {\n            uVar6 = 0;\n          }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x80) == 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x80) == 4" (pointer_expression "*(int *)(param_1 + 0x80)" (* "*") (cast_expression "(int *)(param_1 + 0x80)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x80)" (( "(") (binary_expression "param_1 + 0x80" (identifier "param_1") (+ "+") (number_literal "0x80")) () ")")))) (== "==") (number_literal "4")) () ")")) (compound_statement "{\n            uVar6 = 0;\n          }" ({ "{") (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar4 = *(uint *)(lVar5 + 0x28);" (assignment_expression "uVar4 = *(uint *)(lVar5 + 0x28)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(lVar5 + 0x28)" (* "*") (cast_expression "(uint *)(lVar5 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x28)" (( "(") (binary_expression "lVar5 + 0x28" (identifier "lVar5") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);" (assignment_expression "*(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30)" (pointer_expression "*(ulong *)(param_3 + 2)" (* "*") (cast_expression "(ulong *)(param_3 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (binary_expression "uVar6 + *(long *)(lVar5 + 0x30)" (identifier "uVar6") (+ "+") (pointer_expression "*(long *)(lVar5 + 0x30)" (* "*") (cast_expression "(long *)(lVar5 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x30)" (( "(") (binary_expression "lVar5 + 0x30" (identifier "lVar5") (+ "+") (number_literal "0x30")) () ")")))))) (; ";")) (expression_statement "param_3[6] = uVar4;" (assignment_expression "param_3[6] = uVar4" (subscript_expression "param_3[6]" (identifier "param_3") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}"))) (expression_statement "cVar3 = FUN_0046ab30(param_1);" (assignment_expression "cVar3 = FUN_0046ab30(param_1)" (identifier "cVar3") (= "=") (call_expression "FUN_0046ab30(param_1)" (identifier "FUN_0046ab30") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (cVar3 != '\0') {\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" (if "if") (parenthesized_expression "(cVar3 != '\0')" (( "(") (binary_expression "cVar3 != '\0'" (identifier "cVar3") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        *(undefined1 *)(param_1 + 8) = 0;\n      }" ({ "{") (expression_statement "*(undefined1 *)(param_1 + 8) = 0;" (assignment_expression "*(undefined1 *)(param_1 + 8) = 0" (pointer_expression "*(undefined1 *)(param_1 + 8)" (* "*") (cast_expression "(undefined1 *)(param_1 + 8)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" (else "else") (if_statement "if (bVar1 == 3) {\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }\n    else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" (if "if") (parenthesized_expression "(bVar1 == 3)" (( "(") (binary_expression "bVar1 == 3" (identifier "bVar1") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n      sVar7 = strlen((char *)pbVar12);\n      local_70 = sVar7 + 1;\n      bVar1 = pbVar12[local_70];\n      uVar6 = (ulong)bVar1;\n      if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }\n      lVar9 = *(long *)(param_1 + 0xb8);\n      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }\n      local_68 = (undefined4)uVar6;\n      local_60[0] = local_50;\n      sVar7 = strlen((char *)pbVar12);\n      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);\n                    \n      FUN_0046d2a0(lVar9 + -0x18,&local_68);\n      if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }\n    }" ({ "{") (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" (identifier "sVar7") (= "=") (call_expression "strlen((char *)pbVar12)" (identifier "strlen") (argument_list "((char *)pbVar12)" (( "(") (cast_expression "(char *)pbVar12" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar12")) () ")")))) (; ";")) (expression_statement "local_70 = sVar7 + 1;" (assignment_expression "local_70 = sVar7 + 1" (identifier "local_70") (= "=") (binary_expression "sVar7 + 1" (identifier "sVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar1 = pbVar12[local_70];" (assignment_expression "bVar1 = pbVar12[local_70]" (identifier "bVar1") (= "=") (subscript_expression "pbVar12[local_70]" (identifier "pbVar12") ([ "[") (identifier "local_70") (] "]"))) (; ";")) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" (identifier "uVar6") (= "=") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }\n      else {\n        local_70 = 1;\n      }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);\n      }" ({ "{") (expression_statement "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" (identifier "uVar6") (= "=") (call_expression "FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1)" (identifier "FUN_00379ff0") (argument_list "(pbVar12 + local_70 + 1,&local_70,bVar1)" (( "(") (binary_expression "pbVar12 + local_70 + 1" (binary_expression "pbVar12 + local_70" (identifier "pbVar12") (+ "+") (identifier "local_70")) (+ "+") (number_literal "1")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) (, ",") (identifier "bVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n        local_70 = 1;\n      }" (else "else") (compound_statement "{\n        local_70 = 1;\n      }" ({ "{") (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" (identifier "local_70") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "lVar9 = *(long *)(param_1 + 0xb8);" (assignment_expression "lVar9 = *(long *)(param_1 + 0xb8)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1 + 0xb8)" (* "*") (cast_expression "(long *)(param_1 + 0xb8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb8)" (( "(") (binary_expression "param_1 + 0xb8" (identifier "param_1") (+ "+") (number_literal "0xb8")) () ")"))))) (; ";")) (if_statement "if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {\n        uVar6 = 0;\n      }" (if "if") (parenthesized_expression "((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6)" (( "(") (binary_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6" (call_expression "(ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5)" (( "(") (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5" (binary_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -\n                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18)" (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x10)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x10)" (( "(") (binary_expression "*(long *)(param_1 + 0xa0) + -0x10" (pointer_expression "*(long *)(param_1 + 0xa0)" (* "*") (cast_expression "(long *)(param_1 + 0xa0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xa0)" (( "(") (binary_expression "param_1 + 0xa0" (identifier "param_1") (+ "+") (number_literal "0xa0")) () ")")))) (+ "+") (number_literal "-0x10")) () ")")))) (- "-") (pointer_expression "*(long *)(*(long *)(param_1 + 0xa0) + -0x18)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 0xa0) + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0xa0) + -0x18)" (( "(") (binary_expression "*(long *)(param_1 + 0xa0) + -0x18" (pointer_expression "*(long *)(param_1 + 0xa0)" (* "*") (cast_expression "(long *)(param_1 + 0xa0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xa0)" (( "(") (binary_expression "param_1 + 0xa0" (identifier "param_1") (+ "+") (number_literal "0xa0")) () ")")))) (+ "+") (number_literal "-0x18")) () ")"))))) (>> ">>") (number_literal "5")) () ")"))) (<= "<=") (identifier "uVar6")) () ")")) (compound_statement "{\n        uVar6 = 0;\n      }" ({ "{") (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "local_68 = (undefined4)uVar6;" (assignment_expression "local_68 = (undefined4)uVar6" (identifier "local_68") (= "=") (cast_expression "(undefined4)uVar6" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "uVar6"))) (; ";")) (expression_statement "local_60[0] = local_50;" (assignment_expression "local_60[0] = local_50" (subscript_expression "local_60[0]" (identifier "local_60") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "local_50")) (; ";")) (expression_statement "sVar7 = strlen((char *)pbVar12);" (assignment_expression "sVar7 = strlen((char *)pbVar12)" (identifier "sVar7") (= "=") (call_expression "strlen((char *)pbVar12)" (identifier "strlen") (argument_list "((char *)pbVar12)" (( "(") (cast_expression "(char *)pbVar12" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar12")) () ")")))) (; ";")) (expression_statement "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);" (call_expression "FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7)" (identifier "FUN_001a61c0") (argument_list "(local_60,pbVar12,pbVar12 + sVar7)" (( "(") (identifier "local_60") (, ",") (identifier "pbVar12") (, ",") (binary_expression "pbVar12 + sVar7" (identifier "pbVar12") (+ "+") (identifier "sVar7")) () ")"))) (; ";")) (expression_statement "FUN_0046d2a0(lVar9 + -0x18,&local_68);" (call_expression "FUN_0046d2a0(lVar9 + -0x18,&local_68)" (identifier "FUN_0046d2a0") (argument_list "(lVar9 + -0x18,&local_68)" (( "(") (binary_expression "lVar9 + -0x18" (identifier "lVar9") (+ "+") (number_literal "-0x18")) (, ",") (pointer_expression "&local_68" (& "&") (identifier "local_68")) () ")"))) (; ";")) (if_statement "if (local_60[0] != local_50) {\n        FUN_0049e330();\n      }" (if "if") (parenthesized_expression "(local_60[0] != local_50)" (( "(") (binary_expression "local_60[0] != local_50" (subscript_expression "local_60[0]" (identifier "local_60") ([ "[") (number_literal "0") (] "]")) (!= "!=") (identifier "local_50")) () ")")) (compound_statement "{\n        FUN_0049e330();\n      }" ({ "{") (expression_statement "FUN_0049e330();" (call_expression "FUN_0049e330()" (identifier "FUN_0049e330") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" (else "else") (if_statement "if (bVar1 == 1) {\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" (if "if") (parenthesized_expression "(bVar1 == 1)" (( "(") (binary_expression "bVar1 == 1" (identifier "bVar1") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      param_3[4] = 0xffffffff;\n      *(undefined1 *)((long)param_3 + 0x1e) = 1;\n      *param_4 = lVar10;\n      return 1;\n    }" ({ "{") (expression_statement "param_3[4] = 0xffffffff;" (assignment_expression "param_3[4] = 0xffffffff" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined1 *)((long)param_3 + 0x1e) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1e) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1e)" (* "*") (cast_expression "(undefined1 *)((long)param_3 + 0x1e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + 0x1e)" (( "(") (binary_expression "(long)param_3 + 0x1e" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (number_literal "0x1e")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "lVar10")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))))))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 1:\n    *(undefined1 *)((long)param_3 + 0x1d) = 0;\n    *param_4 = 1;\n    return 1;" (case "case") (number_literal "1") (: ":") (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 0;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 0" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" (* "*") (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + 0x1d)" (( "(") (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (number_literal "0x1d")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_4 = 1;" (assignment_expression "*param_4 = 1" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "1")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";"))) (case_statement "case 2:\n    bVar1 = param_2[1];\n    uVar6 = (ulong)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    lVar10 = local_70 + 1;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);\n    break;" (case "case") (number_literal "2") (: ":") (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" (identifier "bVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar6 = (ulong)bVar1;" (assignment_expression "uVar6 = (ulong)bVar1" (identifier "uVar6") (= "=") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" ({ "{") (expression_statement "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "uVar6") (= "=") (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "FUN_00379ff0") (argument_list "(param_2 + 2,&local_70,bVar1)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) (, ",") (identifier "bVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      local_70 = 1;\n    }" (else "else") (compound_statement "{\n      local_70 = 1;\n    }" ({ "{") (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" (identifier "local_70") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" (identifier "lVar10") (= "=") (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(ulong *)(param_3 + 2)" (* "*") (cast_expression "(ulong *)(param_3 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (binary_expression "*(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28)" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (+ "+") (binary_expression "uVar6 * (long)*(int *)(param_1 + 0x28)" (identifier "uVar6") (* "*") (cast_expression "(long)*(int *)(param_1 + 0x28)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))))))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 3:\n    bVar1 = param_2[1];\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }\n    param_3[4] = param_3[4] + uVar4;\n    break;" (case "case") (number_literal "3") (: ":") (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" (identifier "bVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }\n    else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar4 = FUN_0037a060(param_2 + 2,&local_70);\n      lVar10 = local_70 + 1;\n    }" ({ "{") (expression_statement "uVar4 = FUN_0037a060(param_2 + 2,&local_70);" (assignment_expression "uVar4 = FUN_0037a060(param_2 + 2,&local_70)" (identifier "uVar4") (= "=") (call_expression "FUN_0037a060(param_2 + 2,&local_70)" (identifier "FUN_0037a060") (argument_list "(param_2 + 2,&local_70)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) () ")")))) (; ";")) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" (identifier "lVar10") (= "=") (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" (else "else") (compound_statement "{\n      uVar4 = (uint)bVar1;\n      lVar10 = 2;\n      if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }\n    }" ({ "{") (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" (identifier "uVar4") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" (identifier "lVar10") (= "=") (number_literal "2")) (; ";")) (if_statement "if ((bVar1 & 0x40) != 0) {\n        uVar4 = bVar1 | 0xffffff80;\n      }" (if "if") (parenthesized_expression "((bVar1 & 0x40) != 0)" (( "(") (binary_expression "(bVar1 & 0x40) != 0" (parenthesized_expression "(bVar1 & 0x40)" (( "(") (binary_expression "bVar1 & 0x40" (identifier "bVar1") (& "&") (number_literal "0x40")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar4 = bVar1 | 0xffffff80;\n      }" ({ "{") (expression_statement "uVar4 = bVar1 | 0xffffff80;" (assignment_expression "uVar4 = bVar1 | 0xffffff80" (identifier "uVar4") (= "=") (binary_expression "bVar1 | 0xffffff80" (identifier "bVar1") (| "|") (number_literal "0xffffff80"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "param_3[4] = param_3[4] + uVar4;" (assignment_expression "param_3[4] = param_3[4] + uVar4" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "param_3[4] + uVar4" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (+ "+") (identifier "uVar4"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }\n    *param_3 = uVar4;\n    lVar10 = local_70 + 1;\n    break;" (case "case") (number_literal "4") (: ":") (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" (identifier "bVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" (identifier "uVar4") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }\n    else {\n      local_70 = 1;\n    }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n    }" ({ "{") (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "uVar4") (= "=") (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "FUN_00379ff0") (argument_list "(param_2 + 2,&local_70,bVar1)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) (, ",") (identifier "bVar1") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      local_70 = 1;\n    }" (else "else") (compound_statement "{\n      local_70 = 1;\n    }" ({ "{") (expression_statement "local_70 = 1;" (assignment_expression "local_70 = 1" (identifier "local_70") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "*param_3 = uVar4;" (assignment_expression "*param_3 = uVar4" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" (identifier "lVar10") (= "=") (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 5:\n    bVar1 = param_2[1];\n    uVar4 = (uint)bVar1;\n    lVar10 = 2;\n    if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }\n    param_3[5] = uVar4;\n    break;" (case "case") (number_literal "5") (: ":") (expression_statement "bVar1 = param_2[1];" (assignment_expression "bVar1 = param_2[1]" (identifier "bVar1") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar4 = (uint)bVar1;" (assignment_expression "uVar4 = (uint)bVar1" (identifier "uVar4") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "lVar10 = 2;" (assignment_expression "lVar10 = 2" (identifier "lVar10") (= "=") (number_literal "2")) (; ";")) (if_statement "if ((char)bVar1 < '\0') {\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" (if "if") (parenthesized_expression "((char)bVar1 < '\0')" (( "(") (binary_expression "(char)bVar1 < '\0'" (cast_expression "(char)bVar1" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar1")) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);\n      lVar10 = local_70 + 1;\n    }" ({ "{") (expression_statement "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);" (assignment_expression "uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "uVar4") (= "=") (call_expression "FUN_00379ff0(param_2 + 2,&local_70,bVar1)" (identifier "FUN_00379ff0") (argument_list "(param_2 + 2,&local_70,bVar1)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) (, ",") (identifier "bVar1") () ")")))) (; ";")) (expression_statement "lVar10 = local_70 + 1;" (assignment_expression "lVar10 = local_70 + 1" (identifier "lVar10") (= "=") (binary_expression "local_70 + 1" (identifier "local_70") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "param_3[5] = uVar4;" (assignment_expression "param_3[5] = uVar4" (subscript_expression "param_3[5]" (identifier "param_3") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 6:\n    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;\n    lVar10 = 1;\n    break;" (case "case") (number_literal "6") (: ":") (expression_statement "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;" (assignment_expression "*(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1" (pointer_expression "*(byte *)(param_3 + 7)" (* "*") (cast_expression "(byte *)(param_3 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 7)" (( "(") (binary_expression "param_3 + 7" (identifier "param_3") (+ "+") (number_literal "7")) () ")")))) (= "=") (binary_expression "(byte)param_3[7] ^ 1" (cast_expression "(byte)param_3[7]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_3[7]" (identifier "param_3") ([ "[") (number_literal "7") (] "]"))) (^ "^") (number_literal "1"))) (; ";")) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" (identifier "lVar10") (= "=") (number_literal "1")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 7:\n    *(undefined1 *)((long)param_3 + 0x1d) = 1;\n    lVar10 = 1;\n    break;" (case "case") (number_literal "7") (: ":") (expression_statement "*(undefined1 *)((long)param_3 + 0x1d) = 1;" (assignment_expression "*(undefined1 *)((long)param_3 + 0x1d) = 1" (pointer_expression "*(undefined1 *)((long)param_3 + 0x1d)" (* "*") (cast_expression "(undefined1 *)((long)param_3 + 0x1d)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + 0x1d)" (( "(") (binary_expression "(long)param_3 + 0x1d" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (number_literal "0x1d")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" (identifier "lVar10") (= "=") (number_literal "1")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 8:\n    lVar10 = 1;\n    *(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));\n    break;" (case "case") (number_literal "8") (: ":") (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" (identifier "lVar10") (= "=") (number_literal "1")) (; ";")) (expression_statement "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28));" (assignment_expression "*(long *)(param_3 + 2) =\n         *(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (binary_expression "*(long *)(param_3 + 2) +\n         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (+ "+") (cast_expression "(long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28))" (( "(") (binary_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *\n               *(int *)(param_1 + 0x28)" (cast_expression "(int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34))" (( "(") (binary_expression "(long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)" (cast_expression "(long)(ulong)(~(uint)bVar2 & 0xff)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (call_expression "(ulong)(~(uint)bVar2 & 0xff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(~(uint)bVar2 & 0xff)" (( "(") (binary_expression "~(uint)bVar2 & 0xff" (unary_expression "~(uint)bVar2" (~ "~") (cast_expression "(uint)bVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar2"))) (& "&") (number_literal "0xff")) () ")")))) (/ "/") (cast_expression "(long)*(int *)(param_1 + 0x34)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))))) () ")"))) (* "*") (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) () ")"))))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 9:\n    lVar10 = 3;\n    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);\n    break;" (case "case") (number_literal "9") (: ":") (expression_statement "lVar10 = 3;" (assignment_expression "lVar10 = 3" (identifier "lVar10") (= "=") (number_literal "3")) (; ";")) (expression_statement "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);" (assignment_expression "*(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(ulong *)(param_3 + 2)" (* "*") (cast_expression "(ulong *)(param_3 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (= "=") (binary_expression "*(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2])" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (+ "+") (cast_expression "(ulong)CONCAT11(param_2[1],param_2[2])" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (call_expression "CONCAT11(param_2[1],param_2[2])" (identifier "CONCAT11") (argument_list "(param_2[1],param_2[2])" (( "(") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (, ",") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) () ")")))))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "default:\n    lVar9 = *(long *)(param_1 + 0x40);\n    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" (default "default") (: ":") (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1 + 0x40)" (* "*") (cast_expression "(long *)(param_1 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (if_statement "if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {\n      lVar10 = 1;\n    }\n    else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" (if "if") (parenthesized_expression "(*(char *)(lVar9 + (ulong)bVar1) == '\0')" (( "(") (binary_expression "*(char *)(lVar9 + (ulong)bVar1) == '\0'" (pointer_expression "*(char *)(lVar9 + (ulong)bVar1)" (* "*") (cast_expression "(char *)(lVar9 + (ulong)bVar1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + (ulong)bVar1)" (( "(") (binary_expression "lVar9 + (ulong)bVar1" (identifier "lVar9") (+ "+") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      lVar10 = 1;\n    }" ({ "{") (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" (identifier "lVar10") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" (else "else") (compound_statement "{\n      iVar13 = 0;\n      lVar10 = 1;\n      pbVar12 = param_2 + 1;\n      do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));\n    }" ({ "{") (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" (identifier "iVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar10 = 1;" (assignment_expression "lVar10 = 1" (identifier "lVar10") (= "=") (number_literal "1")) (; ";")) (expression_statement "pbVar12 = param_2 + 1;" (assignment_expression "pbVar12 = param_2 + 1" (identifier "pbVar12") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));" (do "do") (compound_statement "{\n        pbVar11 = pbVar12 + 1;\n        lVar5 = 1;\n        if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }\n        lVar10 = lVar10 + lVar5;\n        iVar13 = iVar13 + 1;\n        pbVar12 = pbVar11;\n      }" ({ "{") (expression_statement "pbVar11 = pbVar12 + 1;" (assignment_expression "pbVar11 = pbVar12 + 1" (identifier "pbVar11") (= "=") (binary_expression "pbVar12 + 1" (identifier "pbVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar5 = 1;" (assignment_expression "lVar5 = 1" (identifier "lVar5") (= "=") (number_literal "1")) (; ";")) (if_statement "if ((char)*pbVar12 < '\0') {\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" (if "if") (parenthesized_expression "((char)*pbVar12 < '\0')" (( "(") (binary_expression "(char)*pbVar12 < '\0'" (cast_expression "(char)*pbVar12" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*pbVar12" (* "*") (identifier "pbVar12"))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          FUN_00379ff0(pbVar11,&local_68);\n          lVar5 = CONCAT44(uStack_64,local_68);\n          lVar9 = *(long *)(param_1 + 0x40);\n          pbVar11 = pbVar12 + lVar5;\n        }" ({ "{") (expression_statement "FUN_00379ff0(pbVar11,&local_68);" (call_expression "FUN_00379ff0(pbVar11,&local_68)" (identifier "FUN_00379ff0") (argument_list "(pbVar11,&local_68)" (( "(") (identifier "pbVar11") (, ",") (pointer_expression "&local_68" (& "&") (identifier "local_68")) () ")"))) (; ";")) (expression_statement "lVar5 = CONCAT44(uStack_64,local_68);" (assignment_expression "lVar5 = CONCAT44(uStack_64,local_68)" (identifier "lVar5") (= "=") (call_expression "CONCAT44(uStack_64,local_68)" (identifier "CONCAT44") (argument_list "(uStack_64,local_68)" (( "(") (identifier "uStack_64") (, ",") (identifier "local_68") () ")")))) (; ";")) (expression_statement "lVar9 = *(long *)(param_1 + 0x40);" (assignment_expression "lVar9 = *(long *)(param_1 + 0x40)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(param_1 + 0x40)" (* "*") (cast_expression "(long *)(param_1 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "pbVar11 = pbVar12 + lVar5;" (assignment_expression "pbVar11 = pbVar12 + lVar5" (identifier "pbVar11") (= "=") (binary_expression "pbVar12 + lVar5" (identifier "pbVar12") (+ "+") (identifier "lVar5"))) (; ";")) (} "}"))) (expression_statement "lVar10 = lVar10 + lVar5;" (assignment_expression "lVar10 = lVar10 + lVar5" (identifier "lVar10") (= "=") (binary_expression "lVar10 + lVar5" (identifier "lVar10") (+ "+") (identifier "lVar5"))) (; ";")) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar12 = pbVar11;" (assignment_expression "pbVar12 = pbVar11" (identifier "pbVar12") (= "=") (identifier "pbVar11")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1))" (( "(") (binary_expression "iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" (identifier "iVar13") (< "<") (binary_expression "(int)(uint)*(byte *)(lVar9 + (ulong)bVar1)" (cast_expression "(int)(uint)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")"))) (* "*") (cast_expression "(byte *)(lVar9 + (ulong)bVar1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + (ulong)bVar1)" (( "(") (binary_expression "lVar9 + (ulong)bVar1" (identifier "lVar9") (+ "+") (cast_expression "(ulong)bVar1" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar1"))) () ")"))))) () ")")) (; ";")) (} "}"))))) (} "}"))) (expression_statement "*param_4 = lVar10;" (assignment_expression "*param_4 = lVar10" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "lVar10")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* DWARF original prototype: bool process_one_opcode(Sized_dwarf_line_info<32,_true> * this, uchar *
   start, LineStateMachine * lsm, size_t * len) */

bool __thiscall
gold::Sized_dwarf_line_info<32,_true>::process_one_opcode
          (Sized_dwarf_line_info<32,_true> *this,type_2 *var_9,LineStateMachine *lsm,size_t *len)

{
  type_7 *var_17;
  type_1 var_6;
  type_1 var_5;
  char cVar4;
  type_2 var_13;
  type_3 pvVar6;
  type_3 var_28;
  bool bVar8;
  type_4 var_14;
  long var_7;
  int64_t iVar11;
  type_5 var_11;
  uint64_t uVar13;
  size_t var_21;
  type_6 var_16;
  type_6 var_15;
  type_6 var_18;
  type_3 puVar18;
  size_t var_36;
  type_2 *var_12;
  type_2 *var_22;
  int var_37;
  size_t var_10;
  size_t var_29;
  var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3> var_4;
  
  var_6 = *var_9;
  var_5 = (this->header_).opcode_base;
  if (var_5 <= var_6) {
    var_7 = (long)(this->header_).line_range;
    var_11 = (type_5)((type_4)var_6 - (type_4)var_5 & 0xff);
    lsm->address = lsm->address +
                   (long)((int)((long)var_11 / var_7) * (this->header_).min_insn_length);
    cVar4 = (this->header_).line_base;
    lsm->basic_block = true;
    lsm->line_num = lsm->line_num + (int)cVar4 + (int)((long)var_11 % var_7);
    *len = 1;
    return true;
  }
  switch(var_6) {
  case 0:
    var_6 = var_9[1];
    var_11 = (type_5)var_6;
    if ((char)var_6 < '\0') {
      var_11 = var_8(var_9 + 2,&var_10,var_6);
    }
    else {
      var_10 = 1;
    }
    var_12 = var_9 + 1 + var_10;
    var_36 = var_10 + 1 + var_11;
    var_13 = *var_12;
    var_22 = var_12 + 1;
    if (var_13 == '\x02') {
      var_14 = *(type_4 *)(var_12 + 1);
      var_15 = (this->reloc_map_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
      var_17 = &(this->reloc_map_)._M_t._M_impl.super__Rb_tree_header;
      var_7 = (long)var_22 - (long)this->buffer_;
      var_11 = (type_5)(var_14 >> 0x18 | (var_14 & 0xff0000) >> 8 | (var_14 & 0xff00) << 8 |
                      var_14 << 0x18);
      lsm->address = var_11;
      var_18 = &var_17->_M_header;
      if (var_15 != (type_6)0x0) {
        do {
          if (*(long *)(var_15 + 1) < var_7) {
            var_16 = var_15->_M_right;
          }
          else {
            var_16 = var_15->_M_left;
            var_18 = var_15;
          }
          var_15 = var_16;
        } while (var_16 != (type_6)0x0);
        if ((var_17 != (type_7 *)var_18) && (*(long *)(var_18 + 1) <= var_7)) {
          if (this->track_relocs_type_ == 4) {
            var_11 = 0;
          }
          var_14 = *(type_4 *)&var_18[1]._M_parent;
          lsm->address = (long)&(var_18[1]._M_left)->_M_color + var_11;
          lsm->shndx = var_14;
          break;
        }
      }
      bVar8 = var_19(this);
      if (bVar8) {
        this->data_valid_ = false;
      }
    }
    else if (var_13 == '\x03') {
      var_21 = var_20((char *)var_22);
      var_10 = var_21 + 1;
      var_6 = var_22[var_10];
      var_11 = (type_5)var_6;
      if ((char)var_6 < '\0') {
        var_11 = var_8(var_22 + var_10 + 1,&var_10,var_6);
      }
      else {
        var_10 = 1;
      }
      pvVar6 = (this->directories_).
               super__Vector_base<var_23::vector<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>,_std::var_1<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>,_std::var_1<var_23::vector<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>,_std::var_1<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>var_3>var_3>
               ._M_impl._M_finish;
      var_28 = (this->files_).
               super__Vector_base<var_23::vector<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>,_std::var_1<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>var_3>,_std::var_1<var_23::vector<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>,_std::var_1<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>var_3>var_3>var_3>
               ._M_impl._M_finish;
      if ((type_5)((long)pvVar6[-1].
                        super__Vector_base<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>,_std::var_1<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
                        ._M_impl._M_finish -
                  (long)pvVar6[-1].
                        super__Vector_base<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>,_std::var_1<var_23::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
                        ._M_impl._M_start >> 5) <= var_11) {
        var_11 = 0;
      }
      var_29._0_4_ = (type_8)var_11;
      var_4._M_dataplus._M_p = (type_3)&var_4.field_2;
      var_21 = var_20((char *)var_22);
      std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>::
      var_26<var_27*>(&var_4,var_22,var_22 + var_21);
                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */
      var_23::
      vector<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>,_std::var_1<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>var_3>
      ::
      emplace_back<var_23::pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>var_3>
                (var_28 + -1,
                 (pair<int,_std::__cxx11::var_25<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_3>
                  *)&var_29);
      if ((anon_union_16_2_edb7204a_for_basic_string<var_2,_std::var_24<var_2>,_std::var_1<var_2>var_3>var_30
           *)var_4._M_dataplus._M_p != &var_4.field_2) {
        var_31(var_4._M_dataplus._M_p);
      }
    }
    else if (var_13 == '\x01') {
      lsm->line_num = -1;
      lsm->end_sequence = true;
      *len = var_36;
      return true;
    }
    break;
  case 1:
    lsm->basic_block = false;
    *len = 1;
    return true;
  case 2:
    var_6 = var_9[1];
    var_11 = (type_5)var_6;
    if ((char)var_6 < '\0') {
      var_11 = var_8(var_9 + 2,&var_10,var_6);
    }
    else {
      var_10 = 1;
    }
    var_36 = var_10 + 1;
    lsm->address = lsm->address + var_11 * (long)(this->header_).min_insn_length;
    break;
  case 3:
    var_6 = var_9[1];
    if ((char)var_6 < '\0') {
      iVar11 = var_32(var_9 + 2,&var_10,var_6);
      var_14 = (type_4)iVar11;
      var_36 = var_10 + 1;
    }
    else {
      var_14 = (type_4)var_6;
      var_36 = 2;
      if ((var_6 & 0x40) != 0) {
        var_14 = var_6 | 0xffffff80;
      }
    }
    lsm->line_num = lsm->line_num + var_14;
    break;
  case 4:
    var_6 = var_9[1];
    var_14 = (type_4)var_6;
    if ((char)var_6 < '\0') {
      uVar13 = var_8(var_9 + 2,&var_10,var_6);
      var_14 = (type_4)uVar13;
    }
    else {
      var_10 = 1;
    }
    lsm->file_num = var_14;
    var_36 = var_10 + 1;
    break;
  case 5:
    var_6 = var_9[1];
    var_14 = (type_4)var_6;
    var_36 = 2;
    if ((char)var_6 < '\0') {
      uVar13 = var_8(var_9 + 2,&var_10,var_6);
      var_14 = (type_4)uVar13;
      var_36 = var_10 + 1;
    }
    lsm->column_num = var_14;
    break;
  case 6:
    lsm->is_stmt = (bool)(lsm->is_stmt ^ 1);
    var_36 = 1;
    break;
  case 7:
    lsm->basic_block = true;
    var_36 = 1;
    break;
  case 8:
    var_36 = 1;
    lsm->address = lsm->address +
                   (long)((int)((long)(type_5)(~(type_4)var_5 & 0xff) /
                               (long)(this->header_).line_range) * (this->header_).min_insn_length);
    break;
  case 9:
    var_36 = 3;
    lsm->address = lsm->address + (type_5)var_33(var_9[1],var_9[2]);
    break;
  default:
    puVar18 = (this->header_).std_opcode_lengths.
              super__Vector_base<var_34,_std::var_1<var_34>var_3>._M_impl._M_start;
    if (puVar18[var_6] == '\0') {
      var_36 = 1;
    }
    else {
      var_37 = 0;
      var_36 = 1;
      var_22 = var_9 + 1;
      do {
        var_12 = var_22 + 1;
        var_7 = 1;
        if ((char)*var_22 < '\0') {
          var_8(var_12,&var_29,*var_22);
          var_7 = var_35(var_29._4_4_,(type_8)var_29);
          puVar18 = (this->header_).std_opcode_lengths.
                    super__Vector_base<var_34,_std::var_1<var_34>var_3>._M_impl.
                    _M_start;
          var_12 = var_22 + var_7;
        }
        var_36 = var_36 + var_7;
        var_37 = var_37 + 1;
        var_22 = var_12;
      } while (var_37 < (int)(type_4)puVar18[var_6]);
    }
  }
  *len = var_36;
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (number_literal)))))) (expression_statement (assignment_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: (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: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (return_statement (number_literal)))) (switch_statement condition: (parenthesized_expression (identifier)) body: (compound_statement (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (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)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (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: (identifier))) 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 (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))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) right: (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: (identifier))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (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)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (break_statement))))) (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: (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)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) (pointer_expression argument: (identifier)) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (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: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) 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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (number_literal)))))))) (break_statement)) (case_statement value: (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: (identifier)) right: (number_literal))) (return_statement (number_literal))) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (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)))))))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement)) (case_statement value: (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: (number_literal))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_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: (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: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (unary_expression argument: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (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: (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))))))))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (assignment_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: (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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)))))))) (break_statement)) (case_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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))))))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement (number_literal)))))

undefined1 MASKED(long param_1,byte *param_2,uint *param_3,long *param_4)

{
  byte bVar1;
  byte bVar2;
  char cVar3;
  uint uVar4;
  long lVar5;
  ulong uVar6;
  size_t sVar7;
  long lVar8;
  long lVar9;
  long lVar10;
  byte *pbVar11;
  byte *pbVar12;
  int iVar13;
  long lVar14;
  long local_70;
  undefined4 local_68;
  undefined4 uStack_64;
  undefined1 *local_60 [2];
  undefined1 local_50 [32];
  
  bVar1 = *param_2;
  bVar2 = *(byte *)(param_1 + 0x38);
  if (bVar2 <= bVar1) {
    iVar13 = *(int *)(param_1 + 0x34);
    uVar6 = (ulong)((uint)bVar1 - (uint)bVar2 & 0xff);
    *(long *)(param_3 + 2) =
         *(long *)(param_3 + 2) +
         (long)((int)((long)uVar6 / (long)iVar13) * *(int *)(param_1 + 0x28));
    cVar3 = *(char *)(param_1 + 0x31);
    *(undefined1 *)((long)param_3 + 0x1d) = 1;
    param_3[4] = param_3[4] + (int)cVar3 + (int)((long)uVar6 % (long)iVar13);
    *param_4 = 1;
    return 1;
  }
  switch(bVar1) {
  case 0:
    bVar1 = param_2[1];
    uVar6 = (ulong)bVar1;
    if ((char)bVar1 < '\0') {
      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    pbVar11 = param_2 + 1 + local_70;
    lVar10 = local_70 + 1 + uVar6;
    bVar1 = *pbVar11;
    pbVar12 = pbVar11 + 1;
    if (bVar1 == 2) {
      uVar4 = *(uint *)(pbVar11 + 1);
      lVar9 = *(long *)(param_1 + 0xe0);
      lVar14 = (long)pbVar12 - *(long *)(param_1 + 0x60);
      uVar6 = (ulong)(uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 |
                     uVar4 << 0x18);
      *(ulong *)(param_3 + 2) = uVar6;
      lVar5 = param_1 + 0xd8;
      if (lVar9 != 0) {
        do {
          if (*(long *)(lVar9 + 0x20) < lVar14) {
            lVar8 = *(long *)(lVar9 + 0x18);
          }
          else {
            lVar8 = *(long *)(lVar9 + 0x10);
            lVar5 = lVar9;
          }
          lVar9 = lVar8;
        } while (lVar8 != 0);
        if ((param_1 + 0xd8 != lVar5) && (*(long *)(lVar5 + 0x20) <= lVar14)) {
          if (*(int *)(param_1 + 0x80) == 4) {
            uVar6 = 0;
          }
          uVar4 = *(uint *)(lVar5 + 0x28);
          *(ulong *)(param_3 + 2) = uVar6 + *(long *)(lVar5 + 0x30);
          param_3[6] = uVar4;
          break;
        }
      }
      cVar3 = FUN_0046ab30(param_1);
      if (cVar3 != '\0') {
        *(undefined1 *)(param_1 + 8) = 0;
      }
    }
    else if (bVar1 == 3) {
      sVar7 = strlen((char *)pbVar12);
      local_70 = sVar7 + 1;
      bVar1 = pbVar12[local_70];
      uVar6 = (ulong)bVar1;
      if ((char)bVar1 < '\0') {
        uVar6 = FUN_00379ff0(pbVar12 + local_70 + 1,&local_70,bVar1);
      }
      else {
        local_70 = 1;
      }
      lVar9 = *(long *)(param_1 + 0xb8);
      if ((ulong)(*(long *)(*(long *)(param_1 + 0xa0) + -0x10) -
                  *(long *)(*(long *)(param_1 + 0xa0) + -0x18) >> 5) <= uVar6) {
        uVar6 = 0;
      }
      local_68 = (undefined4)uVar6;
      local_60[0] = local_50;
      sVar7 = strlen((char *)pbVar12);
      FUN_001a61c0(local_60,pbVar12,pbVar12 + sVar7);
                    /* try { // try from 0046e505 to 0046e509 has its CatchHandler @ 0046e5e7 */
      FUN_0046d2a0(lVar9 + -0x18,&local_68);
      if (local_60[0] != local_50) {
        FUN_0049e330();
      }
    }
    else if (bVar1 == 1) {
      param_3[4] = 0xffffffff;
      *(undefined1 *)((long)param_3 + 0x1e) = 1;
      *param_4 = lVar10;
      return 1;
    }
    break;
  case 1:
    *(undefined1 *)((long)param_3 + 0x1d) = 0;
    *param_4 = 1;
    return 1;
  case 2:
    bVar1 = param_2[1];
    uVar6 = (ulong)bVar1;
    if ((char)bVar1 < '\0') {
      uVar6 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    lVar10 = local_70 + 1;
    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + uVar6 * (long)*(int *)(param_1 + 0x28);
    break;
  case 3:
    bVar1 = param_2[1];
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_0037a060(param_2 + 2,&local_70);
      lVar10 = local_70 + 1;
    }
    else {
      uVar4 = (uint)bVar1;
      lVar10 = 2;
      if ((bVar1 & 0x40) != 0) {
        uVar4 = bVar1 | 0xffffff80;
      }
    }
    param_3[4] = param_3[4] + uVar4;
    break;
  case 4:
    bVar1 = param_2[1];
    uVar4 = (uint)bVar1;
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
    }
    else {
      local_70 = 1;
    }
    *param_3 = uVar4;
    lVar10 = local_70 + 1;
    break;
  case 5:
    bVar1 = param_2[1];
    uVar4 = (uint)bVar1;
    lVar10 = 2;
    if ((char)bVar1 < '\0') {
      uVar4 = FUN_00379ff0(param_2 + 2,&local_70,bVar1);
      lVar10 = local_70 + 1;
    }
    param_3[5] = uVar4;
    break;
  case 6:
    *(byte *)(param_3 + 7) = (byte)param_3[7] ^ 1;
    lVar10 = 1;
    break;
  case 7:
    *(undefined1 *)((long)param_3 + 0x1d) = 1;
    lVar10 = 1;
    break;
  case 8:
    lVar10 = 1;
    *(long *)(param_3 + 2) =
         *(long *)(param_3 + 2) +
         (long)((int)((long)(ulong)(~(uint)bVar2 & 0xff) / (long)*(int *)(param_1 + 0x34)) *
               *(int *)(param_1 + 0x28));
    break;
  case 9:
    lVar10 = 3;
    *(ulong *)(param_3 + 2) = *(long *)(param_3 + 2) + (ulong)CONCAT11(param_2[1],param_2[2]);
    break;
  default:
    lVar9 = *(long *)(param_1 + 0x40);
    if (*(char *)(lVar9 + (ulong)bVar1) == '\0') {
      lVar10 = 1;
    }
    else {
      iVar13 = 0;
      lVar10 = 1;
      pbVar12 = param_2 + 1;
      do {
        pbVar11 = pbVar12 + 1;
        lVar5 = 1;
        if ((char)*pbVar12 < '\0') {
          FUN_00379ff0(pbVar11,&local_68);
          lVar5 = CONCAT44(uStack_64,local_68);
          lVar9 = *(long *)(param_1 + 0x40);
          pbVar11 = pbVar12 + lVar5;
        }
        lVar10 = lVar10 + lVar5;
        iVar13 = iVar13 + 1;
        pbVar12 = pbVar11;
      } while (iVar13 < (int)(uint)*(byte *)(lVar9 + (ulong)bVar1));
    }
  }
  *param_4 = lVar10;
  return 0;
}

