
int gen_to_words(LITTLENUM_TYPE *words,int precision,long exponent_bits)

{
  ushort uVar1;
  bool bVar2;
  ushort uVar3;
  LITTLENUM_TYPE LVar4;
  int iVar5;
  int iVar6;
  ulong uVar7;
  ushort *puVar8;
  int iVar9;
  ushort *puVar10;
  ushort *puVar11;
  uint uVar12;
  long lVar13;
  ushort *puVar14;
  int iVar15;
  
  lVar13 = (long)precision * 2;
  if (generic_floating_point_number.leader < generic_floating_point_number.low) {
    LVar4 = 0;
    if (generic_floating_point_number.sign != '+') {
      LVar4 = 0x8000;
    }
    *words = LVar4;
    memset(words + 1,0,lVar13 - 2);
    return 0;
  }
  if (generic_floating_point_number.sign == '\0') {
    if (precision == 2) {
      words[0] = 0x7fff;
      words[1] = 0xffff;
      return 0;
    }
    if (precision != 5) {
      words[0] = 0x7fff;
      words[1] = 0xffff;
      words[2] = 0xffff;
      words[3] = 0xffff;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");
  }
  if (generic_floating_point_number.sign == 'P') {
    if (precision == 2) {
      words[0] = 0x7f80;
      words[1] = 0;
      return 0;
    }
    if (precision != 5) {
      words[0] = 0x7ff0;
      words[1] = 0;
      words[2] = 0;
      words[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");
  }
  if (generic_floating_point_number.sign == 'N') {
    if (precision == 2) {
      words[0] = 0xff80;
      words[1] = 0;
      return 0;
    }
    if (precision != 5) {
      words[0] = 0xfff0;
      words[1] = 0;
      words[2] = 0;
      words[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");
  }
  littlenum_pointer = generic_floating_point_number.leader;
  iVar6 = 0;
  bits_left_in_littlenum = 0x10;
  littlenums_left =
       (int)((long)generic_floating_point_number.leader +
             (2 - (long)generic_floating_point_number.low) >> 1);
  while (iVar5 = next_bits(1), iVar5 == 0) {
    iVar6 = iVar6 + 1;
  }
  uVar7 = (((long)generic_floating_point_number.leader +
            ((generic_floating_point_number.exponent * 2 + 2) -
            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +
          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2);
  uVar3 = 0;
  if (generic_floating_point_number.sign != '+') {
    uVar3 = 0x8000;
  }
  puVar14 = (ushort *)(lVar13 + (long)words);
  iVar6 = (int)exponent_bits;
  if ((long)uVar7 < 1) {
    if (littlenums_left == 0) {
      littlenum_pointer = littlenum_pointer + 1;
      littlenums_left = 1;
      bits_left_in_littlenum = 1;
      iVar5 = bits_left_in_littlenum;
    }
    else {
      iVar5 = bits_left_in_littlenum + 1;
      if (0x10 < bits_left_in_littlenum + 1) {
        littlenums_left = littlenums_left + 1;
        littlenum_pointer = littlenum_pointer + 1;
        iVar5 = bits_left_in_littlenum + -0xf;
      }
    }
    bits_left_in_littlenum = iVar5;
    iVar5 = (int)uVar7;
    iVar15 = precision * 0x10;
    if ((long)-iVar5 < 0x10 - exponent_bits) {
      if ((precision == 5) && (exponent_bits == 0xf)) {
        *words = uVar3;
        iVar9 = next_bits(iVar5 + 0x10);
        puVar10 = words + 2;
        words[1] = (ushort)iVar9;
      }
      else {
        iVar9 = next_bits((iVar5 - iVar6) + 0xf);
        puVar10 = words + 1;
        *words = uVar3 | (ushort)iVar9;
      }
    }
    else {
      *words = uVar3;
      iVar9 = (iVar6 + -0xf) - iVar5;
      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;
      puVar8 = words + 1;
      if (0xf < iVar9) {
        uVar12 = iVar9 - 0x10U >> 4;
        do {
          puVar10 = puVar8 + 1;
          *puVar8 = 0;
          puVar8 = puVar10;
        } while (words + (ulong)uVar12 + 2 != puVar10);
        puVar8 = words + (ulong)uVar12 + 2;
        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;
      }
      puVar10 = puVar8;
      if (iVar9 != 0) {
        puVar10 = puVar8 + 1;
        iVar9 = next_bits(0x10 - iVar9);
        *puVar8 = (ushort)iVar9;
      }
    }
    puVar8 = puVar10;
    if (puVar10 < puVar14) {
      do {
        puVar11 = puVar8 + 1;
        iVar9 = next_bits(0x10);
        *puVar8 = (ushort)iVar9;
        puVar8 = puVar11;
      } while (puVar11 < puVar14);
      puVar10 = (ushort *)
                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);
    }
    iVar9 = next_bits(1);
    if (iVar9 != 0) {
      iVar6 = iVar15 + -1 + (iVar5 - iVar6);
      if (iVar6 < 0x10) {
        puVar10[-1] = puVar10[-1] + 1;
      }
      else {
        puVar8 = puVar10 + -1;
        if (iVar6 == 0x10) {
          uVar3 = puVar10[-1];
          iVar5 = 0x10;
LAB_0013f30a:
          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&
             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {
            uVar3 = 0;
            if (generic_floating_point_number.sign != '+') {
              uVar3 = 0x8000;
            }
            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));
            while (words = words + 1, words < puVar14) {
              *words = 0;
            }
            return 0;
          }
        }
        else if (puVar10[-1] == 0xffff) {
          puVar10 = puVar10 + -2;
          iVar5 = iVar6;
          do {
            iVar5 = iVar5 + -0x10;
            uVar3 = *puVar10;
            if (iVar5 < 0x11) goto LAB_0013f30a;
            puVar10 = puVar10 + -1;
          } while (uVar3 == 0xffff);
        }
        do {
          if (puVar8 < words) {
            return 0;
          }
          uVar3 = *puVar8;
          *puVar8 = uVar3 + 1;
          puVar8 = puVar8 + -1;
        } while ((ulong)uVar3 + 1 >> 0x10 != 0);
      }
    }
  }
  else {
    if (uVar7 < mask[exponent_bits]) {
      iVar5 = next_bits(0xf - iVar6);
      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));
      puVar10 = words + 1;
      *words = uVar3;
      bVar2 = exponent_bits == 0xf && precision == 5;
      if (bVar2) {
        iVar6 = next_bits(0xf);
        puVar10 = words + 2;
        words[1] = (ushort)iVar6 | 0x8000;
      }
      puVar8 = puVar10;
      if (puVar10 < puVar14) {
        do {
          puVar11 = puVar8 + 1;
          iVar6 = next_bits(0x10);
          *puVar8 = (ushort)iVar6;
          puVar8 = puVar11;
        } while (puVar11 < puVar14);
        puVar10 = (ushort *)
                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)
        ;
      }
      iVar6 = next_bits(1);
      if (iVar6 == 0) {
        return 0;
      }
      puVar10 = puVar10 + -1;
      do {
        uVar1 = *puVar10;
        *puVar10 = uVar1 + 1;
        if (words == puVar10) goto LAB_0013f0ef;
        puVar10 = puVar10 + -1;
      } while ((ulong)uVar1 + 1 >> 0x10 != 0);
      if (words == puVar10) {
LAB_0013f0ef:
        if (bVar2) {
          puVar10[1] = puVar10[1] | 0x8000;
        }
      }
      if (-1 < (short)(uVar3 ^ *words)) {
        return 0;
      }
      *words = *words & 0x7fff;
      return 0;
    }
LAB_0013f190:
    make_invalid_floating_point_number(words);
  }
  return 0;
}



undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)

{
  bool bVar1;
  char cVar2;
  ushort uVar3;
  ushort uVar4;
  int iVar5;
  int iVar6;
  ulong uVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  uint uVar11;
  long lVar12;
  ushort *puVar13;
  int iVar14;
  
  lVar12 = (long)param_2 * 2;
  if (DAT_0015f470 < PTR_DAT_0015f460) {
    uVar4 = 0;
    if (DAT_0015f480 != '+') {
      uVar4 = 0x8000;
    }
    *param_1 = uVar4;
    memset(param_1 + 1,0,lVar12 - 2);
    return 0;
  }
  if (DAT_0015f480 == '\0') {
    if (param_2 == 2) {
      param_1[0] = 0x7fff;
      param_1[1] = 0xffff;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0x7fff;
      param_1[1] = 0xffff;
      param_1[2] = 0xffff;
      param_1[3] = 0xffff;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");
  }
  if (DAT_0015f480 == 'P') {
    if (param_2 == 2) {
      param_1[0] = 0x7f80;
      param_1[1] = 0;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0x7ff0;
      param_1[1] = 0;
      param_1[2] = 0;
      param_1[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");
  }
  if (DAT_0015f480 == 'N') {
    if (param_2 == 2) {
      param_1[0] = 0xff80;
      param_1[1] = 0;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0xfff0;
      param_1[1] = 0;
      param_1[2] = 0;
      param_1[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");
  }
  DAT_001686e8 = DAT_0015f470;
  iVar6 = 0;
  DAT_001686f4 = 0x10;
  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);
  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {
    iVar6 = iVar6 + 1;
  }
  cVar2 = (char)param_3;
  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -
          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);
  uVar4 = 0;
  if (DAT_0015f480 != '+') {
    uVar4 = 0x8000;
  }
  puVar13 = (ushort *)(lVar12 + (long)param_1);
  if ((long)uVar7 < 1) {
    if (DAT_001686f0 == 0) {
      DAT_001686e8 = DAT_001686e8 + 2;
      DAT_001686f0 = 1;
      DAT_001686f4 = 1;
      iVar6 = DAT_001686f4;
    }
    else {
      iVar6 = DAT_001686f4 + 1;
      if (0x10 < DAT_001686f4 + 1) {
        DAT_001686f0 = DAT_001686f0 + 1;
        DAT_001686e8 = DAT_001686e8 + 2;
        iVar6 = DAT_001686f4 + -0xf;
      }
    }
    DAT_001686f4 = iVar6;
    iVar5 = (int)uVar7;
    iVar14 = param_2 * 0x10;
    iVar6 = iVar5 - (int)param_3;
    if ((long)-iVar5 < 0x10 - param_3) {
      if ((param_2 == 5) && (param_3 == 0xf)) {
        *param_1 = uVar4;
        uVar4 = FUN_0013ee40(iVar5 + 0x10);
        puVar9 = param_1 + 2;
        param_1[1] = uVar4;
      }
      else {
        uVar3 = FUN_0013ee40(iVar6 + 0xf);
        puVar9 = param_1 + 1;
        *param_1 = uVar4 | uVar3;
      }
    }
    else {
      *param_1 = uVar4;
      iVar5 = ((int)param_3 + -0xf) - iVar5;
      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;
      puVar8 = param_1 + 1;
      if (0xf < iVar5) {
        uVar11 = iVar5 - 0x10U >> 4;
        do {
          puVar9 = puVar8 + 1;
          *puVar8 = 0;
          puVar8 = puVar9;
        } while (param_1 + (ulong)uVar11 + 2 != puVar9);
        puVar8 = param_1 + (ulong)uVar11 + 2;
        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;
      }
      puVar9 = puVar8;
      if (iVar5 != 0) {
        puVar9 = puVar8 + 1;
        uVar4 = FUN_0013ee40(0x10 - iVar5);
        *puVar8 = uVar4;
      }
    }
    puVar8 = puVar9;
    if (puVar9 < puVar13) {
      do {
        puVar10 = puVar8 + 1;
        uVar4 = FUN_0013ee40(0x10);
        *puVar8 = uVar4;
        puVar8 = puVar10;
      } while (puVar10 < puVar13);
      puVar9 = (ushort *)
               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);
    }
    iVar5 = FUN_0013ee40(1);
    if (iVar5 != 0) {
      iVar6 = iVar14 + -1 + iVar6;
      if (iVar6 < 0x10) {
        puVar9[-1] = puVar9[-1] + 1;
      }
      else {
        puVar8 = puVar9 + -1;
        if (iVar6 == 0x10) {
          uVar4 = puVar9[-1];
          iVar5 = 0x10;
LAB_0013f30a:
          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==
               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&
             ((long)iVar6 == (iVar14 - param_3) + -1)) {
            uVar4 = 0;
            if (DAT_0015f480 != '+') {
              uVar4 = 0x8000;
            }
            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));
            while (param_1 = param_1 + 1, param_1 < puVar13) {
              *param_1 = 0;
            }
            return 0;
          }
        }
        else if (puVar9[-1] == 0xffff) {
          puVar9 = puVar9 + -2;
          iVar5 = iVar6;
          do {
            iVar5 = iVar5 + -0x10;
            uVar4 = *puVar9;
            if (iVar5 < 0x11) goto LAB_0013f30a;
            puVar9 = puVar9 + -1;
          } while (uVar4 == 0xffff);
        }
        do {
          if (puVar8 < param_1) {
            return 0;
          }
          uVar4 = *puVar8;
          *puVar8 = uVar4 + 1;
          puVar8 = puVar8 + -1;
        } while ((ulong)uVar4 + 1 >> 0x10 != 0);
      }
    }
  }
  else {
    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {
      uVar3 = FUN_0013ee40();
      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));
      puVar9 = param_1 + 1;
      *param_1 = uVar4;
      bVar1 = param_3 == 0xf && param_2 == 5;
      if (bVar1) {
        uVar3 = FUN_0013ee40(0xf);
        puVar9 = param_1 + 2;
        param_1[1] = uVar3 | 0x8000;
      }
      puVar8 = puVar9;
      if (puVar9 < puVar13) {
        do {
          puVar10 = puVar8 + 1;
          uVar3 = FUN_0013ee40(0x10);
          *puVar8 = uVar3;
          puVar8 = puVar10;
        } while (puVar10 < puVar13);
        puVar9 = (ushort *)
                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);
      }
      iVar6 = FUN_0013ee40(1);
      if (iVar6 == 0) {
        return 0;
      }
      puVar9 = puVar9 + -1;
      do {
        uVar3 = *puVar9;
        *puVar9 = uVar3 + 1;
        if (param_1 == puVar9) goto LAB_0013f0ef;
        puVar9 = puVar9 + -1;
      } while ((ulong)uVar3 + 1 >> 0x10 != 0);
      if (param_1 == puVar9) {
LAB_0013f0ef:
        if (bVar1) {
          puVar9[1] = puVar9[1] | 0x8000;
        }
      }
      if (-1 < (short)(uVar4 ^ *param_1)) {
        return 0;
      }
      *param_1 = *param_1 & 0x7fff;
      return 0;
    }
LAB_0013f190:
    FUN_0013eed0(param_1);
  }
  return 0;
}


PUSH R15
MOVSXD R10,ESI
MOV R11,RDI
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,R10
ADD R10,R10
SUB RSP,0x8
MOV RCX,qword ptr [0x0015f460]
MOV RAX,qword ptr [0x0015f470]
MOVZX EDX,byte ptr [0x0015f480]
CMP RCX,RAX
JA 0x0013f118
TEST DL,DL
JNZ 0x0013ef80
CMP EBX,0x2
JZ 0x0013f180
CMP EBX,0x5
JZ 0x0013f483
MOV qword ptr [RDI],-0x8001
ADD RSP,0x8
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP DL,0x50
JZ 0x0013f160
CMP DL,0x4e
JZ 0x0013f140
MOV qword ptr [0x001686e8],RAX
ADD RAX,0x2
XOR R12D,R12D
MOV dword ptr [0x001686f4],0x10
SUB RAX,RCX
SAR RAX,0x1
MOV dword ptr [0x001686f0],EAX
JMP 0x0013efc4
ADD R12D,0x1
MOV EDI,0x1
CALL 0x0013ee40
TEST EAX,EAX
JZ 0x0013efc0
MOV RDX,qword ptr [0x0015f478]
MOV RAX,qword ptr [0x0015f470]
LEA ECX,[RBP + -0x1]
MOVSXD R12,R12D
LEA RAX,[RAX + RDX*0x2 + 0x2]
MOV EDX,0x1
SUB RAX,qword ptr [0x0015f460]
SAR RAX,0x1
SHL EDX,CL
SHL RAX,0x4
SUB EDX,0x2
SUB RAX,R12
MOVSXD RDX,EDX
MOV R12D,0x0
ADD RAX,RDX
CMP byte ptr [0x0015f480],0x2b
MOV EDX,0xffff8000
CMOVNZ R12D,EDX
ADD R10,R11
TEST RAX,RAX
JLE 0x0013f1c0
LEA RDX,[0x14a840]
CMP qword ptr [RDX + RBP*0x8],RAX
JBE 0x0013f190
MOV EDI,0xf
SUB EDI,EBP
MOV ECX,EDI
SHL RAX,CL
MOV R13,RAX
CALL 0x0013ee40
OR EAX,R12D
OR EAX,R13D
CMP RBP,0xf
LEA R13,[R11 + 0x2]
SETZ BPL
CMP EBX,0x5
MOV R12D,EAX
MOV word ptr [R11],AX
SETZ AL
AND BPL,AL
JNZ 0x0013f1a0
CMP R13,R10
JNC 0x0013f0ae
MOV RBX,R13
NOP dword ptr [RAX + RAX*0x1]
MOV EDI,0x10
ADD RBX,0x2
CALL 0x0013ee40
MOV word ptr [RBX + -0x2],AX
CMP R10,RBX
JA 0x0013f088
SUB R10,0x1
SUB R10,R13
SHR R10,0x1
LEA R13,[R13 + R10*0x2 + 0x2]
MOV EDI,0x1
CALL 0x0013ee40
TEST EAX,EAX
JZ 0x0013ef68
LEA RDX,[R13 + -0x2]
NOP dword ptr [RAX]
MOVZX ECX,word ptr [RDX]
MOV RAX,RCX
ADD RCX,0x1
ADD EAX,0x1
SHR RCX,0x10
MOV word ptr [RDX],AX
CMP R11,RDX
JZ 0x0013f0ef
SUB RDX,0x2
TEST RCX,RCX
JNZ 0x0013f0c8
CMP R11,RDX
JNZ 0x0013f0f8
TEST BPL,BPL
JNZ 0x0013f469
MOVZX EAX,word ptr [R11]
XOR R12W,AX
JNS 0x0013ef68
AND AX,0x7fff
MOV word ptr [R11],AX
JMP 0x0013ef68
CMP DL,0x2b
MOV EAX,0x0
LEA RDI,[RDI + 0x2]
MOV EDX,0xffff8000
CMOVNZ EAX,EDX
LEA RDX,[R10 + -0x2]
XOR ESI,ESI
MOV word ptr [RDI + -0x2],AX
CALL 0x001092a0
JMP 0x0013ef68
CMP EBX,0x2
JZ 0x0013f3f0
CMP EBX,0x5
JZ 0x0013f49b
MOV qword ptr [RDI],0xfff0
JMP 0x0013ef68
CMP EBX,0x2
JZ 0x0013f3b0
CMP EBX,0x5
JZ 0x0013f4b3
MOV qword ptr [RDI],0x7ff0
JMP 0x0013ef68
MOV dword ptr [RDI],0xffff7fff
JMP 0x0013ef68
MOV RDI,R11
CALL 0x0013eed0
JMP 0x0013ef68
MOV EDI,0xf
CALL 0x0013ee40
OR AX,0x8000
LEA R13,[R11 + 0x4]
MOV word ptr [R11 + 0x2],AX
JMP 0x0013f07b
MOV EDX,dword ptr [0x001686f0]
TEST EDX,EDX
JNZ 0x0013f3c0
ADD qword ptr [0x001686e8],0x2
MOV dword ptr [0x001686f0],0x1
MOV dword ptr [0x001686f4],0x1
MOV ECX,EAX
MOV EDX,0x10
MOV R13D,EBX
MOV R14D,EAX
NEG ECX
SUB RDX,RBP
SHL R13D,0x4
SUB R14D,EBP
MOVSXD RCX,ECX
CMP RCX,RDX
JL 0x0013f3fb
LEA EDX,[RBP + -0xf]
MOVSXD RSI,R13D
MOV word ptr [R11],R12W
SUB EDX,EAX
MOVSXD RCX,EDX
MOV RAX,RCX
ADD RCX,RBP
CMP RCX,RSI
JGE 0x0013f190
LEA R15,[R11 + 0x2]
CMP EAX,0xf
JLE 0x0013f26d
LEA ECX,[RAX + -0x10]
MOV RAX,R15
MOV ESI,ECX
SHR ESI,0x4
MOV EDI,ESI
LEA RDX,[R11 + RDI*0x2 + 0x4]
NOP dword ptr [RAX + RAX*0x1]
ADD RAX,0x2
XOR R8D,R8D
MOV word ptr [RAX + -0x2],R8W
CMP RDX,RAX
JNZ 0x0013f250
SHL ESI,0x4
LEA R15,[R15 + RDI*0x2 + 0x2]
SUB ECX,ESI
MOV EDX,ECX
TEST EDX,EDX
JNZ 0x0013f44f
CMP R10,R15
JBE 0x0013f2a6
MOV RBX,R15
NOP dword ptr [RAX]
MOV EDI,0x10
ADD RBX,0x2
CALL 0x0013ee40
MOV word ptr [RBX + -0x2],AX
CMP R10,RBX
JA 0x0013f280
LEA RAX,[R10 + -0x1]
SUB RAX,R15
SHR RAX,0x1
LEA R15,[R15 + RAX*0x2 + 0x2]
MOV EDI,0x1
CALL 0x0013ee40
TEST EAX,EAX
JZ 0x0013ef68
LEA ESI,[R13 + R14*0x1 + -0x1]
CMP ESI,0xf
JLE 0x0013f42b
LEA RAX,[R15 + -0x2]
CMP ESI,0x10
JZ 0x0013f474
CMP word ptr [R15 + -0x2],-0x1
JNZ 0x0013f39f
SUB R15,0x4
MOV EDX,ESI
JMP 0x0013f2fe
SUB R15,0x2
CMP CX,-0x1
JNZ 0x0013f39f
SUB EDX,0x10
MOVZX ECX,word ptr [R15]
CMP EDX,0x10
JG 0x0013f2f0
MOVSXD RDX,EDX
LEA RDI,[0x14a840]
MOV RDX,qword ptr [RDI + RDX*0x8]
AND RCX,RDX
CMP RDX,RCX
JNZ 0x0013f39f
MOVSXD RDX,R13D
MOVSXD RSI,ESI
SUB RDX,RBP
SUB RDX,0x1
CMP RSI,RDX
JNZ 0x0013f39f
MOV EAX,0xffff8000
MOV EDX,0x0
MOV ECX,0xf
CMP byte ptr [0x0015f480],0x2b
CMOVNZ EDX,EAX
MOV ESI,0x1
LEA RAX,[R11 + 0x2]
SUB ECX,EBP
SHL ESI,CL
OR EDX,ESI
MOV word ptr [R11],DX
CMP R10,RAX
JBE 0x0013ef68
ADD RAX,0x2
XOR EDX,EDX
MOV word ptr [RAX + -0x2],DX
CMP R10,RAX
JA 0x0013f367
JMP 0x0013ef68
MOVZX ECX,word ptr [RAX]
SUB RAX,0x2
MOV RDX,RCX
ADD RCX,0x1
ADD EDX,0x1
MOV word ptr [RAX + 0x2],DX
SHR RCX,0x10
JZ 0x0013ef68
CMP R11,RAX
JBE 0x0013f380
JMP 0x0013ef68
MOV dword ptr [RDI],0x7f80
JMP 0x0013ef68
MOV ECX,dword ptr [0x001686f4]
LEA ESI,[RCX + 0x1]
CMP ESI,0x10
JLE 0x0013f420
SUB ECX,0xf
ADD EDX,0x1
ADD qword ptr [0x001686e8],0x2
MOV dword ptr [0x001686f4],ECX
MOV dword ptr [0x001686f0],EDX
JMP 0x0013f1ea
MOV dword ptr [RDI],0xff80
JMP 0x0013ef68
CMP EBX,0x5
JNZ 0x0013f436
CMP RBP,0xf
JNZ 0x0013f436
MOV word ptr [R11],R12W
LEA EDI,[RAX + 0x10]
CALL 0x0013ee40
LEA R15,[R11 + 0x4]
MOV word ptr [R11 + 0x2],AX
JMP 0x0013f275
MOV dword ptr [0x001686f4],ESI
JMP 0x0013f1ea
ADD word ptr [R15 + -0x2],0x1
JMP 0x0013ef68
LEA EDI,[R14 + 0xf]
CALL 0x0013ee40
OR R12D,EAX
LEA R15,[R11 + 0x2]
MOV word ptr [R11],R12W
JMP 0x0013f275
MOV EDI,0x10
ADD R15,0x2
SUB EDI,EDX
CALL 0x0013ee40
MOV word ptr [R15 + -0x2],AX
JMP 0x0013f275
OR word ptr [RDX + 0x2],0x8000
JMP 0x0013f0f8
MOVZX ECX,word ptr [R15 + -0x2]
MOV EDX,0x10
JMP 0x0013f30a
LEA RDX,[0x14a828]
MOV ESI,0x135
LEA RDI,[0x14a644]
CALL 0x0011e990
LEA RDX,[0x14a828]
MOV ESI,0x187
LEA RDI,[0x14a644]
CALL 0x0011e990
LEA RDX,[0x14a828]
MOV ESI,0x15e
LEA RDI,[0x14a644]
CALL 0x0011e990
(translation_unit "undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)\n\n{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)\n\n{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0013ef10(ushort *param_1,int param_2,long param_3)" identifier (parameter_list "(ushort *param_1,int param_2,long param_3)" ( (parameter_declaration "ushort *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "ushort uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "ushort *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ushort *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "ushort *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "long lVar12;" (sized_type_specifier "long" long) identifier ;) (declaration "ushort *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (expression_statement "lVar12 = (long)param_2 * 2;" (assignment_expression "lVar12 = (long)param_2 * 2" identifier = (binary_expression "(long)param_2 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (if_statement "if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" if (parenthesized_expression "(DAT_0015f470 < PTR_DAT_0015f460)" ( (binary_expression "DAT_0015f470 < PTR_DAT_0015f460" identifier < identifier) )) (compound_statement "{\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n      uVar4 = 0x8000;\n    }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "memset(param_1 + 1,0,lVar12 - 2);" (call_expression "memset(param_1 + 1,0,lVar12 - 2)" identifier (argument_list "(param_1 + 1,0,lVar12 - 2)" ( (binary_expression "param_1 + 1" identifier + number_literal) , number_literal , (binary_expression "lVar12 - 2" identifier - number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == '\0')" ( (binary_expression "DAT_0015f480 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0xffff;" (assignment_expression "param_1[2] = 0xffff" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0xffff;" (assignment_expression "param_1[3] = 0xffff" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == 'P')" ( (binary_expression "DAT_0015f480 == 'P'" identifier == (char_literal "'P'" ' character ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7f80;" (assignment_expression "param_1[0] = 0x7f80" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7ff0;" (assignment_expression "param_1[0] = 0x7ff0" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == 'N')" ( (binary_expression "DAT_0015f480 == 'N'" identifier == (char_literal "'N'" ' character ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0xff80;" (assignment_expression "param_1[0] = 0xff80" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0xfff0;" (assignment_expression "param_1[0] = 0xfff0" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (expression_statement "DAT_001686e8 = DAT_0015f470;" (assignment_expression "DAT_001686e8 = DAT_0015f470" identifier = identifier) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "DAT_001686f4 = 0x10;" (assignment_expression "DAT_001686f4 = 0x10" identifier = number_literal) ;) (expression_statement "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);" (assignment_expression "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" identifier = (cast_expression "(int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" ( (binary_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" ( (binary_expression "DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)" identifier + (parenthesized_expression "(2 - (long)PTR_DAT_0015f460)" ( (binary_expression "2 - (long)PTR_DAT_0015f460" number_literal - (cast_expression "(long)PTR_DAT_0015f460" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) >> number_literal) )))) ;) (while_statement "while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }" while (parenthesized_expression "(iVar5 = FUN_0013ee40(1), iVar5 == 0)" ( (comma_expression "iVar5 = FUN_0013ee40(1), iVar5 == 0" (assignment_expression "iVar5 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) )) (compound_statement "{\n    iVar6 = iVar6 + 1;\n  }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "cVar2 = (char)param_3;" (assignment_expression "cVar2 = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);" (assignment_expression "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" identifier = (binary_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" (parenthesized_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6)" ( (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6" (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10" (parenthesized_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1)" ( (binary_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" ( (binary_expression "DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" identifier + (parenthesized_expression "((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" ( (binary_expression "(DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460" (parenthesized_expression "(DAT_0015f478 * 2 + 2)" ( (binary_expression "DAT_0015f478 * 2 + 2" (binary_expression "DAT_0015f478 * 2" identifier * number_literal) + number_literal) )) - (cast_expression "(long)PTR_DAT_0015f460" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) >> number_literal) )) * number_literal) - (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(long)((1 << (cVar2 - 1U & 0x1f)) + -2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((1 << (cVar2 - 1U & 0x1f)) + -2)" ( (binary_expression "(1 << (cVar2 - 1U & 0x1f)) + -2" (parenthesized_expression "(1 << (cVar2 - 1U & 0x1f))" ( (binary_expression "1 << (cVar2 - 1U & 0x1f)" number_literal << (parenthesized_expression "(cVar2 - 1U & 0x1f)" ( (binary_expression "cVar2 - 1U & 0x1f" (binary_expression "cVar2 - 1U" identifier - number_literal) & number_literal) ))) )) + number_literal) ))))) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n    uVar4 = 0x8000;\n  }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "puVar13 = (ushort *)(lVar12 + (long)param_1);" (assignment_expression "puVar13 = (ushort *)(lVar12 + (long)param_1)" identifier = (cast_expression "(ushort *)(lVar12 + (long)param_1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + (long)param_1)" ( (binary_expression "lVar12 + (long)param_1" identifier + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" if (parenthesized_expression "((long)uVar7 < 1)" ( (binary_expression "(long)uVar7 < 1" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }" { (if_statement "if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" if (parenthesized_expression "(DAT_001686f0 == 0)" ( (binary_expression "DAT_001686f0 == 0" identifier == number_literal) )) (compound_statement "{\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }" { (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" identifier = (binary_expression "DAT_001686e8 + 2" identifier + number_literal)) ;) (expression_statement "DAT_001686f0 = 1;" (assignment_expression "DAT_001686f0 = 1" identifier = number_literal) ;) (expression_statement "DAT_001686f4 = 1;" (assignment_expression "DAT_001686f4 = 1" identifier = number_literal) ;) (expression_statement "iVar6 = DAT_001686f4;" (assignment_expression "iVar6 = DAT_001686f4" identifier = identifier) ;) }) (else_clause "else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" else (compound_statement "{\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" { (expression_statement "iVar6 = DAT_001686f4 + 1;" (assignment_expression "iVar6 = DAT_001686f4 + 1" identifier = (binary_expression "DAT_001686f4 + 1" identifier + number_literal)) ;) (if_statement "if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" if (parenthesized_expression "(0x10 < DAT_001686f4 + 1)" ( (binary_expression "0x10 < DAT_001686f4 + 1" number_literal < (binary_expression "DAT_001686f4 + 1" identifier + number_literal)) )) (compound_statement "{\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" { (expression_statement "DAT_001686f0 = DAT_001686f0 + 1;" (assignment_expression "DAT_001686f0 = DAT_001686f0 + 1" identifier = (binary_expression "DAT_001686f0 + 1" identifier + number_literal)) ;) (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" identifier = (binary_expression "DAT_001686e8 + 2" identifier + number_literal)) ;) (expression_statement "iVar6 = DAT_001686f4 + -0xf;" (assignment_expression "iVar6 = DAT_001686f4 + -0xf" identifier = (binary_expression "DAT_001686f4 + -0xf" identifier + number_literal)) ;) })) }))) (expression_statement "DAT_001686f4 = iVar6;" (assignment_expression "DAT_001686f4 = iVar6" identifier = identifier) ;) (expression_statement "iVar5 = (int)uVar7;" (assignment_expression "iVar5 = (int)uVar7" identifier = (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = param_2 * 0x10;" (assignment_expression "iVar14 = param_2 * 0x10" identifier = (binary_expression "param_2 * 0x10" identifier * number_literal)) ;) (expression_statement "iVar6 = iVar5 - (int)param_3;" (assignment_expression "iVar6 = iVar5 - (int)param_3" identifier = (binary_expression "iVar5 - (int)param_3" identifier - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" if (parenthesized_expression "((long)-iVar5 < 0x10 - param_3)" ( (binary_expression "(long)-iVar5 < 0x10 - param_3" (cast_expression "(long)-iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (unary_expression "-iVar5" - identifier)) < (binary_expression "0x10 - param_3" number_literal - identifier)) )) (compound_statement "{\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }" { (if_statement "if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" if (parenthesized_expression "((param_2 == 5) && (param_3 == 0xf))" ( (binary_expression "(param_2 == 5) && (param_3 == 0xf)" (parenthesized_expression "(param_2 == 5)" ( (binary_expression "param_2 == 5" identifier == number_literal) )) && (parenthesized_expression "(param_3 == 0xf)" ( (binary_expression "param_3 == 0xf" identifier == number_literal) ))) )) (compound_statement "{\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }" { (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "uVar4 = FUN_0013ee40(iVar5 + 0x10);" (assignment_expression "uVar4 = FUN_0013ee40(iVar5 + 0x10)" identifier = (call_expression "FUN_0013ee40(iVar5 + 0x10)" identifier (argument_list "(iVar5 + 0x10)" ( (binary_expression "iVar5 + 0x10" identifier + number_literal) )))) ;) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "param_1[1] = uVar4;" (assignment_expression "param_1[1] = uVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" else (compound_statement "{\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" { (expression_statement "uVar3 = FUN_0013ee40(iVar6 + 0xf);" (assignment_expression "uVar3 = FUN_0013ee40(iVar6 + 0xf)" identifier = (call_expression "FUN_0013ee40(iVar6 + 0xf)" identifier (argument_list "(iVar6 + 0xf)" ( (binary_expression "iVar6 + 0xf" identifier + number_literal) )))) ;) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = uVar4 | uVar3;" (assignment_expression "*param_1 = uVar4 | uVar3" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar4 | uVar3" identifier | identifier)) ;) }))) }) (else_clause "else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" else (compound_statement "{\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" { (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar5 = ((int)param_3 + -0xf) - iVar5;" (assignment_expression "iVar5 = ((int)param_3 + -0xf) - iVar5" identifier = (binary_expression "((int)param_3 + -0xf) - iVar5" (parenthesized_expression "((int)param_3 + -0xf)" ( (binary_expression "(int)param_3 + -0xf" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) - identifier)) ;) (if_statement "if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;" if (parenthesized_expression "((long)iVar14 <= iVar5 + param_3)" ( (binary_expression "(long)iVar14 <= iVar5 + param_3" (cast_expression "(long)iVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (binary_expression "iVar5 + param_3" identifier + identifier)) )) (goto_statement "goto LAB_0013f190;" goto statement_identifier ;)) (expression_statement "puVar8 = param_1 + 1;" (assignment_expression "puVar8 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" if (parenthesized_expression "(0xf < iVar5)" ( (binary_expression "0xf < iVar5" number_literal < identifier) )) (compound_statement "{\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" { (expression_statement "uVar11 = iVar5 - 0x10U >> 4;" (assignment_expression "uVar11 = iVar5 - 0x10U >> 4" identifier = (binary_expression "iVar5 - 0x10U >> 4" (binary_expression "iVar5 - 0x10U" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);" do (compound_statement "{\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        }" { (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + (ulong)uVar11 + 2 != puVar9)" ( (binary_expression "param_1 + (ulong)uVar11 + 2 != puVar9" (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" identifier + (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) != identifier) )) ;) (expression_statement "puVar8 = param_1 + (ulong)uVar11 + 2;" (assignment_expression "puVar8 = param_1 + (ulong)uVar11 + 2" identifier = (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" identifier + (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal)) ;) (expression_statement "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;" (assignment_expression "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10" identifier = (binary_expression "(iVar5 - 0x10U) + uVar11 * -0x10" (parenthesized_expression "(iVar5 - 0x10U)" ( (binary_expression "iVar5 - 0x10U" identifier - number_literal) )) + (binary_expression "uVar11 * -0x10" identifier * number_literal))) ;) })) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (if_statement "if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" { (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0013ee40(0x10 - iVar5);" (assignment_expression "uVar4 = FUN_0013ee40(0x10 - iVar5)" identifier = (call_expression "FUN_0013ee40(0x10 - iVar5)" identifier (argument_list "(0x10 - iVar5)" ( (binary_expression "0x10 - iVar5" number_literal - identifier) )))) ;) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" * identifier) = identifier) ;) })) }))) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" if (parenthesized_expression "(puVar9 < puVar13)" ( (binary_expression "puVar9 < puVar13" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" { (do_statement "do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);" do (compound_statement "{\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0013ee40(0x10);" (assignment_expression "uVar4 = FUN_0013ee40(0x10)" identifier = (call_expression "FUN_0013ee40(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 < puVar13)" ( (binary_expression "puVar10 < puVar13" identifier < identifier) )) ;) (expression_statement "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar9)" ( (binary_expression "-1 - (long)puVar9" number_literal - (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar5 = FUN_0013ee40(1);" (assignment_expression "iVar5 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" { (expression_statement "iVar6 = iVar14 + -1 + iVar6;" (assignment_expression "iVar6 = iVar14 + -1 + iVar6" identifier = (binary_expression "iVar14 + -1 + iVar6" (binary_expression "iVar14 + -1" identifier + number_literal) + identifier)) ;) (if_statement "if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" if (parenthesized_expression "(iVar6 < 0x10)" ( (binary_expression "iVar6 < 0x10" identifier < number_literal) )) (compound_statement "{\n        puVar9[-1] = puVar9[-1] + 1;\n      }" { (expression_statement "puVar9[-1] = puVar9[-1] + 1;" (assignment_expression "puVar9[-1] = puVar9[-1] + 1" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) = (binary_expression "puVar9[-1] + 1" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) + number_literal)) ;) }) (else_clause "else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" else (compound_statement "{\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" { (expression_statement "puVar8 = puVar9 + -1;" (assignment_expression "puVar8 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" if (parenthesized_expression "(iVar6 == 0x10)" ( (binary_expression "iVar6 == 0x10" identifier == number_literal) )) (compound_statement "{\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }" { (expression_statement "uVar4 = puVar9[-1];" (assignment_expression "uVar4 = puVar9[-1]" identifier = (subscript_expression "puVar9[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" identifier = number_literal) ;) (labeled_statement "LAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" statement_identifier : (if_statement "if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" if (parenthesized_expression "((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1))" ( (binary_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)" (parenthesized_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)))" ( (binary_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" ( (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) == (parenthesized_expression "((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" ( (binary_expression "(ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) & (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" ( (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ))) )) && (parenthesized_expression "((long)iVar6 == (iVar14 - param_3) + -1)" ( (binary_expression "(long)iVar6 == (iVar14 - param_3) + -1" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) == (binary_expression "(iVar14 - param_3) + -1" (parenthesized_expression "(iVar14 - param_3)" ( (binary_expression "iVar14 - param_3" identifier - identifier) )) + number_literal)) ))) )) (compound_statement "{\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n              uVar4 = 0x8000;\n            }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));" (assignment_expression "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" identifier | (call_expression "(ushort)(1 << (0xfU - cVar2 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(1 << (0xfU - cVar2 & 0x1f))" ( (binary_expression "1 << (0xfU - cVar2 & 0x1f)" number_literal << (parenthesized_expression "(0xfU - cVar2 & 0x1f)" ( (binary_expression "0xfU - cVar2 & 0x1f" (binary_expression "0xfU - cVar2" number_literal - identifier) & number_literal) ))) ))))) ;) (while_statement "while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }" while (parenthesized_expression "(param_1 = param_1 + 1, param_1 < puVar13)" ( (comma_expression "param_1 = param_1 + 1, param_1 < puVar13" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_1 < puVar13" identifier < identifier)) )) (compound_statement "{\n              *param_1 = 0;\n            }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) })) (return_statement "return 0;" return number_literal ;) }))) }) (else_clause "else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" else (if_statement "if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" if (parenthesized_expression "(puVar9[-1] == 0xffff)" ( (binary_expression "puVar9[-1] == 0xffff" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" { (expression_statement "puVar9 = puVar9 + -2;" (assignment_expression "puVar9 = puVar9 + -2" identifier = (binary_expression "puVar9 + -2" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) (do_statement "do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);" do (compound_statement "{\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          }" { (expression_statement "iVar5 = iVar5 + -0x10;" (assignment_expression "iVar5 = iVar5 + -0x10" identifier = (binary_expression "iVar5 + -0x10" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar9;" (assignment_expression "uVar4 = *puVar9" identifier = (pointer_expression "*puVar9" * identifier)) ;) (if_statement "if (iVar5 < 0x11) goto LAB_0013f30a;" if (parenthesized_expression "(iVar5 < 0x11)" ( (binary_expression "iVar5 < 0x11" identifier < number_literal) )) (goto_statement "goto LAB_0013f30a;" goto statement_identifier ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 == 0xffff)" ( (binary_expression "uVar4 == 0xffff" identifier == number_literal) )) ;) })))) (do_statement "do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);" do (compound_statement "{\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        }" { (if_statement "if (puVar8 < param_1) {\n            return 0;\n          }" if (parenthesized_expression "(puVar8 < param_1)" ( (binary_expression "puVar8 < param_1" identifier < identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = *puVar8;" (assignment_expression "uVar4 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*puVar8 = uVar4 + 1;" (assignment_expression "*puVar8 = uVar4 + 1" (pointer_expression "*puVar8" * identifier) = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar4 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar4 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar4 + 1 >> 0x10" (binary_expression "(ulong)uVar4 + 1" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) }))) })) }) (else_clause "else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" else (compound_statement "{\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" { (if_statement "if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" if (parenthesized_expression "(uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8))" ( (binary_expression "uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)" identifier < (pointer_expression "*(ulong *)(&DAT_0014a840 + param_3 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + param_3 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + param_3 * 8)" ( (binary_expression "&DAT_0014a840 + param_3 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "param_3 * 8" identifier * number_literal)) ))))) )) (compound_statement "{\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" { (expression_statement "uVar3 = FUN_0013ee40();" (assignment_expression "uVar3 = FUN_0013ee40()" identifier = (call_expression "FUN_0013ee40()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));" (assignment_expression "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" identifier = (binary_expression "uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (binary_expression "uVar3 | uVar4" identifier | identifier) | (call_expression "(ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar7 << (0xfU - cVar2 & 0x3f))" ( (binary_expression "uVar7 << (0xfU - cVar2 & 0x3f)" identifier << (parenthesized_expression "(0xfU - cVar2 & 0x3f)" ( (binary_expression "0xfU - cVar2 & 0x3f" (binary_expression "0xfU - cVar2" number_literal - identifier) & number_literal) ))) ))))) ;) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "bVar1 = param_3 == 0xf && param_2 == 5;" (assignment_expression "bVar1 = param_3 == 0xf && param_2 == 5" identifier = (binary_expression "param_3 == 0xf && param_2 == 5" (binary_expression "param_3 == 0xf" identifier == number_literal) && (binary_expression "param_2 == 5" identifier == number_literal))) ;) (if_statement "if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" { (expression_statement "uVar3 = FUN_0013ee40(0xf);" (assignment_expression "uVar3 = FUN_0013ee40(0xf)" identifier = (call_expression "FUN_0013ee40(0xf)" identifier (argument_list "(0xf)" ( number_literal )))) ;) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "param_1[1] = uVar3 | 0x8000;" (assignment_expression "param_1[1] = uVar3 | 0x8000" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "uVar3 | 0x8000" identifier | number_literal)) ;) })) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" if (parenthesized_expression "(puVar9 < puVar13)" ( (binary_expression "puVar9 < puVar13" identifier < identifier) )) (compound_statement "{\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" { (do_statement "do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);" do (compound_statement "{\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar3 = FUN_0013ee40(0x10);" (assignment_expression "uVar3 = FUN_0013ee40(0x10)" identifier = (call_expression "FUN_0013ee40(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = uVar3;" (assignment_expression "*puVar8 = uVar3" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 < puVar13)" ( (binary_expression "puVar10 < puVar13" identifier < identifier) )) ;) (expression_statement "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar9)" ( (binary_expression "-1 - (long)puVar9" number_literal - (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar6 = FUN_0013ee40(1);" (assignment_expression "iVar6 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (do_statement "do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);" do (compound_statement "{\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      }" { (expression_statement "uVar3 = *puVar9;" (assignment_expression "uVar3 = *puVar9" identifier = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "*puVar9 = uVar3 + 1;" (assignment_expression "*puVar9 = uVar3 + 1" (pointer_expression "*puVar9" * identifier) = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) (if_statement "if (param_1 == puVar9) goto LAB_0013f0ef;" if (parenthesized_expression "(param_1 == puVar9)" ( (binary_expression "param_1 == puVar9" identifier == identifier) )) (goto_statement "goto LAB_0013f0ef;" goto statement_identifier ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar3 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar3 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar3 + 1 >> 0x10" (binary_expression "(ulong)uVar3 + 1" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) (if_statement "if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" if (parenthesized_expression "(param_1 == puVar9)" ( (binary_expression "param_1 == puVar9" identifier == identifier) )) (compound_statement "{\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" { (labeled_statement "LAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" statement_identifier : (if_statement "if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" { (expression_statement "puVar9[1] = puVar9[1] | 0x8000;" (assignment_expression "puVar9[1] = puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = (binary_expression "puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" identifier [ number_literal ]) | number_literal)) ;) }))) })) (if_statement "if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }" if (parenthesized_expression "(-1 < (short)(uVar4 ^ *param_1))" ( (binary_expression "-1 < (short)(uVar4 ^ *param_1)" number_literal < (cast_expression "(short)(uVar4 ^ *param_1)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar4 ^ *param_1)" ( (binary_expression "uVar4 ^ *param_1" identifier ^ (pointer_expression "*param_1" * identifier)) )))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_1 = *param_1 & 0x7fff;" (assignment_expression "*param_1 = *param_1 & 0x7fff" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 & 0x7fff" (pointer_expression "*param_1" * identifier) & number_literal)) ;) (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0013f190:\n    FUN_0013eed0(param_1);" statement_identifier : (expression_statement "FUN_0013eed0(param_1);" (call_expression "FUN_0013eed0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;)) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int gen_to_words(LITTLENUM_TYPE *words,int precision,long exponent_bits)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  ushort uVar3;\n  LITTLENUM_TYPE LVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  int iVar9;\n  ushort *puVar10;\n  ushort *puVar11;\n  uint uVar12;\n  long lVar13;\n  ushort *puVar14;\n  int iVar15;\n  \n  lVar13 = (long)precision * 2;\n  if (generic_floating_point_number.leader < generic_floating_point_number.low) {\n    LVar4 = 0;\n    if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }\n    *words = LVar4;\n    memset(words + 1,0,lVar13 - 2);\n    return 0;\n  }\n  if (generic_floating_point_number.sign == '\0') {\n    if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'P') {\n    if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'N') {\n    if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  littlenum_pointer = generic_floating_point_number.leader;\n  iVar6 = 0;\n  bits_left_in_littlenum = 0x10;\n  littlenums_left =\n       (int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1);\n  while (iVar5 = next_bits(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  uVar7 = (((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2);\n  uVar3 = 0;\n  if (generic_floating_point_number.sign != '+') {\n    uVar3 = 0x8000;\n  }\n  puVar14 = (ushort *)(lVar13 + (long)words);\n  iVar6 = (int)exponent_bits;\n  if ((long)uVar7 < 1) {\n    if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }\n    bits_left_in_littlenum = iVar5;\n    iVar5 = (int)uVar7;\n    iVar15 = precision * 0x10;\n    if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }\n    puVar8 = puVar10;\n    if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar9 = next_bits(1);\n    if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }\n  return 0;\n}\n\n" (function_definition "int gen_to_words(LITTLENUM_TYPE *words,int precision,long exponent_bits)\n\n{\n  ushort uVar1;\n  bool bVar2;\n  ushort uVar3;\n  LITTLENUM_TYPE LVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  int iVar9;\n  ushort *puVar10;\n  ushort *puVar11;\n  uint uVar12;\n  long lVar13;\n  ushort *puVar14;\n  int iVar15;\n  \n  lVar13 = (long)precision * 2;\n  if (generic_floating_point_number.leader < generic_floating_point_number.low) {\n    LVar4 = 0;\n    if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }\n    *words = LVar4;\n    memset(words + 1,0,lVar13 - 2);\n    return 0;\n  }\n  if (generic_floating_point_number.sign == '\0') {\n    if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'P') {\n    if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'N') {\n    if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  littlenum_pointer = generic_floating_point_number.leader;\n  iVar6 = 0;\n  bits_left_in_littlenum = 0x10;\n  littlenums_left =\n       (int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1);\n  while (iVar5 = next_bits(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  uVar7 = (((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2);\n  uVar3 = 0;\n  if (generic_floating_point_number.sign != '+') {\n    uVar3 = 0x8000;\n  }\n  puVar14 = (ushort *)(lVar13 + (long)words);\n  iVar6 = (int)exponent_bits;\n  if ((long)uVar7 < 1) {\n    if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }\n    bits_left_in_littlenum = iVar5;\n    iVar5 = (int)uVar7;\n    iVar15 = precision * 0x10;\n    if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }\n    puVar8 = puVar10;\n    if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar9 = next_bits(1);\n    if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }\n  return 0;\n}" primitive_type (function_declarator "gen_to_words(LITTLENUM_TYPE *words,int precision,long exponent_bits)" identifier (parameter_list "(LITTLENUM_TYPE *words,int precision,long exponent_bits)" ( (parameter_declaration "LITTLENUM_TYPE *words" type_identifier (pointer_declarator "*words" * identifier)) , (parameter_declaration "int precision" primitive_type identifier) , (parameter_declaration "long exponent_bits" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  ushort uVar1;\n  bool bVar2;\n  ushort uVar3;\n  LITTLENUM_TYPE LVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  int iVar9;\n  ushort *puVar10;\n  ushort *puVar11;\n  uint uVar12;\n  long lVar13;\n  ushort *puVar14;\n  int iVar15;\n  \n  lVar13 = (long)precision * 2;\n  if (generic_floating_point_number.leader < generic_floating_point_number.low) {\n    LVar4 = 0;\n    if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }\n    *words = LVar4;\n    memset(words + 1,0,lVar13 - 2);\n    return 0;\n  }\n  if (generic_floating_point_number.sign == '\0') {\n    if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'P') {\n    if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (generic_floating_point_number.sign == 'N') {\n    if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  littlenum_pointer = generic_floating_point_number.leader;\n  iVar6 = 0;\n  bits_left_in_littlenum = 0x10;\n  littlenums_left =\n       (int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1);\n  while (iVar5 = next_bits(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  uVar7 = (((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2);\n  uVar3 = 0;\n  if (generic_floating_point_number.sign != '+') {\n    uVar3 = 0x8000;\n  }\n  puVar14 = (ushort *)(lVar13 + (long)words);\n  iVar6 = (int)exponent_bits;\n  if ((long)uVar7 < 1) {\n    if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }\n    bits_left_in_littlenum = iVar5;\n    iVar5 = (int)uVar7;\n    iVar15 = precision * 0x10;\n    if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }\n    puVar8 = puVar10;\n    if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar9 = next_bits(1);\n    if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }\n  return 0;\n}" { (declaration "ushort uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "LITTLENUM_TYPE LVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "ushort *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "ushort *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "ushort *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "ushort *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (expression_statement "lVar13 = (long)precision * 2;" (assignment_expression "lVar13 = (long)precision * 2" identifier = (binary_expression "(long)precision * 2" (cast_expression "(long)precision" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (if_statement "if (generic_floating_point_number.leader < generic_floating_point_number.low) {\n    LVar4 = 0;\n    if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }\n    *words = LVar4;\n    memset(words + 1,0,lVar13 - 2);\n    return 0;\n  }" if (parenthesized_expression "(generic_floating_point_number.leader < generic_floating_point_number.low)" ( (binary_expression "generic_floating_point_number.leader < generic_floating_point_number.low" (field_expression "generic_floating_point_number.leader" identifier . field_identifier) < (field_expression "generic_floating_point_number.low" identifier . field_identifier)) )) (compound_statement "{\n    LVar4 = 0;\n    if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }\n    *words = LVar4;\n    memset(words + 1,0,lVar13 - 2);\n    return 0;\n  }" { (expression_statement "LVar4 = 0;" (assignment_expression "LVar4 = 0" identifier = number_literal) ;) (if_statement "if (generic_floating_point_number.sign != '+') {\n      LVar4 = 0x8000;\n    }" if (parenthesized_expression "(generic_floating_point_number.sign != '+')" ( (binary_expression "generic_floating_point_number.sign != '+'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) != (char_literal "'+'" ' character ')) )) (compound_statement "{\n      LVar4 = 0x8000;\n    }" { (expression_statement "LVar4 = 0x8000;" (assignment_expression "LVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*words = LVar4;" (assignment_expression "*words = LVar4" (pointer_expression "*words" * identifier) = identifier) ;) (expression_statement "memset(words + 1,0,lVar13 - 2);" (call_expression "memset(words + 1,0,lVar13 - 2)" identifier (argument_list "(words + 1,0,lVar13 - 2)" ( (binary_expression "words + 1" identifier + number_literal) , number_literal , (binary_expression "lVar13 - 2" identifier - number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (generic_floating_point_number.sign == '\0') {\n    if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" if (parenthesized_expression "(generic_floating_point_number.sign == '\0')" ( (binary_expression "generic_floating_point_number.sign == '\0'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" { (if_statement "if (precision == 2) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(precision == 2)" ( (binary_expression "precision == 2" identifier == number_literal) )) (compound_statement "{\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      return 0;\n    }" { (expression_statement "words[0] = 0x7fff;" (assignment_expression "words[0] = 0x7fff" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0xffff;" (assignment_expression "words[1] = 0xffff" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (precision != 5) {\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(precision != 5)" ( (binary_expression "precision != 5" identifier != number_literal) )) (compound_statement "{\n      words[0] = 0x7fff;\n      words[1] = 0xffff;\n      words[2] = 0xffff;\n      words[3] = 0xffff;\n      return 0;\n    }" { (expression_statement "words[0] = 0x7fff;" (assignment_expression "words[0] = 0x7fff" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0xffff;" (assignment_expression "words[1] = 0xffff" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[2] = 0xffff;" (assignment_expression "words[2] = 0xffff" (subscript_expression "words[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[3] = 0xffff;" (assignment_expression "words[3] = 0xffff" (subscript_expression "words[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words");" (call_expression "as_abort("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (generic_floating_point_number.sign == 'P') {\n    if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" if (parenthesized_expression "(generic_floating_point_number.sign == 'P')" ( (binary_expression "generic_floating_point_number.sign == 'P'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) == (char_literal "'P'" ' character ')) )) (compound_statement "{\n    if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" { (if_statement "if (precision == 2) {\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(precision == 2)" ( (binary_expression "precision == 2" identifier == number_literal) )) (compound_statement "{\n      words[0] = 0x7f80;\n      words[1] = 0;\n      return 0;\n    }" { (expression_statement "words[0] = 0x7f80;" (assignment_expression "words[0] = 0x7f80" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0;" (assignment_expression "words[1] = 0" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (precision != 5) {\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(precision != 5)" ( (binary_expression "precision != 5" identifier != number_literal) )) (compound_statement "{\n      words[0] = 0x7ff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }" { (expression_statement "words[0] = 0x7ff0;" (assignment_expression "words[0] = 0x7ff0" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0;" (assignment_expression "words[1] = 0" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[2] = 0;" (assignment_expression "words[2] = 0" (subscript_expression "words[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[3] = 0;" (assignment_expression "words[3] = 0" (subscript_expression "words[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");" (call_expression "as_abort("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (generic_floating_point_number.sign == 'N') {\n    if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" if (parenthesized_expression "(generic_floating_point_number.sign == 'N')" ( (binary_expression "generic_floating_point_number.sign == 'N'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) == (char_literal "'N'" ' character ')) )) (compound_statement "{\n    if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }\n    if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" { (if_statement "if (precision == 2) {\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(precision == 2)" ( (binary_expression "precision == 2" identifier == number_literal) )) (compound_statement "{\n      words[0] = 0xff80;\n      words[1] = 0;\n      return 0;\n    }" { (expression_statement "words[0] = 0xff80;" (assignment_expression "words[0] = 0xff80" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0;" (assignment_expression "words[1] = 0" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (precision != 5) {\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(precision != 5)" ( (binary_expression "precision != 5" identifier != number_literal) )) (compound_statement "{\n      words[0] = 0xfff0;\n      words[1] = 0;\n      words[2] = 0;\n      words[3] = 0;\n      return 0;\n    }" { (expression_statement "words[0] = 0xfff0;" (assignment_expression "words[0] = 0xfff0" (subscript_expression "words[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[1] = 0;" (assignment_expression "words[1] = 0" (subscript_expression "words[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[2] = 0;" (assignment_expression "words[2] = 0" (subscript_expression "words[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "words[3] = 0;" (assignment_expression "words[3] = 0" (subscript_expression "words[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words");" (call_expression "as_abort("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (expression_statement "littlenum_pointer = generic_floating_point_number.leader;" (assignment_expression "littlenum_pointer = generic_floating_point_number.leader" identifier = (field_expression "generic_floating_point_number.leader" identifier . field_identifier)) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "bits_left_in_littlenum = 0x10;" (assignment_expression "bits_left_in_littlenum = 0x10" identifier = number_literal) ;) (expression_statement "littlenums_left =\n       (int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1);" (assignment_expression "littlenums_left =\n       (int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1)" identifier = (cast_expression "(int)((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1)" ( (binary_expression "(long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low) >> 1" (binary_expression "(long)generic_floating_point_number.leader +\n             (2 - (long)generic_floating_point_number.low)" (cast_expression "(long)generic_floating_point_number.leader" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "generic_floating_point_number.leader" identifier . field_identifier)) + (parenthesized_expression "(2 - (long)generic_floating_point_number.low)" ( (binary_expression "2 - (long)generic_floating_point_number.low" number_literal - (cast_expression "(long)generic_floating_point_number.low" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "generic_floating_point_number.low" identifier . field_identifier))) ))) >> number_literal) )))) ;) (while_statement "while (iVar5 = next_bits(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }" while (parenthesized_expression "(iVar5 = next_bits(1), iVar5 == 0)" ( (comma_expression "iVar5 = next_bits(1), iVar5 == 0" (assignment_expression "iVar5 = next_bits(1)" identifier = (call_expression "next_bits(1)" identifier (argument_list "(1)" ( number_literal )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) )) (compound_statement "{\n    iVar6 = iVar6 + 1;\n  }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar7 = (((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2);" (assignment_expression "uVar7 = (((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2)" identifier = (binary_expression "(((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6) +\n          (long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2)" (parenthesized_expression "(((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6)" ( (binary_expression "((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)iVar6" (binary_expression "((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1) * 0x10" (parenthesized_expression "((long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1)" ( (binary_expression "(long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low) >> 1" (binary_expression "(long)generic_floating_point_number.leader +\n            ((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low)" (cast_expression "(long)generic_floating_point_number.leader" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "generic_floating_point_number.leader" identifier . field_identifier)) + (parenthesized_expression "((generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low)" ( (binary_expression "(generic_floating_point_number.exponent * 2 + 2) -\n            (long)generic_floating_point_number.low" (parenthesized_expression "(generic_floating_point_number.exponent * 2 + 2)" ( (binary_expression "generic_floating_point_number.exponent * 2 + 2" (binary_expression "generic_floating_point_number.exponent * 2" (field_expression "generic_floating_point_number.exponent" identifier . field_identifier) * number_literal) + number_literal) )) - (cast_expression "(long)generic_floating_point_number.low" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "generic_floating_point_number.low" identifier . field_identifier))) ))) >> number_literal) )) * number_literal) - (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(long)((1 << ((char)exponent_bits - 1U & 0x1f)) + -2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((1 << ((char)exponent_bits - 1U & 0x1f)) + -2)" ( (binary_expression "(1 << ((char)exponent_bits - 1U & 0x1f)) + -2" (parenthesized_expression "(1 << ((char)exponent_bits - 1U & 0x1f))" ( (binary_expression "1 << ((char)exponent_bits - 1U & 0x1f)" number_literal << (parenthesized_expression "((char)exponent_bits - 1U & 0x1f)" ( (binary_expression "(char)exponent_bits - 1U & 0x1f" (binary_expression "(char)exponent_bits - 1U" (cast_expression "(char)exponent_bits" ( (type_descriptor "char" primitive_type) ) identifier) - number_literal) & number_literal) ))) )) + number_literal) ))))) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (if_statement "if (generic_floating_point_number.sign != '+') {\n    uVar3 = 0x8000;\n  }" if (parenthesized_expression "(generic_floating_point_number.sign != '+')" ( (binary_expression "generic_floating_point_number.sign != '+'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) != (char_literal "'+'" ' character ')) )) (compound_statement "{\n    uVar3 = 0x8000;\n  }" { (expression_statement "uVar3 = 0x8000;" (assignment_expression "uVar3 = 0x8000" identifier = number_literal) ;) })) (expression_statement "puVar14 = (ushort *)(lVar13 + (long)words);" (assignment_expression "puVar14 = (ushort *)(lVar13 + (long)words)" identifier = (cast_expression "(ushort *)(lVar13 + (long)words)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + (long)words)" ( (binary_expression "lVar13 + (long)words" identifier + (cast_expression "(long)words" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (expression_statement "iVar6 = (int)exponent_bits;" (assignment_expression "iVar6 = (int)exponent_bits" identifier = (cast_expression "(int)exponent_bits" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if ((long)uVar7 < 1) {\n    if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }\n    bits_left_in_littlenum = iVar5;\n    iVar5 = (int)uVar7;\n    iVar15 = precision * 0x10;\n    if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }\n    puVar8 = puVar10;\n    if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar9 = next_bits(1);\n    if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }" if (parenthesized_expression "((long)uVar7 < 1)" ( (binary_expression "(long)uVar7 < 1" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }\n    bits_left_in_littlenum = iVar5;\n    iVar5 = (int)uVar7;\n    iVar15 = precision * 0x10;\n    if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }\n    puVar8 = puVar10;\n    if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar9 = next_bits(1);\n    if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }\n  }" { (if_statement "if (littlenums_left == 0) {\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }\n    else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }" if (parenthesized_expression "(littlenums_left == 0)" ( (binary_expression "littlenums_left == 0" identifier == number_literal) )) (compound_statement "{\n      littlenum_pointer = littlenum_pointer + 1;\n      littlenums_left = 1;\n      bits_left_in_littlenum = 1;\n      iVar5 = bits_left_in_littlenum;\n    }" { (expression_statement "littlenum_pointer = littlenum_pointer + 1;" (assignment_expression "littlenum_pointer = littlenum_pointer + 1" identifier = (binary_expression "littlenum_pointer + 1" identifier + number_literal)) ;) (expression_statement "littlenums_left = 1;" (assignment_expression "littlenums_left = 1" identifier = number_literal) ;) (expression_statement "bits_left_in_littlenum = 1;" (assignment_expression "bits_left_in_littlenum = 1" identifier = number_literal) ;) (expression_statement "iVar5 = bits_left_in_littlenum;" (assignment_expression "iVar5 = bits_left_in_littlenum" identifier = identifier) ;) }) (else_clause "else {\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }" else (compound_statement "{\n      iVar5 = bits_left_in_littlenum + 1;\n      if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }\n    }" { (expression_statement "iVar5 = bits_left_in_littlenum + 1;" (assignment_expression "iVar5 = bits_left_in_littlenum + 1" identifier = (binary_expression "bits_left_in_littlenum + 1" identifier + number_literal)) ;) (if_statement "if (0x10 < bits_left_in_littlenum + 1) {\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }" if (parenthesized_expression "(0x10 < bits_left_in_littlenum + 1)" ( (binary_expression "0x10 < bits_left_in_littlenum + 1" number_literal < (binary_expression "bits_left_in_littlenum + 1" identifier + number_literal)) )) (compound_statement "{\n        littlenums_left = littlenums_left + 1;\n        littlenum_pointer = littlenum_pointer + 1;\n        iVar5 = bits_left_in_littlenum + -0xf;\n      }" { (expression_statement "littlenums_left = littlenums_left + 1;" (assignment_expression "littlenums_left = littlenums_left + 1" identifier = (binary_expression "littlenums_left + 1" identifier + number_literal)) ;) (expression_statement "littlenum_pointer = littlenum_pointer + 1;" (assignment_expression "littlenum_pointer = littlenum_pointer + 1" identifier = (binary_expression "littlenum_pointer + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = bits_left_in_littlenum + -0xf;" (assignment_expression "iVar5 = bits_left_in_littlenum + -0xf" identifier = (binary_expression "bits_left_in_littlenum + -0xf" identifier + number_literal)) ;) })) }))) (expression_statement "bits_left_in_littlenum = iVar5;" (assignment_expression "bits_left_in_littlenum = iVar5" identifier = identifier) ;) (expression_statement "iVar5 = (int)uVar7;" (assignment_expression "iVar5 = (int)uVar7" identifier = (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar15 = precision * 0x10;" (assignment_expression "iVar15 = precision * 0x10" identifier = (binary_expression "precision * 0x10" identifier * number_literal)) ;) (if_statement "if ((long)-iVar5 < 0x10 - exponent_bits) {\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }\n    else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }" if (parenthesized_expression "((long)-iVar5 < 0x10 - exponent_bits)" ( (binary_expression "(long)-iVar5 < 0x10 - exponent_bits" (cast_expression "(long)-iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (unary_expression "-iVar5" - identifier)) < (binary_expression "0x10 - exponent_bits" number_literal - identifier)) )) (compound_statement "{\n      if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }\n    }" { (if_statement "if ((precision == 5) && (exponent_bits == 0xf)) {\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }\n      else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }" if (parenthesized_expression "((precision == 5) && (exponent_bits == 0xf))" ( (binary_expression "(precision == 5) && (exponent_bits == 0xf)" (parenthesized_expression "(precision == 5)" ( (binary_expression "precision == 5" identifier == number_literal) )) && (parenthesized_expression "(exponent_bits == 0xf)" ( (binary_expression "exponent_bits == 0xf" identifier == number_literal) ))) )) (compound_statement "{\n        *words = uVar3;\n        iVar9 = next_bits(iVar5 + 0x10);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar9;\n      }" { (expression_statement "*words = uVar3;" (assignment_expression "*words = uVar3" (pointer_expression "*words" * identifier) = identifier) ;) (expression_statement "iVar9 = next_bits(iVar5 + 0x10);" (assignment_expression "iVar9 = next_bits(iVar5 + 0x10)" identifier = (call_expression "next_bits(iVar5 + 0x10)" identifier (argument_list "(iVar5 + 0x10)" ( (binary_expression "iVar5 + 0x10" identifier + number_literal) )))) ;) (expression_statement "puVar10 = words + 2;" (assignment_expression "puVar10 = words + 2" identifier = (binary_expression "words + 2" identifier + number_literal)) ;) (expression_statement "words[1] = (ushort)iVar9;" (assignment_expression "words[1] = (ushort)iVar9" (subscript_expression "words[1]" identifier [ number_literal ]) = (cast_expression "(ushort)iVar9" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) }) (else_clause "else {\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }" else (compound_statement "{\n        iVar9 = next_bits((iVar5 - iVar6) + 0xf);\n        puVar10 = words + 1;\n        *words = uVar3 | (ushort)iVar9;\n      }" { (expression_statement "iVar9 = next_bits((iVar5 - iVar6) + 0xf);" (assignment_expression "iVar9 = next_bits((iVar5 - iVar6) + 0xf)" identifier = (call_expression "next_bits((iVar5 - iVar6) + 0xf)" identifier (argument_list "((iVar5 - iVar6) + 0xf)" ( (binary_expression "(iVar5 - iVar6) + 0xf" (parenthesized_expression "(iVar5 - iVar6)" ( (binary_expression "iVar5 - iVar6" identifier - identifier) )) + number_literal) )))) ;) (expression_statement "puVar10 = words + 1;" (assignment_expression "puVar10 = words + 1" identifier = (binary_expression "words + 1" identifier + number_literal)) ;) (expression_statement "*words = uVar3 | (ushort)iVar9;" (assignment_expression "*words = uVar3 | (ushort)iVar9" (pointer_expression "*words" * identifier) = (binary_expression "uVar3 | (ushort)iVar9" identifier | (cast_expression "(ushort)iVar9" ( (type_descriptor "ushort" type_identifier) ) identifier))) ;) }))) }) (else_clause "else {\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }" else (compound_statement "{\n      *words = uVar3;\n      iVar9 = (iVar6 + -0xf) - iVar5;\n      if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;\n      puVar8 = words + 1;\n      if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }\n      puVar10 = puVar8;\n      if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }\n    }" { (expression_statement "*words = uVar3;" (assignment_expression "*words = uVar3" (pointer_expression "*words" * identifier) = identifier) ;) (expression_statement "iVar9 = (iVar6 + -0xf) - iVar5;" (assignment_expression "iVar9 = (iVar6 + -0xf) - iVar5" identifier = (binary_expression "(iVar6 + -0xf) - iVar5" (parenthesized_expression "(iVar6 + -0xf)" ( (binary_expression "iVar6 + -0xf" identifier + number_literal) )) - identifier)) ;) (if_statement "if ((long)iVar15 <= iVar9 + exponent_bits) goto LAB_0013f190;" if (parenthesized_expression "((long)iVar15 <= iVar9 + exponent_bits)" ( (binary_expression "(long)iVar15 <= iVar9 + exponent_bits" (cast_expression "(long)iVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (binary_expression "iVar9 + exponent_bits" identifier + identifier)) )) (goto_statement "goto LAB_0013f190;" goto statement_identifier ;)) (expression_statement "puVar8 = words + 1;" (assignment_expression "puVar8 = words + 1" identifier = (binary_expression "words + 1" identifier + number_literal)) ;) (if_statement "if (0xf < iVar9) {\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }" if (parenthesized_expression "(0xf < iVar9)" ( (binary_expression "0xf < iVar9" number_literal < identifier) )) (compound_statement "{\n        uVar12 = iVar9 - 0x10U >> 4;\n        do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);\n        puVar8 = words + (ulong)uVar12 + 2;\n        iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;\n      }" { (expression_statement "uVar12 = iVar9 - 0x10U >> 4;" (assignment_expression "uVar12 = iVar9 - 0x10U >> 4" identifier = (binary_expression "iVar9 - 0x10U >> 4" (binary_expression "iVar9 - 0x10U" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        } while (words + (ulong)uVar12 + 2 != puVar10);" do (compound_statement "{\n          puVar10 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar10;\n        }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) }) while (parenthesized_expression "(words + (ulong)uVar12 + 2 != puVar10)" ( (binary_expression "words + (ulong)uVar12 + 2 != puVar10" (binary_expression "words + (ulong)uVar12 + 2" (binary_expression "words + (ulong)uVar12" identifier + (cast_expression "(ulong)uVar12" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) != identifier) )) ;) (expression_statement "puVar8 = words + (ulong)uVar12 + 2;" (assignment_expression "puVar8 = words + (ulong)uVar12 + 2" identifier = (binary_expression "words + (ulong)uVar12 + 2" (binary_expression "words + (ulong)uVar12" identifier + (cast_expression "(ulong)uVar12" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal)) ;) (expression_statement "iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10;" (assignment_expression "iVar9 = (iVar9 - 0x10U) + uVar12 * -0x10" identifier = (binary_expression "(iVar9 - 0x10U) + uVar12 * -0x10" (parenthesized_expression "(iVar9 - 0x10U)" ( (binary_expression "iVar9 - 0x10U" identifier - number_literal) )) + (binary_expression "uVar12 * -0x10" identifier * number_literal))) ;) })) (expression_statement "puVar10 = puVar8;" (assignment_expression "puVar10 = puVar8" identifier = identifier) ;) (if_statement "if (iVar9 != 0) {\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        puVar10 = puVar8 + 1;\n        iVar9 = next_bits(0x10 - iVar9);\n        *puVar8 = (ushort)iVar9;\n      }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar9 = next_bits(0x10 - iVar9);" (assignment_expression "iVar9 = next_bits(0x10 - iVar9)" identifier = (call_expression "next_bits(0x10 - iVar9)" identifier (argument_list "(0x10 - iVar9)" ( (binary_expression "0x10 - iVar9" number_literal - identifier) )))) ;) (expression_statement "*puVar8 = (ushort)iVar9;" (assignment_expression "*puVar8 = (ushort)iVar9" (pointer_expression "*puVar8" * identifier) = (cast_expression "(ushort)iVar9" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) })) }))) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) (if_statement "if (puVar10 < puVar14) {\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }" if (parenthesized_expression "(puVar10 < puVar14)" ( (binary_expression "puVar10 < puVar14" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);\n      puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);\n    }" { (do_statement "do {\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      } while (puVar11 < puVar14);" do (compound_statement "{\n        puVar11 = puVar8 + 1;\n        iVar9 = next_bits(0x10);\n        *puVar8 = (ushort)iVar9;\n        puVar8 = puVar11;\n      }" { (expression_statement "puVar11 = puVar8 + 1;" (assignment_expression "puVar11 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar9 = next_bits(0x10);" (assignment_expression "iVar9 = next_bits(0x10)" identifier = (call_expression "next_bits(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = (ushort)iVar9;" (assignment_expression "*puVar8 = (ushort)iVar9" (pointer_expression "*puVar8" * identifier) = (cast_expression "(ushort)iVar9" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (expression_statement "puVar8 = puVar11;" (assignment_expression "puVar8 = puVar11" identifier = identifier) ;) }) while (parenthesized_expression "(puVar11 < puVar14)" ( (binary_expression "puVar11 < puVar14" identifier < identifier) )) ;) (expression_statement "puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar10 = (ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n                ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU" (binary_expression "(long)puVar14 + (-1 - (long)puVar10)" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar10)" ( (binary_expression "-1 - (long)puVar10" number_literal - (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar9 = next_bits(1);" (assignment_expression "iVar9 = next_bits(1)" identifier = (call_expression "next_bits(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar9 != 0) {\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar6 = iVar15 + -1 + (iVar5 - iVar6);\n      if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }\n    }" { (expression_statement "iVar6 = iVar15 + -1 + (iVar5 - iVar6);" (assignment_expression "iVar6 = iVar15 + -1 + (iVar5 - iVar6)" identifier = (binary_expression "iVar15 + -1 + (iVar5 - iVar6)" (binary_expression "iVar15 + -1" identifier + number_literal) + (parenthesized_expression "(iVar5 - iVar6)" ( (binary_expression "iVar5 - iVar6" identifier - identifier) )))) ;) (if_statement "if (iVar6 < 0x10) {\n        puVar10[-1] = puVar10[-1] + 1;\n      }\n      else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }" if (parenthesized_expression "(iVar6 < 0x10)" ( (binary_expression "iVar6 < 0x10" identifier < number_literal) )) (compound_statement "{\n        puVar10[-1] = puVar10[-1] + 1;\n      }" { (expression_statement "puVar10[-1] = puVar10[-1] + 1;" (assignment_expression "puVar10[-1] = puVar10[-1] + 1" (subscript_expression "puVar10[-1]" identifier [ number_literal ]) = (binary_expression "puVar10[-1] + 1" (subscript_expression "puVar10[-1]" identifier [ number_literal ]) + number_literal)) ;) }) (else_clause "else {\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }" else (compound_statement "{\n        puVar8 = puVar10 + -1;\n        if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }\n        do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      }" { (expression_statement "puVar8 = puVar10 + -1;" (assignment_expression "puVar8 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 == 0x10) {\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }" if (parenthesized_expression "(iVar6 == 0x10)" ( (binary_expression "iVar6 == 0x10" identifier == number_literal) )) (compound_statement "{\n          uVar3 = puVar10[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }\n        }" { (expression_statement "uVar3 = puVar10[-1];" (assignment_expression "uVar3 = puVar10[-1]" identifier = (subscript_expression "puVar10[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" identifier = number_literal) ;) (labeled_statement "LAB_0013f30a:\n          if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }" statement_identifier : (if_statement "if ((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)) {\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }" if (parenthesized_expression "((mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1))" ( (binary_expression "(mask[iVar5] == ((ulong)uVar3 & mask[iVar5])) &&\n             ((long)iVar6 == (iVar15 - exponent_bits) + -1)" (parenthesized_expression "(mask[iVar5] == ((ulong)uVar3 & mask[iVar5]))" ( (binary_expression "mask[iVar5] == ((ulong)uVar3 & mask[iVar5])" (subscript_expression "mask[iVar5]" identifier [ identifier ]) == (parenthesized_expression "((ulong)uVar3 & mask[iVar5])" ( (binary_expression "(ulong)uVar3 & mask[iVar5]" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) & (subscript_expression "mask[iVar5]" identifier [ identifier ])) ))) )) && (parenthesized_expression "((long)iVar6 == (iVar15 - exponent_bits) + -1)" ( (binary_expression "(long)iVar6 == (iVar15 - exponent_bits) + -1" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) == (binary_expression "(iVar15 - exponent_bits) + -1" (parenthesized_expression "(iVar15 - exponent_bits)" ( (binary_expression "iVar15 - exponent_bits" identifier - identifier) )) + number_literal)) ))) )) (compound_statement "{\n            uVar3 = 0;\n            if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }\n            *words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));\n            while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }\n            return 0;\n          }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (if_statement "if (generic_floating_point_number.sign != '+') {\n              uVar3 = 0x8000;\n            }" if (parenthesized_expression "(generic_floating_point_number.sign != '+')" ( (binary_expression "generic_floating_point_number.sign != '+'" (field_expression "generic_floating_point_number.sign" identifier . field_identifier) != (char_literal "'+'" ' character ')) )) (compound_statement "{\n              uVar3 = 0x8000;\n            }" { (expression_statement "uVar3 = 0x8000;" (assignment_expression "uVar3 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f));" (assignment_expression "*words = uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f))" (pointer_expression "*words" * identifier) = (binary_expression "uVar3 | (ushort)(1 << (0xfU - (char)exponent_bits & 0x1f))" identifier | (call_expression "(ushort)(1 << (0xfU - (char)exponent_bits & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(1 << (0xfU - (char)exponent_bits & 0x1f))" ( (binary_expression "1 << (0xfU - (char)exponent_bits & 0x1f)" number_literal << (parenthesized_expression "(0xfU - (char)exponent_bits & 0x1f)" ( (binary_expression "0xfU - (char)exponent_bits & 0x1f" (binary_expression "0xfU - (char)exponent_bits" number_literal - (cast_expression "(char)exponent_bits" ( (type_descriptor "char" primitive_type) ) identifier)) & number_literal) ))) ))))) ;) (while_statement "while (words = words + 1, words < puVar14) {\n              *words = 0;\n            }" while (parenthesized_expression "(words = words + 1, words < puVar14)" ( (comma_expression "words = words + 1, words < puVar14" (assignment_expression "words = words + 1" identifier = (binary_expression "words + 1" identifier + number_literal)) , (binary_expression "words < puVar14" identifier < identifier)) )) (compound_statement "{\n              *words = 0;\n            }" { (expression_statement "*words = 0;" (assignment_expression "*words = 0" (pointer_expression "*words" * identifier) = number_literal) ;) })) (return_statement "return 0;" return number_literal ;) }))) }) (else_clause "else if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }" else (if_statement "if (puVar10[-1] == 0xffff) {\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }" if (parenthesized_expression "(puVar10[-1] == 0xffff)" ( (binary_expression "puVar10[-1] == 0xffff" (subscript_expression "puVar10[-1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n          puVar10 = puVar10 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);\n        }" { (expression_statement "puVar10 = puVar10 + -2;" (assignment_expression "puVar10 = puVar10 + -2" identifier = (binary_expression "puVar10 + -2" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) (do_statement "do {\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          } while (uVar3 == 0xffff);" do (compound_statement "{\n            iVar5 = iVar5 + -0x10;\n            uVar3 = *puVar10;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar10 = puVar10 + -1;\n          }" { (expression_statement "iVar5 = iVar5 + -0x10;" (assignment_expression "iVar5 = iVar5 + -0x10" identifier = (binary_expression "iVar5 + -0x10" identifier + number_literal)) ;) (expression_statement "uVar3 = *puVar10;" (assignment_expression "uVar3 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (if_statement "if (iVar5 < 0x11) goto LAB_0013f30a;" if (parenthesized_expression "(iVar5 < 0x11)" ( (binary_expression "iVar5 < 0x11" identifier < number_literal) )) (goto_statement "goto LAB_0013f30a;" goto statement_identifier ;)) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar3 == 0xffff)" ( (binary_expression "uVar3 == 0xffff" identifier == number_literal) )) ;) })))) (do_statement "do {\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar3 + 1 >> 0x10 != 0);" do (compound_statement "{\n          if (puVar8 < words) {\n            return 0;\n          }\n          uVar3 = *puVar8;\n          *puVar8 = uVar3 + 1;\n          puVar8 = puVar8 + -1;\n        }" { (if_statement "if (puVar8 < words) {\n            return 0;\n          }" if (parenthesized_expression "(puVar8 < words)" ( (binary_expression "puVar8 < words" identifier < identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar3 = *puVar8;" (assignment_expression "uVar3 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*puVar8 = uVar3 + 1;" (assignment_expression "*puVar8 = uVar3 + 1" (pointer_expression "*puVar8" * identifier) = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar3 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar3 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar3 + 1 >> 0x10" (binary_expression "(ulong)uVar3 + 1" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) }))) })) }) (else_clause "else {\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }" else (compound_statement "{\n    if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    make_invalid_floating_point_number(words);\n  }" { (if_statement "if (uVar7 < mask[exponent_bits]) {\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }" if (parenthesized_expression "(uVar7 < mask[exponent_bits])" ( (binary_expression "uVar7 < mask[exponent_bits]" identifier < (subscript_expression "mask[exponent_bits]" identifier [ identifier ])) )) (compound_statement "{\n      iVar5 = next_bits(0xf - iVar6);\n      uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));\n      puVar10 = words + 1;\n      *words = uVar3;\n      bVar2 = exponent_bits == 0xf && precision == 5;\n      if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }\n      puVar8 = puVar10;\n      if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }\n      iVar6 = next_bits(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar10 = puVar10 + -1;\n      do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);\n      if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }\n      *words = *words & 0x7fff;\n      return 0;\n    }" { (expression_statement "iVar5 = next_bits(0xf - iVar6);" (assignment_expression "iVar5 = next_bits(0xf - iVar6)" identifier = (call_expression "next_bits(0xf - iVar6)" identifier (argument_list "(0xf - iVar6)" ( (binary_expression "0xf - iVar6" number_literal - identifier) )))) ;) (expression_statement "uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f));" (assignment_expression "uVar3 = (ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f))" identifier = (binary_expression "(ushort)iVar5 | uVar3 | (ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f))" (binary_expression "(ushort)iVar5 | uVar3" (cast_expression "(ushort)iVar5" ( (type_descriptor "ushort" type_identifier) ) identifier) | identifier) | (call_expression "(ushort)(uVar7 << ((byte)(0xf - iVar6) & 0x3f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar7 << ((byte)(0xf - iVar6) & 0x3f))" ( (binary_expression "uVar7 << ((byte)(0xf - iVar6) & 0x3f)" identifier << (parenthesized_expression "((byte)(0xf - iVar6) & 0x3f)" ( (binary_expression "(byte)(0xf - iVar6) & 0x3f" (call_expression "(byte)(0xf - iVar6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(0xf - iVar6)" ( (binary_expression "0xf - iVar6" number_literal - identifier) ))) & number_literal) ))) ))))) ;) (expression_statement "puVar10 = words + 1;" (assignment_expression "puVar10 = words + 1" identifier = (binary_expression "words + 1" identifier + number_literal)) ;) (expression_statement "*words = uVar3;" (assignment_expression "*words = uVar3" (pointer_expression "*words" * identifier) = identifier) ;) (expression_statement "bVar2 = exponent_bits == 0xf && precision == 5;" (assignment_expression "bVar2 = exponent_bits == 0xf && precision == 5" identifier = (binary_expression "exponent_bits == 0xf && precision == 5" (binary_expression "exponent_bits == 0xf" identifier == number_literal) && (binary_expression "precision == 5" identifier == number_literal))) ;) (if_statement "if (bVar2) {\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n        iVar6 = next_bits(0xf);\n        puVar10 = words + 2;\n        words[1] = (ushort)iVar6 | 0x8000;\n      }" { (expression_statement "iVar6 = next_bits(0xf);" (assignment_expression "iVar6 = next_bits(0xf)" identifier = (call_expression "next_bits(0xf)" identifier (argument_list "(0xf)" ( number_literal )))) ;) (expression_statement "puVar10 = words + 2;" (assignment_expression "puVar10 = words + 2" identifier = (binary_expression "words + 2" identifier + number_literal)) ;) (expression_statement "words[1] = (ushort)iVar6 | 0x8000;" (assignment_expression "words[1] = (ushort)iVar6 | 0x8000" (subscript_expression "words[1]" identifier [ number_literal ]) = (binary_expression "(ushort)iVar6 | 0x8000" (cast_expression "(ushort)iVar6" ( (type_descriptor "ushort" type_identifier) ) identifier) | number_literal)) ;) })) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) (if_statement "if (puVar10 < puVar14) {\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }" if (parenthesized_expression "(puVar10 < puVar14)" ( (binary_expression "puVar10 < puVar14" identifier < identifier) )) (compound_statement "{\n        do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);\n        puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;\n      }" { (do_statement "do {\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        } while (puVar11 < puVar14);" do (compound_statement "{\n          puVar11 = puVar8 + 1;\n          iVar6 = next_bits(0x10);\n          *puVar8 = (ushort)iVar6;\n          puVar8 = puVar11;\n        }" { (expression_statement "puVar11 = puVar8 + 1;" (assignment_expression "puVar11 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar6 = next_bits(0x10);" (assignment_expression "iVar6 = next_bits(0x10)" identifier = (call_expression "next_bits(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = (ushort)iVar6;" (assignment_expression "*puVar8 = (ushort)iVar6" (pointer_expression "*puVar8" * identifier) = (cast_expression "(ushort)iVar6" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (expression_statement "puVar8 = puVar11;" (assignment_expression "puVar8 = puVar11" identifier = identifier) ;) }) while (parenthesized_expression "(puVar11 < puVar14)" ( (binary_expression "puVar11 < puVar14" identifier < identifier) )) ;) (expression_statement "puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)\n        ;" (assignment_expression "puVar10 = (ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n                  ((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar10 + ((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar14 + (-1 - (long)puVar10) & 0xfffffffffffffffeU" (binary_expression "(long)puVar14 + (-1 - (long)puVar10)" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar10)" ( (binary_expression "-1 - (long)puVar10" number_literal - (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar6 = next_bits(1);" (assignment_expression "iVar6 = next_bits(1)" identifier = (call_expression "next_bits(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) (do_statement "do {\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      } while ((ulong)uVar1 + 1 >> 0x10 != 0);" do (compound_statement "{\n        uVar1 = *puVar10;\n        *puVar10 = uVar1 + 1;\n        if (words == puVar10) goto LAB_0013f0ef;\n        puVar10 = puVar10 + -1;\n      }" { (expression_statement "uVar1 = *puVar10;" (assignment_expression "uVar1 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "*puVar10 = uVar1 + 1;" (assignment_expression "*puVar10 = uVar1 + 1" (pointer_expression "*puVar10" * identifier) = (binary_expression "uVar1 + 1" identifier + number_literal)) ;) (if_statement "if (words == puVar10) goto LAB_0013f0ef;" if (parenthesized_expression "(words == puVar10)" ( (binary_expression "words == puVar10" identifier == identifier) )) (goto_statement "goto LAB_0013f0ef;" goto statement_identifier ;)) (expression_statement "puVar10 = puVar10 + -1;" (assignment_expression "puVar10 = puVar10 + -1" identifier = (binary_expression "puVar10 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar1 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar1 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar1 + 1 >> 0x10" (binary_expression "(ulong)uVar1 + 1" (cast_expression "(ulong)uVar1" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) (if_statement "if (words == puVar10) {\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }" if (parenthesized_expression "(words == puVar10)" ( (binary_expression "words == puVar10" identifier == identifier) )) (compound_statement "{\nLAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }\n      }" { (labeled_statement "LAB_0013f0ef:\n        if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }" statement_identifier : (if_statement "if (bVar2) {\n          puVar10[1] = puVar10[1] | 0x8000;\n        }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\n          puVar10[1] = puVar10[1] | 0x8000;\n        }" { (expression_statement "puVar10[1] = puVar10[1] | 0x8000;" (assignment_expression "puVar10[1] = puVar10[1] | 0x8000" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = (binary_expression "puVar10[1] | 0x8000" (subscript_expression "puVar10[1]" identifier [ number_literal ]) | number_literal)) ;) }))) })) (if_statement "if (-1 < (short)(uVar3 ^ *words)) {\n        return 0;\n      }" if (parenthesized_expression "(-1 < (short)(uVar3 ^ *words))" ( (binary_expression "-1 < (short)(uVar3 ^ *words)" number_literal < (cast_expression "(short)(uVar3 ^ *words)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar3 ^ *words)" ( (binary_expression "uVar3 ^ *words" identifier ^ (pointer_expression "*words" * identifier)) )))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*words = *words & 0x7fff;" (assignment_expression "*words = *words & 0x7fff" (pointer_expression "*words" * identifier) = (binary_expression "*words & 0x7fff" (pointer_expression "*words" * identifier) & number_literal)) ;) (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0013f190:\n    make_invalid_floating_point_number(words);" statement_identifier : (expression_statement "make_invalid_floating_point_number(words);" (call_expression "make_invalid_floating_point_number(words)" identifier (argument_list "(words)" ( identifier ))) ;)) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)\n\n{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)\n\n{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_0013ef10(ushort *param_1,int param_2,long param_3)" identifier (parameter_list "(ushort *param_1,int param_2,long param_3)" ( (parameter_declaration "ushort *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "ushort uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "ushort *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ushort *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "ushort *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "long lVar12;" (sized_type_specifier "long" long) identifier ;) (declaration "ushort *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (expression_statement "lVar12 = (long)param_2 * 2;" (assignment_expression "lVar12 = (long)param_2 * 2" identifier = (binary_expression "(long)param_2 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ;) (if_statement "if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" if (parenthesized_expression "(DAT_0015f470 < PTR_DAT_0015f460)" ( (binary_expression "DAT_0015f470 < PTR_DAT_0015f460" identifier < identifier) )) (compound_statement "{\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n      uVar4 = 0x8000;\n    }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "memset(param_1 + 1,0,lVar12 - 2);" (call_expression "memset(param_1 + 1,0,lVar12 - 2)" identifier (argument_list "(param_1 + 1,0,lVar12 - 2)" ( (binary_expression "param_1 + 1" identifier + number_literal) , number_literal , (binary_expression "lVar12 - 2" identifier - number_literal) ))) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == '\0')" ( (binary_expression "DAT_0015f480 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0xffff;" (assignment_expression "param_1[2] = 0xffff" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0xffff;" (assignment_expression "param_1[3] = 0xffff" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == 'P')" ( (binary_expression "DAT_0015f480 == 'P'" identifier == (char_literal "'P'" ' character ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7f80;" (assignment_expression "param_1[0] = 0x7f80" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0x7ff0;" (assignment_expression "param_1[0] = 0x7ff0" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (if_statement "if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" if (parenthesized_expression "(DAT_0015f480 == 'N')" ( (binary_expression "DAT_0015f480 == 'N'" identifier == (char_literal "'N'" ' character ')) )) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" { (if_statement "if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0xff80;" (assignment_expression "param_1[0] = 0xff80" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" if (parenthesized_expression "(param_2 != 5)" ( (binary_expression "param_2 != 5" identifier != number_literal) )) (compound_statement "{\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" { (expression_statement "param_1[0] = 0xfff0;" (assignment_expression "param_1[0] = 0xfff0" (subscript_expression "param_1[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" identifier (argument_list "("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" ( (string_literal ""../../gas/config/atof-ieee.c"" " string_content ") , number_literal , (string_literal ""gen_to_words"" " string_content ") ))) ;) })) (expression_statement "DAT_001686e8 = DAT_0015f470;" (assignment_expression "DAT_001686e8 = DAT_0015f470" identifier = identifier) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "DAT_001686f4 = 0x10;" (assignment_expression "DAT_001686f4 = 0x10" identifier = number_literal) ;) (expression_statement "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);" (assignment_expression "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" identifier = (cast_expression "(int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" ( (binary_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" ( (binary_expression "DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)" identifier + (parenthesized_expression "(2 - (long)PTR_DAT_0015f460)" ( (binary_expression "2 - (long)PTR_DAT_0015f460" number_literal - (cast_expression "(long)PTR_DAT_0015f460" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) >> number_literal) )))) ;) (while_statement "while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }" while (parenthesized_expression "(iVar5 = FUN_0013ee40(1), iVar5 == 0)" ( (comma_expression "iVar5 = FUN_0013ee40(1), iVar5 == 0" (assignment_expression "iVar5 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) )) (compound_statement "{\n    iVar6 = iVar6 + 1;\n  }" { (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) })) (expression_statement "cVar2 = (char)param_3;" (assignment_expression "cVar2 = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);" (assignment_expression "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" identifier = (binary_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" (parenthesized_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6)" ( (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6" (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10" (parenthesized_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1)" ( (binary_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" ( (binary_expression "DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" identifier + (parenthesized_expression "((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" ( (binary_expression "(DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460" (parenthesized_expression "(DAT_0015f478 * 2 + 2)" ( (binary_expression "DAT_0015f478 * 2 + 2" (binary_expression "DAT_0015f478 * 2" identifier * number_literal) + number_literal) )) - (cast_expression "(long)PTR_DAT_0015f460" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) >> number_literal) )) * number_literal) - (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(long)((1 << (cVar2 - 1U & 0x1f)) + -2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((1 << (cVar2 - 1U & 0x1f)) + -2)" ( (binary_expression "(1 << (cVar2 - 1U & 0x1f)) + -2" (parenthesized_expression "(1 << (cVar2 - 1U & 0x1f))" ( (binary_expression "1 << (cVar2 - 1U & 0x1f)" number_literal << (parenthesized_expression "(cVar2 - 1U & 0x1f)" ( (binary_expression "cVar2 - 1U & 0x1f" (binary_expression "cVar2 - 1U" identifier - number_literal) & number_literal) ))) )) + number_literal) ))))) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n    uVar4 = 0x8000;\n  }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "puVar13 = (ushort *)(lVar12 + (long)param_1);" (assignment_expression "puVar13 = (ushort *)(lVar12 + (long)param_1)" identifier = (cast_expression "(ushort *)(lVar12 + (long)param_1)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar12 + (long)param_1)" ( (binary_expression "lVar12 + (long)param_1" identifier + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" if (parenthesized_expression "((long)uVar7 < 1)" ( (binary_expression "(long)uVar7 < 1" (cast_expression "(long)uVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }" { (if_statement "if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" if (parenthesized_expression "(DAT_001686f0 == 0)" ( (binary_expression "DAT_001686f0 == 0" identifier == number_literal) )) (compound_statement "{\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }" { (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" identifier = (binary_expression "DAT_001686e8 + 2" identifier + number_literal)) ;) (expression_statement "DAT_001686f0 = 1;" (assignment_expression "DAT_001686f0 = 1" identifier = number_literal) ;) (expression_statement "DAT_001686f4 = 1;" (assignment_expression "DAT_001686f4 = 1" identifier = number_literal) ;) (expression_statement "iVar6 = DAT_001686f4;" (assignment_expression "iVar6 = DAT_001686f4" identifier = identifier) ;) }) (else_clause "else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" else (compound_statement "{\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" { (expression_statement "iVar6 = DAT_001686f4 + 1;" (assignment_expression "iVar6 = DAT_001686f4 + 1" identifier = (binary_expression "DAT_001686f4 + 1" identifier + number_literal)) ;) (if_statement "if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" if (parenthesized_expression "(0x10 < DAT_001686f4 + 1)" ( (binary_expression "0x10 < DAT_001686f4 + 1" number_literal < (binary_expression "DAT_001686f4 + 1" identifier + number_literal)) )) (compound_statement "{\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" { (expression_statement "DAT_001686f0 = DAT_001686f0 + 1;" (assignment_expression "DAT_001686f0 = DAT_001686f0 + 1" identifier = (binary_expression "DAT_001686f0 + 1" identifier + number_literal)) ;) (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" identifier = (binary_expression "DAT_001686e8 + 2" identifier + number_literal)) ;) (expression_statement "iVar6 = DAT_001686f4 + -0xf;" (assignment_expression "iVar6 = DAT_001686f4 + -0xf" identifier = (binary_expression "DAT_001686f4 + -0xf" identifier + number_literal)) ;) })) }))) (expression_statement "DAT_001686f4 = iVar6;" (assignment_expression "DAT_001686f4 = iVar6" identifier = identifier) ;) (expression_statement "iVar5 = (int)uVar7;" (assignment_expression "iVar5 = (int)uVar7" identifier = (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = param_2 * 0x10;" (assignment_expression "iVar14 = param_2 * 0x10" identifier = (binary_expression "param_2 * 0x10" identifier * number_literal)) ;) (expression_statement "iVar6 = iVar5 - (int)param_3;" (assignment_expression "iVar6 = iVar5 - (int)param_3" identifier = (binary_expression "iVar5 - (int)param_3" identifier - (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" if (parenthesized_expression "((long)-iVar5 < 0x10 - param_3)" ( (binary_expression "(long)-iVar5 < 0x10 - param_3" (cast_expression "(long)-iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (unary_expression "-iVar5" - identifier)) < (binary_expression "0x10 - param_3" number_literal - identifier)) )) (compound_statement "{\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }" { (if_statement "if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" if (parenthesized_expression "((param_2 == 5) && (param_3 == 0xf))" ( (binary_expression "(param_2 == 5) && (param_3 == 0xf)" (parenthesized_expression "(param_2 == 5)" ( (binary_expression "param_2 == 5" identifier == number_literal) )) && (parenthesized_expression "(param_3 == 0xf)" ( (binary_expression "param_3 == 0xf" identifier == number_literal) ))) )) (compound_statement "{\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }" { (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "uVar4 = FUN_0013ee40(iVar5 + 0x10);" (assignment_expression "uVar4 = FUN_0013ee40(iVar5 + 0x10)" identifier = (call_expression "FUN_0013ee40(iVar5 + 0x10)" identifier (argument_list "(iVar5 + 0x10)" ( (binary_expression "iVar5 + 0x10" identifier + number_literal) )))) ;) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "param_1[1] = uVar4;" (assignment_expression "param_1[1] = uVar4" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" else (compound_statement "{\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" { (expression_statement "uVar3 = FUN_0013ee40(iVar6 + 0xf);" (assignment_expression "uVar3 = FUN_0013ee40(iVar6 + 0xf)" identifier = (call_expression "FUN_0013ee40(iVar6 + 0xf)" identifier (argument_list "(iVar6 + 0xf)" ( (binary_expression "iVar6 + 0xf" identifier + number_literal) )))) ;) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = uVar4 | uVar3;" (assignment_expression "*param_1 = uVar4 | uVar3" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar4 | uVar3" identifier | identifier)) ;) }))) }) (else_clause "else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" else (compound_statement "{\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" { (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar5 = ((int)param_3 + -0xf) - iVar5;" (assignment_expression "iVar5 = ((int)param_3 + -0xf) - iVar5" identifier = (binary_expression "((int)param_3 + -0xf) - iVar5" (parenthesized_expression "((int)param_3 + -0xf)" ( (binary_expression "(int)param_3 + -0xf" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) - identifier)) ;) (if_statement "if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;" if (parenthesized_expression "((long)iVar14 <= iVar5 + param_3)" ( (binary_expression "(long)iVar14 <= iVar5 + param_3" (cast_expression "(long)iVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (binary_expression "iVar5 + param_3" identifier + identifier)) )) (goto_statement "goto LAB_0013f190;" goto statement_identifier ;)) (expression_statement "puVar8 = param_1 + 1;" (assignment_expression "puVar8 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (if_statement "if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" if (parenthesized_expression "(0xf < iVar5)" ( (binary_expression "0xf < iVar5" number_literal < identifier) )) (compound_statement "{\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" { (expression_statement "uVar11 = iVar5 - 0x10U >> 4;" (assignment_expression "uVar11 = iVar5 - 0x10U >> 4" identifier = (binary_expression "iVar5 - 0x10U >> 4" (binary_expression "iVar5 - 0x10U" identifier - number_literal) >> number_literal)) ;) (do_statement "do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);" do (compound_statement "{\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        }" { (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + (ulong)uVar11 + 2 != puVar9)" ( (binary_expression "param_1 + (ulong)uVar11 + 2 != puVar9" (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" identifier + (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) != identifier) )) ;) (expression_statement "puVar8 = param_1 + (ulong)uVar11 + 2;" (assignment_expression "puVar8 = param_1 + (ulong)uVar11 + 2" identifier = (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" identifier + (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal)) ;) (expression_statement "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;" (assignment_expression "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10" identifier = (binary_expression "(iVar5 - 0x10U) + uVar11 * -0x10" (parenthesized_expression "(iVar5 - 0x10U)" ( (binary_expression "iVar5 - 0x10U" identifier - number_literal) )) + (binary_expression "uVar11 * -0x10" identifier * number_literal))) ;) })) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" identifier = identifier) ;) (if_statement "if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" { (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0013ee40(0x10 - iVar5);" (assignment_expression "uVar4 = FUN_0013ee40(0x10 - iVar5)" identifier = (call_expression "FUN_0013ee40(0x10 - iVar5)" identifier (argument_list "(0x10 - iVar5)" ( (binary_expression "0x10 - iVar5" number_literal - identifier) )))) ;) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" * identifier) = identifier) ;) })) }))) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" if (parenthesized_expression "(puVar9 < puVar13)" ( (binary_expression "puVar9 < puVar13" identifier < identifier) )) (compound_statement "{\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" { (do_statement "do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);" do (compound_statement "{\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0013ee40(0x10);" (assignment_expression "uVar4 = FUN_0013ee40(0x10)" identifier = (call_expression "FUN_0013ee40(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 < puVar13)" ( (binary_expression "puVar10 < puVar13" identifier < identifier) )) ;) (expression_statement "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar9)" ( (binary_expression "-1 - (long)puVar9" number_literal - (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar5 = FUN_0013ee40(1);" (assignment_expression "iVar5 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" { (expression_statement "iVar6 = iVar14 + -1 + iVar6;" (assignment_expression "iVar6 = iVar14 + -1 + iVar6" identifier = (binary_expression "iVar14 + -1 + iVar6" (binary_expression "iVar14 + -1" identifier + number_literal) + identifier)) ;) (if_statement "if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" if (parenthesized_expression "(iVar6 < 0x10)" ( (binary_expression "iVar6 < 0x10" identifier < number_literal) )) (compound_statement "{\n        puVar9[-1] = puVar9[-1] + 1;\n      }" { (expression_statement "puVar9[-1] = puVar9[-1] + 1;" (assignment_expression "puVar9[-1] = puVar9[-1] + 1" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) = (binary_expression "puVar9[-1] + 1" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) + number_literal)) ;) }) (else_clause "else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" else (compound_statement "{\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" { (expression_statement "puVar8 = puVar9 + -1;" (assignment_expression "puVar8 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" if (parenthesized_expression "(iVar6 == 0x10)" ( (binary_expression "iVar6 == 0x10" identifier == number_literal) )) (compound_statement "{\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }" { (expression_statement "uVar4 = puVar9[-1];" (assignment_expression "uVar4 = puVar9[-1]" identifier = (subscript_expression "puVar9[-1]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" identifier = number_literal) ;) (labeled_statement "LAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" statement_identifier : (if_statement "if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" if (parenthesized_expression "((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1))" ( (binary_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)" (parenthesized_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)))" ( (binary_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" ( (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) )))) == (parenthesized_expression "((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" ( (binary_expression "(ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) & (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" ( (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ))) )) && (parenthesized_expression "((long)iVar6 == (iVar14 - param_3) + -1)" ( (binary_expression "(long)iVar6 == (iVar14 - param_3) + -1" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) == (binary_expression "(iVar14 - param_3) + -1" (parenthesized_expression "(iVar14 - param_3)" ( (binary_expression "iVar14 - param_3" identifier - identifier) )) + number_literal)) ))) )) (compound_statement "{\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (if_statement "if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }" if (parenthesized_expression "(DAT_0015f480 != '+')" ( (binary_expression "DAT_0015f480 != '+'" identifier != (char_literal "'+'" ' character ')) )) (compound_statement "{\n              uVar4 = 0x8000;\n            }" { (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" identifier = number_literal) ;) })) (expression_statement "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));" (assignment_expression "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" (pointer_expression "*param_1" * identifier) = (binary_expression "uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" identifier | (call_expression "(ushort)(1 << (0xfU - cVar2 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(1 << (0xfU - cVar2 & 0x1f))" ( (binary_expression "1 << (0xfU - cVar2 & 0x1f)" number_literal << (parenthesized_expression "(0xfU - cVar2 & 0x1f)" ( (binary_expression "0xfU - cVar2 & 0x1f" (binary_expression "0xfU - cVar2" number_literal - identifier) & number_literal) ))) ))))) ;) (while_statement "while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }" while (parenthesized_expression "(param_1 = param_1 + 1, param_1 < puVar13)" ( (comma_expression "param_1 = param_1 + 1, param_1 < puVar13" (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_1 < puVar13" identifier < identifier)) )) (compound_statement "{\n              *param_1 = 0;\n            }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) })) (return_statement "return 0;" return number_literal ;) }))) }) (else_clause "else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" else (if_statement "if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" if (parenthesized_expression "(puVar9[-1] == 0xffff)" ( (binary_expression "puVar9[-1] == 0xffff" (subscript_expression "puVar9[-1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" { (expression_statement "puVar9 = puVar9 + -2;" (assignment_expression "puVar9 = puVar9 + -2" identifier = (binary_expression "puVar9 + -2" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" identifier = identifier) ;) (do_statement "do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);" do (compound_statement "{\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          }" { (expression_statement "iVar5 = iVar5 + -0x10;" (assignment_expression "iVar5 = iVar5 + -0x10" identifier = (binary_expression "iVar5 + -0x10" identifier + number_literal)) ;) (expression_statement "uVar4 = *puVar9;" (assignment_expression "uVar4 = *puVar9" identifier = (pointer_expression "*puVar9" * identifier)) ;) (if_statement "if (iVar5 < 0x11) goto LAB_0013f30a;" if (parenthesized_expression "(iVar5 < 0x11)" ( (binary_expression "iVar5 < 0x11" identifier < number_literal) )) (goto_statement "goto LAB_0013f30a;" goto statement_identifier ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 == 0xffff)" ( (binary_expression "uVar4 == 0xffff" identifier == number_literal) )) ;) })))) (do_statement "do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);" do (compound_statement "{\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        }" { (if_statement "if (puVar8 < param_1) {\n            return 0;\n          }" if (parenthesized_expression "(puVar8 < param_1)" ( (binary_expression "puVar8 < param_1" identifier < identifier) )) (compound_statement "{\n            return 0;\n          }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar4 = *puVar8;" (assignment_expression "uVar4 = *puVar8" identifier = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "*puVar8 = uVar4 + 1;" (assignment_expression "*puVar8 = uVar4 + 1" (pointer_expression "*puVar8" * identifier) = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar4 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar4 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar4 + 1 >> 0x10" (binary_expression "(ulong)uVar4 + 1" (cast_expression "(ulong)uVar4" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) }))) })) }) (else_clause "else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" else (compound_statement "{\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" { (if_statement "if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" if (parenthesized_expression "(uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8))" ( (binary_expression "uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)" identifier < (pointer_expression "*(ulong *)(&DAT_0014a840 + param_3 * 8)" * (cast_expression "(ulong *)(&DAT_0014a840 + param_3 * 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_0014a840 + param_3 * 8)" ( (binary_expression "&DAT_0014a840 + param_3 * 8" (pointer_expression "&DAT_0014a840" & identifier) + (binary_expression "param_3 * 8" identifier * number_literal)) ))))) )) (compound_statement "{\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" { (expression_statement "uVar3 = FUN_0013ee40();" (assignment_expression "uVar3 = FUN_0013ee40()" identifier = (call_expression "FUN_0013ee40()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));" (assignment_expression "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" identifier = (binary_expression "uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (binary_expression "uVar3 | uVar4" identifier | identifier) | (call_expression "(ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar7 << (0xfU - cVar2 & 0x3f))" ( (binary_expression "uVar7 << (0xfU - cVar2 & 0x3f)" identifier << (parenthesized_expression "(0xfU - cVar2 & 0x3f)" ( (binary_expression "0xfU - cVar2 & 0x3f" (binary_expression "0xfU - cVar2" number_literal - identifier) & number_literal) ))) ))))) ;) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "bVar1 = param_3 == 0xf && param_2 == 5;" (assignment_expression "bVar1 = param_3 == 0xf && param_2 == 5" identifier = (binary_expression "param_3 == 0xf && param_2 == 5" (binary_expression "param_3 == 0xf" identifier == number_literal) && (binary_expression "param_2 == 5" identifier == number_literal))) ;) (if_statement "if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" { (expression_statement "uVar3 = FUN_0013ee40(0xf);" (assignment_expression "uVar3 = FUN_0013ee40(0xf)" identifier = (call_expression "FUN_0013ee40(0xf)" identifier (argument_list "(0xf)" ( number_literal )))) ;) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (expression_statement "param_1[1] = uVar3 | 0x8000;" (assignment_expression "param_1[1] = uVar3 | 0x8000" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "uVar3 | 0x8000" identifier | number_literal)) ;) })) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" identifier = identifier) ;) (if_statement "if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" if (parenthesized_expression "(puVar9 < puVar13)" ( (binary_expression "puVar9 < puVar13" identifier < identifier) )) (compound_statement "{\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" { (do_statement "do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);" do (compound_statement "{\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        }" { (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar3 = FUN_0013ee40(0x10);" (assignment_expression "uVar3 = FUN_0013ee40(0x10)" identifier = (call_expression "FUN_0013ee40(0x10)" identifier (argument_list "(0x10)" ( number_literal )))) ;) (expression_statement "*puVar8 = uVar3;" (assignment_expression "*puVar8 = uVar3" (pointer_expression "*puVar8" * identifier) = identifier) ;) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 < puVar13)" ( (binary_expression "puVar10 < puVar13" identifier < identifier) )) ;) (expression_statement "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" identifier = (cast_expression "(ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" ( (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" ( (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(-1 - (long)puVar9)" ( (binary_expression "-1 - (long)puVar9" number_literal - (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) & number_literal) ))) + number_literal) )))) ;) })) (expression_statement "iVar6 = FUN_0013ee40(1);" (assignment_expression "iVar6 = FUN_0013ee40(1)" identifier = (call_expression "FUN_0013ee40(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) (do_statement "do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);" do (compound_statement "{\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      }" { (expression_statement "uVar3 = *puVar9;" (assignment_expression "uVar3 = *puVar9" identifier = (pointer_expression "*puVar9" * identifier)) ;) (expression_statement "*puVar9 = uVar3 + 1;" (assignment_expression "*puVar9 = uVar3 + 1" (pointer_expression "*puVar9" * identifier) = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) (if_statement "if (param_1 == puVar9) goto LAB_0013f0ef;" if (parenthesized_expression "(param_1 == puVar9)" ( (binary_expression "param_1 == puVar9" identifier == identifier) )) (goto_statement "goto LAB_0013f0ef;" goto statement_identifier ;)) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" identifier = (binary_expression "puVar9 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "((ulong)uVar3 + 1 >> 0x10 != 0)" ( (binary_expression "(ulong)uVar3 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar3 + 1 >> 0x10" (binary_expression "(ulong)uVar3 + 1" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) + number_literal) >> number_literal) != number_literal) )) ;) (if_statement "if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" if (parenthesized_expression "(param_1 == puVar9)" ( (binary_expression "param_1 == puVar9" identifier == identifier) )) (compound_statement "{\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" { (labeled_statement "LAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" statement_identifier : (if_statement "if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" if (parenthesized_expression "(bVar1)" ( identifier )) (compound_statement "{\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" { (expression_statement "puVar9[1] = puVar9[1] | 0x8000;" (assignment_expression "puVar9[1] = puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = (binary_expression "puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" identifier [ number_literal ]) | number_literal)) ;) }))) })) (if_statement "if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }" if (parenthesized_expression "(-1 < (short)(uVar4 ^ *param_1))" ( (binary_expression "-1 < (short)(uVar4 ^ *param_1)" number_literal < (cast_expression "(short)(uVar4 ^ *param_1)" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "(uVar4 ^ *param_1)" ( (binary_expression "uVar4 ^ *param_1" identifier ^ (pointer_expression "*param_1" * identifier)) )))) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*param_1 = *param_1 & 0x7fff;" (assignment_expression "*param_1 = *param_1 & 0x7fff" (pointer_expression "*param_1" * identifier) = (binary_expression "*param_1 & 0x7fff" (pointer_expression "*param_1" * identifier) & number_literal)) ;) (return_statement "return 0;" return number_literal ;) })) (labeled_statement "LAB_0013f190:\n    FUN_0013eed0(param_1);" statement_identifier : (expression_statement "FUN_0013eed0(param_1);" (call_expression "FUN_0013eed0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;)) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT - LIT) ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ))) >> LIT) )))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) , (binary_expression IDENT == LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ))) >> LIT) )) * LIT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) & LIT) ))) )) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (unary_expression - IDENT)) < (binary_expression LIT - IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT | IDENT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )) - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) <= (binary_expression IDENT + IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - LIT) >> LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + LIT) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (binary_expression IDENT * LIT))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression LIT - IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) & LIT) ))) + LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) }) (else_clause else (compound_statement { (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 = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) )))) == (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ))))) ))) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) == (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) ))))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT < IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (return_statement return LIT ;) }))) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) })))) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) >> LIT) != LIT) )) ;) }))) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression IDENT * LIT)) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT | IDENT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT == LIT))) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT | LIT)) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) & LIT) ))) + LIT) )))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) >> LIT) != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) | LIT)) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression IDENT ^ (pointer_expression * IDENT)) )))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) & LIT)) ;) (return_statement return LIT ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) }))) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_0013ef10(ushort *param_1,int param_2,long param_3)\n\n{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_0013ef10(ushort *param_1,int param_2,long param_3)" (identifier "FUN_0013ef10") (parameter_list "(ushort *param_1,int param_2,long param_3)" (( "(") (parameter_declaration "ushort *param_1" (type_identifier "ushort") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  bool bVar1;\n  char cVar2;\n  ushort uVar3;\n  ushort uVar4;\n  int iVar5;\n  int iVar6;\n  ulong uVar7;\n  ushort *puVar8;\n  ushort *puVar9;\n  ushort *puVar10;\n  uint uVar11;\n  long lVar12;\n  ushort *puVar13;\n  int iVar14;\n  \n  lVar12 = (long)param_2 * 2;\n  if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }\n  if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }\n  if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }\n  DAT_001686e8 = DAT_0015f470;\n  iVar6 = 0;\n  DAT_001686f4 = 0x10;\n  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);\n  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }\n  cVar2 = (char)param_3;\n  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);\n  uVar4 = 0;\n  if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }\n  puVar13 = (ushort *)(lVar12 + (long)param_1);\n  if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }\n  return 0;\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "ushort uVar3;" (type_identifier "ushort") (identifier "uVar3") (; ";")) (declaration "ushort uVar4;" (type_identifier "ushort") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "ulong uVar7;" (type_identifier "ulong") (identifier "uVar7") (; ";")) (declaration "ushort *puVar8;" (type_identifier "ushort") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "ushort *puVar9;" (type_identifier "ushort") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "ushort *puVar10;" (type_identifier "ushort") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "long lVar12;" (sized_type_specifier "long" (long "long")) (identifier "lVar12") (; ";")) (declaration "ushort *puVar13;" (type_identifier "ushort") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "int iVar14;" (primitive_type "int") (identifier "iVar14") (; ";")) (expression_statement "lVar12 = (long)param_2 * 2;" (assignment_expression "lVar12 = (long)param_2 * 2" (identifier "lVar12") (= "=") (binary_expression "(long)param_2 * 2" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (* "*") (number_literal "2"))) (; ";")) (if_statement "if (DAT_0015f470 < PTR_DAT_0015f460) {\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" (if "if") (parenthesized_expression "(DAT_0015f470 < PTR_DAT_0015f460)" (( "(") (binary_expression "DAT_0015f470 < PTR_DAT_0015f460" (identifier "DAT_0015f470") (< "<") (identifier "PTR_DAT_0015f460")) () ")")) (compound_statement "{\n    uVar4 = 0;\n    if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }\n    *param_1 = uVar4;\n    memset(param_1 + 1,0,lVar12 - 2);\n    return 0;\n  }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (if_statement "if (DAT_0015f480 != '+') {\n      uVar4 = 0x8000;\n    }" (if "if") (parenthesized_expression "(DAT_0015f480 != '+')" (( "(") (binary_expression "DAT_0015f480 != '+'" (identifier "DAT_0015f480") (!= "!=") (char_literal "'+'" (' "'") (character "+") (' "'"))) () ")")) (compound_statement "{\n      uVar4 = 0x8000;\n    }" ({ "{") (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" (identifier "uVar4") (= "=") (number_literal "0x8000")) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "memset(param_1 + 1,0,lVar12 - 2);" (call_expression "memset(param_1 + 1,0,lVar12 - 2)" (identifier "memset") (argument_list "(param_1 + 1,0,lVar12 - 2)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (number_literal "0") (, ",") (binary_expression "lVar12 - 2" (identifier "lVar12") (- "-") (number_literal "2")) () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (DAT_0015f480 == '\0') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" (if "if") (parenthesized_expression "(DAT_0015f480 == '\0')" (( "(") (binary_expression "DAT_0015f480 == '\0'" (identifier "DAT_0015f480") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");\n  }" ({ "{") (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0x7fff")) (; ";")) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0xffff")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 != 5)" (( "(") (binary_expression "param_2 != 5" (identifier "param_2") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n      param_1[0] = 0x7fff;\n      param_1[1] = 0xffff;\n      param_1[2] = 0xffff;\n      param_1[3] = 0xffff;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0x7fff;" (assignment_expression "param_1[0] = 0x7fff" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0x7fff")) (; ";")) (expression_statement "param_1[1] = 0xffff;" (assignment_expression "param_1[1] = 0xffff" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0xffff")) (; ";")) (expression_statement "param_1[2] = 0xffff;" (assignment_expression "param_1[2] = 0xffff" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0xffff")) (; ";")) (expression_statement "param_1[3] = 0xffff;" (assignment_expression "param_1[3] = 0xffff" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0xffff")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" (identifier "FUN_0011e990") (argument_list "("../../gas/config/atof-ieee.c",0x135,"gen_to_words")" (( "(") (string_literal ""../../gas/config/atof-ieee.c"" (" """) (string_content "../../gas/config/atof-ieee.c") (" """)) (, ",") (number_literal "0x135") (, ",") (string_literal ""gen_to_words"" (" """) (string_content "gen_to_words") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (DAT_0015f480 == 'P') {\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" (if "if") (parenthesized_expression "(DAT_0015f480 == 'P')" (( "(") (binary_expression "DAT_0015f480 == 'P'" (identifier "DAT_0015f480") (== "==") (char_literal "'P'" (' "'") (character "P") (' "'"))) () ")")) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");\n  }" ({ "{") (if_statement "if (param_2 == 2) {\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      param_1[0] = 0x7f80;\n      param_1[1] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0x7f80;" (assignment_expression "param_1[0] = 0x7f80" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0x7f80")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 != 5)" (( "(") (binary_expression "param_2 != 5" (identifier "param_2") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n      param_1[0] = 0x7ff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0x7ff0;" (assignment_expression "param_1[0] = 0x7ff0" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0x7ff0")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" (identifier "FUN_0011e990") (argument_list "("../../gas/config/atof-ieee.c",0x15e,"gen_to_words")" (( "(") (string_literal ""../../gas/config/atof-ieee.c"" (" """) (string_content "../../gas/config/atof-ieee.c") (" """)) (, ",") (number_literal "0x15e") (, ",") (string_literal ""gen_to_words"" (" """) (string_content "gen_to_words") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (DAT_0015f480 == 'N') {\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" (if "if") (parenthesized_expression "(DAT_0015f480 == 'N')" (( "(") (binary_expression "DAT_0015f480 == 'N'" (identifier "DAT_0015f480") (== "==") (char_literal "'N'" (' "'") (character "N") (' "'"))) () ")")) (compound_statement "{\n    if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }\n    if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }\n                    \n    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");\n  }" ({ "{") (if_statement "if (param_2 == 2) {\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n      param_1[0] = 0xff80;\n      param_1[1] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0xff80;" (assignment_expression "param_1[0] = 0xff80" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0xff80")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_2 != 5) {\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 != 5)" (( "(") (binary_expression "param_2 != 5" (identifier "param_2") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n      param_1[0] = 0xfff0;\n      param_1[1] = 0;\n      param_1[2] = 0;\n      param_1[3] = 0;\n      return 0;\n    }" ({ "{") (expression_statement "param_1[0] = 0xfff0;" (assignment_expression "param_1[0] = 0xfff0" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0xfff0")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");" (call_expression "FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" (identifier "FUN_0011e990") (argument_list "("../../gas/config/atof-ieee.c",0x187,"gen_to_words")" (( "(") (string_literal ""../../gas/config/atof-ieee.c"" (" """) (string_content "../../gas/config/atof-ieee.c") (" """)) (, ",") (number_literal "0x187") (, ",") (string_literal ""gen_to_words"" (" """) (string_content "gen_to_words") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "DAT_001686e8 = DAT_0015f470;" (assignment_expression "DAT_001686e8 = DAT_0015f470" (identifier "DAT_001686e8") (= "=") (identifier "DAT_0015f470")) (; ";")) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_001686f4 = 0x10;" (assignment_expression "DAT_001686f4 = 0x10" (identifier "DAT_001686f4") (= "=") (number_literal "0x10")) (; ";")) (expression_statement "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);" (assignment_expression "DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" (identifier "DAT_001686f0") (= "=") (cast_expression "(int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1)" (( "(") (binary_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460))" (( "(") (binary_expression "DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)" (identifier "DAT_0015f470") (+ "+") (parenthesized_expression "(2 - (long)PTR_DAT_0015f460)" (( "(") (binary_expression "2 - (long)PTR_DAT_0015f460" (number_literal "2") (- "-") (cast_expression "(long)PTR_DAT_0015f460" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "PTR_DAT_0015f460"))) () ")"))) () ")"))) (>> ">>") (number_literal "1")) () ")")))) (; ";")) (while_statement "while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {\n    iVar6 = iVar6 + 1;\n  }" (while "while") (parenthesized_expression "(iVar5 = FUN_0013ee40(1), iVar5 == 0)" (( "(") (comma_expression "iVar5 = FUN_0013ee40(1), iVar5 == 0" (assignment_expression "iVar5 = FUN_0013ee40(1)" (identifier "iVar5") (= "=") (call_expression "FUN_0013ee40(1)" (identifier "FUN_0013ee40") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (, ",") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n    iVar6 = iVar6 + 1;\n  }" ({ "{") (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "cVar2 = (char)param_3;" (assignment_expression "cVar2 = (char)param_3" (identifier "cVar2") (= "=") (cast_expression "(char)param_3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);" (assignment_expression "uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" (identifier "uVar7") (= "=") (binary_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2)" (parenthesized_expression "(((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6)" (( "(") (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -\n          (long)iVar6" (binary_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10" (parenthesized_expression "((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1)" (( "(") (binary_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1" (cast_expression "(long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460))" (( "(") (binary_expression "DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" (identifier "DAT_0015f470") (+ "+") (parenthesized_expression "((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)" (( "(") (binary_expression "(DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460" (parenthesized_expression "(DAT_0015f478 * 2 + 2)" (( "(") (binary_expression "DAT_0015f478 * 2 + 2" (binary_expression "DAT_0015f478 * 2" (identifier "DAT_0015f478") (* "*") (number_literal "2")) (+ "+") (number_literal "2")) () ")")) (- "-") (cast_expression "(long)PTR_DAT_0015f460" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "PTR_DAT_0015f460"))) () ")"))) () ")"))) (>> ">>") (number_literal "1")) () ")")) (* "*") (number_literal "0x10")) (- "-") (cast_expression "(long)iVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar6"))) () ")")) (+ "+") (cast_expression "(long)((1 << (cVar2 - 1U & 0x1f)) + -2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((1 << (cVar2 - 1U & 0x1f)) + -2)" (( "(") (binary_expression "(1 << (cVar2 - 1U & 0x1f)) + -2" (parenthesized_expression "(1 << (cVar2 - 1U & 0x1f))" (( "(") (binary_expression "1 << (cVar2 - 1U & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(cVar2 - 1U & 0x1f)" (( "(") (binary_expression "cVar2 - 1U & 0x1f" (binary_expression "cVar2 - 1U" (identifier "cVar2") (- "-") (number_literal "1U")) (& "&") (number_literal "0x1f")) () ")"))) () ")")) (+ "+") (number_literal "-2")) () ")"))))) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (if_statement "if (DAT_0015f480 != '+') {\n    uVar4 = 0x8000;\n  }" (if "if") (parenthesized_expression "(DAT_0015f480 != '+')" (( "(") (binary_expression "DAT_0015f480 != '+'" (identifier "DAT_0015f480") (!= "!=") (char_literal "'+'" (' "'") (character "+") (' "'"))) () ")")) (compound_statement "{\n    uVar4 = 0x8000;\n  }" ({ "{") (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" (identifier "uVar4") (= "=") (number_literal "0x8000")) (; ";")) (} "}"))) (expression_statement "puVar13 = (ushort *)(lVar12 + (long)param_1);" (assignment_expression "puVar13 = (ushort *)(lVar12 + (long)param_1)" (identifier "puVar13") (= "=") (cast_expression "(ushort *)(lVar12 + (long)param_1)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar12 + (long)param_1)" (( "(") (binary_expression "lVar12 + (long)param_1" (identifier "lVar12") (+ "+") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) () ")")))) (; ";")) (if_statement "if ((long)uVar7 < 1) {\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }\n  else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" (if "if") (parenthesized_expression "((long)uVar7 < 1)" (( "(") (binary_expression "(long)uVar7 < 1" (cast_expression "(long)uVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar7")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }\n    DAT_001686f4 = iVar6;\n    iVar5 = (int)uVar7;\n    iVar14 = param_2 * 0x10;\n    iVar6 = iVar5 - (int)param_3;\n    if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }\n    puVar8 = puVar9;\n    if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }\n    iVar5 = FUN_0013ee40(1);\n    if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }\n  }" ({ "{") (if_statement "if (DAT_001686f0 == 0) {\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }\n    else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" (if "if") (parenthesized_expression "(DAT_001686f0 == 0)" (( "(") (binary_expression "DAT_001686f0 == 0" (identifier "DAT_001686f0") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      DAT_001686e8 = DAT_001686e8 + 2;\n      DAT_001686f0 = 1;\n      DAT_001686f4 = 1;\n      iVar6 = DAT_001686f4;\n    }" ({ "{") (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" (identifier "DAT_001686e8") (= "=") (binary_expression "DAT_001686e8 + 2" (identifier "DAT_001686e8") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "DAT_001686f0 = 1;" (assignment_expression "DAT_001686f0 = 1" (identifier "DAT_001686f0") (= "=") (number_literal "1")) (; ";")) (expression_statement "DAT_001686f4 = 1;" (assignment_expression "DAT_001686f4 = 1" (identifier "DAT_001686f4") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar6 = DAT_001686f4;" (assignment_expression "iVar6 = DAT_001686f4" (identifier "iVar6") (= "=") (identifier "DAT_001686f4")) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" (else "else") (compound_statement "{\n      iVar6 = DAT_001686f4 + 1;\n      if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }\n    }" ({ "{") (expression_statement "iVar6 = DAT_001686f4 + 1;" (assignment_expression "iVar6 = DAT_001686f4 + 1" (identifier "iVar6") (= "=") (binary_expression "DAT_001686f4 + 1" (identifier "DAT_001686f4") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (0x10 < DAT_001686f4 + 1) {\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" (if "if") (parenthesized_expression "(0x10 < DAT_001686f4 + 1)" (( "(") (binary_expression "0x10 < DAT_001686f4 + 1" (number_literal "0x10") (< "<") (binary_expression "DAT_001686f4 + 1" (identifier "DAT_001686f4") (+ "+") (number_literal "1"))) () ")")) (compound_statement "{\n        DAT_001686f0 = DAT_001686f0 + 1;\n        DAT_001686e8 = DAT_001686e8 + 2;\n        iVar6 = DAT_001686f4 + -0xf;\n      }" ({ "{") (expression_statement "DAT_001686f0 = DAT_001686f0 + 1;" (assignment_expression "DAT_001686f0 = DAT_001686f0 + 1" (identifier "DAT_001686f0") (= "=") (binary_expression "DAT_001686f0 + 1" (identifier "DAT_001686f0") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "DAT_001686e8 = DAT_001686e8 + 2;" (assignment_expression "DAT_001686e8 = DAT_001686e8 + 2" (identifier "DAT_001686e8") (= "=") (binary_expression "DAT_001686e8 + 2" (identifier "DAT_001686e8") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "iVar6 = DAT_001686f4 + -0xf;" (assignment_expression "iVar6 = DAT_001686f4 + -0xf" (identifier "iVar6") (= "=") (binary_expression "DAT_001686f4 + -0xf" (identifier "DAT_001686f4") (+ "+") (number_literal "-0xf"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "DAT_001686f4 = iVar6;" (assignment_expression "DAT_001686f4 = iVar6" (identifier "DAT_001686f4") (= "=") (identifier "iVar6")) (; ";")) (expression_statement "iVar5 = (int)uVar7;" (assignment_expression "iVar5 = (int)uVar7" (identifier "iVar5") (= "=") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "iVar14 = param_2 * 0x10;" (assignment_expression "iVar14 = param_2 * 0x10" (identifier "iVar14") (= "=") (binary_expression "param_2 * 0x10" (identifier "param_2") (* "*") (number_literal "0x10"))) (; ";")) (expression_statement "iVar6 = iVar5 - (int)param_3;" (assignment_expression "iVar6 = iVar5 - (int)param_3" (identifier "iVar6") (= "=") (binary_expression "iVar5 - (int)param_3" (identifier "iVar5") (- "-") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")))) (; ";")) (if_statement "if ((long)-iVar5 < 0x10 - param_3) {\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }\n    else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" (if "if") (parenthesized_expression "((long)-iVar5 < 0x10 - param_3)" (( "(") (binary_expression "(long)-iVar5 < 0x10 - param_3" (cast_expression "(long)-iVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (unary_expression "-iVar5" (- "-") (identifier "iVar5"))) (< "<") (binary_expression "0x10 - param_3" (number_literal "0x10") (- "-") (identifier "param_3"))) () ")")) (compound_statement "{\n      if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }\n    }" ({ "{") (if_statement "if ((param_2 == 5) && (param_3 == 0xf)) {\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }\n      else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" (if "if") (parenthesized_expression "((param_2 == 5) && (param_3 == 0xf))" (( "(") (binary_expression "(param_2 == 5) && (param_3 == 0xf)" (parenthesized_expression "(param_2 == 5)" (( "(") (binary_expression "param_2 == 5" (identifier "param_2") (== "==") (number_literal "5")) () ")")) (&& "&&") (parenthesized_expression "(param_3 == 0xf)" (( "(") (binary_expression "param_3 == 0xf" (identifier "param_3") (== "==") (number_literal "0xf")) () ")"))) () ")")) (compound_statement "{\n        *param_1 = uVar4;\n        uVar4 = FUN_0013ee40(iVar5 + 0x10);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar4;\n      }" ({ "{") (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = FUN_0013ee40(iVar5 + 0x10);" (assignment_expression "uVar4 = FUN_0013ee40(iVar5 + 0x10)" (identifier "uVar4") (= "=") (call_expression "FUN_0013ee40(iVar5 + 0x10)" (identifier "FUN_0013ee40") (argument_list "(iVar5 + 0x10)" (( "(") (binary_expression "iVar5 + 0x10" (identifier "iVar5") (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" (identifier "puVar9") (= "=") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "param_1[1] = uVar4;" (assignment_expression "param_1[1] = uVar4" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (} "}")) (else_clause "else {\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" (else "else") (compound_statement "{\n        uVar3 = FUN_0013ee40(iVar6 + 0xf);\n        puVar9 = param_1 + 1;\n        *param_1 = uVar4 | uVar3;\n      }" ({ "{") (expression_statement "uVar3 = FUN_0013ee40(iVar6 + 0xf);" (assignment_expression "uVar3 = FUN_0013ee40(iVar6 + 0xf)" (identifier "uVar3") (= "=") (call_expression "FUN_0013ee40(iVar6 + 0xf)" (identifier "FUN_0013ee40") (argument_list "(iVar6 + 0xf)" (( "(") (binary_expression "iVar6 + 0xf" (identifier "iVar6") (+ "+") (number_literal "0xf")) () ")")))) (; ";")) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" (identifier "puVar9") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_1 = uVar4 | uVar3;" (assignment_expression "*param_1 = uVar4 | uVar3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "uVar4 | uVar3" (identifier "uVar4") (| "|") (identifier "uVar3"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" (else "else") (compound_statement "{\n      *param_1 = uVar4;\n      iVar5 = ((int)param_3 + -0xf) - iVar5;\n      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;\n      puVar8 = param_1 + 1;\n      if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }\n      puVar9 = puVar8;\n      if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }\n    }" ({ "{") (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "iVar5 = ((int)param_3 + -0xf) - iVar5;" (assignment_expression "iVar5 = ((int)param_3 + -0xf) - iVar5" (identifier "iVar5") (= "=") (binary_expression "((int)param_3 + -0xf) - iVar5" (parenthesized_expression "((int)param_3 + -0xf)" (( "(") (binary_expression "(int)param_3 + -0xf" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (+ "+") (number_literal "-0xf")) () ")")) (- "-") (identifier "iVar5"))) (; ";")) (if_statement "if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;" (if "if") (parenthesized_expression "((long)iVar14 <= iVar5 + param_3)" (( "(") (binary_expression "(long)iVar14 <= iVar5 + param_3" (cast_expression "(long)iVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar14")) (<= "<=") (binary_expression "iVar5 + param_3" (identifier "iVar5") (+ "+") (identifier "param_3"))) () ")")) (goto_statement "goto LAB_0013f190;" (goto "goto") (statement_identifier "LAB_0013f190") (; ";"))) (expression_statement "puVar8 = param_1 + 1;" (assignment_expression "puVar8 = param_1 + 1" (identifier "puVar8") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (0xf < iVar5) {\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" (if "if") (parenthesized_expression "(0xf < iVar5)" (( "(") (binary_expression "0xf < iVar5" (number_literal "0xf") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n        uVar11 = iVar5 - 0x10U >> 4;\n        do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);\n        puVar8 = param_1 + (ulong)uVar11 + 2;\n        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;\n      }" ({ "{") (expression_statement "uVar11 = iVar5 - 0x10U >> 4;" (assignment_expression "uVar11 = iVar5 - 0x10U >> 4" (identifier "uVar11") (= "=") (binary_expression "iVar5 - 0x10U >> 4" (binary_expression "iVar5 - 0x10U" (identifier "iVar5") (- "-") (number_literal "0x10U")) (>> ">>") (number_literal "4"))) (; ";")) (do_statement "do {\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        } while (param_1 + (ulong)uVar11 + 2 != puVar9);" (do "do") (compound_statement "{\n          puVar9 = puVar8 + 1;\n          *puVar8 = 0;\n          puVar8 = puVar9;\n        }" ({ "{") (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" (identifier "puVar9") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 + (ulong)uVar11 + 2 != puVar9)" (( "(") (binary_expression "param_1 + (ulong)uVar11 + 2 != puVar9" (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" (identifier "param_1") (+ "+") (cast_expression "(ulong)uVar11" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar11"))) (+ "+") (number_literal "2")) (!= "!=") (identifier "puVar9")) () ")")) (; ";")) (expression_statement "puVar8 = param_1 + (ulong)uVar11 + 2;" (assignment_expression "puVar8 = param_1 + (ulong)uVar11 + 2" (identifier "puVar8") (= "=") (binary_expression "param_1 + (ulong)uVar11 + 2" (binary_expression "param_1 + (ulong)uVar11" (identifier "param_1") (+ "+") (cast_expression "(ulong)uVar11" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar11"))) (+ "+") (number_literal "2"))) (; ";")) (expression_statement "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;" (assignment_expression "iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10" (identifier "iVar5") (= "=") (binary_expression "(iVar5 - 0x10U) + uVar11 * -0x10" (parenthesized_expression "(iVar5 - 0x10U)" (( "(") (binary_expression "iVar5 - 0x10U" (identifier "iVar5") (- "-") (number_literal "0x10U")) () ")")) (+ "+") (binary_expression "uVar11 * -0x10" (identifier "uVar11") (* "*") (number_literal "-0x10")))) (; ";")) (} "}"))) (expression_statement "puVar9 = puVar8;" (assignment_expression "puVar9 = puVar8" (identifier "puVar9") (= "=") (identifier "puVar8")) (; ";")) (if_statement "if (iVar5 != 0) {\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        puVar9 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10 - iVar5);\n        *puVar8 = uVar4;\n      }" ({ "{") (expression_statement "puVar9 = puVar8 + 1;" (assignment_expression "puVar9 = puVar8 + 1" (identifier "puVar9") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = FUN_0013ee40(0x10 - iVar5);" (assignment_expression "uVar4 = FUN_0013ee40(0x10 - iVar5)" (identifier "uVar4") (= "=") (call_expression "FUN_0013ee40(0x10 - iVar5)" (identifier "FUN_0013ee40") (argument_list "(0x10 - iVar5)" (( "(") (binary_expression "0x10 - iVar5" (number_literal "0x10") (- "-") (identifier "iVar5")) () ")")))) (; ";")) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar4")) (; ";")) (} "}"))) (} "}")))) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (if_statement "if (puVar9 < puVar13) {\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" (if "if") (parenthesized_expression "(puVar9 < puVar13)" (( "(") (binary_expression "puVar9 < puVar13" (identifier "puVar9") (< "<") (identifier "puVar13")) () ")")) (compound_statement "{\n      do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);\n      puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n    }" ({ "{") (do_statement "do {\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      } while (puVar10 < puVar13);" (do "do") (compound_statement "{\n        puVar10 = puVar8 + 1;\n        uVar4 = FUN_0013ee40(0x10);\n        *puVar8 = uVar4;\n        puVar8 = puVar10;\n      }" ({ "{") (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = FUN_0013ee40(0x10);" (assignment_expression "uVar4 = FUN_0013ee40(0x10)" (identifier "uVar4") (= "=") (call_expression "FUN_0013ee40(0x10)" (identifier "FUN_0013ee40") (argument_list "(0x10)" (( "(") (number_literal "0x10") () ")")))) (; ";")) (expression_statement "*puVar8 = uVar4;" (assignment_expression "*puVar8 = uVar4" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" (identifier "puVar8") (= "=") (identifier "puVar10")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar10 < puVar13)" (( "(") (binary_expression "puVar10 < puVar13" (identifier "puVar10") (< "<") (identifier "puVar13")) () ")")) (; ";")) (expression_statement "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (identifier "puVar9") (= "=") (cast_expression "(ushort *)\n               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (( "(") (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (( "(") (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar13")) (+ "+") (parenthesized_expression "(-1 - (long)puVar9)" (( "(") (binary_expression "-1 - (long)puVar9" (number_literal "-1") (- "-") (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9"))) () ")"))) (& "&") (number_literal "0xfffffffffffffffeU")) () ")"))) (+ "+") (number_literal "2")) () ")")))) (; ";")) (} "}"))) (expression_statement "iVar5 = FUN_0013ee40(1);" (assignment_expression "iVar5 = FUN_0013ee40(1)" (identifier "iVar5") (= "=") (call_expression "FUN_0013ee40(1)" (identifier "FUN_0013ee40") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar5 != 0) {\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar6 = iVar14 + -1 + iVar6;\n      if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }\n    }" ({ "{") (expression_statement "iVar6 = iVar14 + -1 + iVar6;" (assignment_expression "iVar6 = iVar14 + -1 + iVar6" (identifier "iVar6") (= "=") (binary_expression "iVar14 + -1 + iVar6" (binary_expression "iVar14 + -1" (identifier "iVar14") (+ "+") (number_literal "-1")) (+ "+") (identifier "iVar6"))) (; ";")) (if_statement "if (iVar6 < 0x10) {\n        puVar9[-1] = puVar9[-1] + 1;\n      }\n      else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" (if "if") (parenthesized_expression "(iVar6 < 0x10)" (( "(") (binary_expression "iVar6 < 0x10" (identifier "iVar6") (< "<") (number_literal "0x10")) () ")")) (compound_statement "{\n        puVar9[-1] = puVar9[-1] + 1;\n      }" ({ "{") (expression_statement "puVar9[-1] = puVar9[-1] + 1;" (assignment_expression "puVar9[-1] = puVar9[-1] + 1" (subscript_expression "puVar9[-1]" (identifier "puVar9") ([ "[") (number_literal "-1") (] "]")) (= "=") (binary_expression "puVar9[-1] + 1" (subscript_expression "puVar9[-1]" (identifier "puVar9") ([ "[") (number_literal "-1") (] "]")) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" (else "else") (compound_statement "{\n        puVar8 = puVar9 + -1;\n        if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }\n        do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);\n      }" ({ "{") (expression_statement "puVar8 = puVar9 + -1;" (assignment_expression "puVar8 = puVar9 + -1" (identifier "puVar8") (= "=") (binary_expression "puVar9 + -1" (identifier "puVar9") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar6 == 0x10) {\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }\n        else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" (if "if") (parenthesized_expression "(iVar6 == 0x10)" (( "(") (binary_expression "iVar6 == 0x10" (identifier "iVar6") (== "==") (number_literal "0x10")) () ")")) (compound_statement "{\n          uVar4 = puVar9[-1];\n          iVar5 = 0x10;\nLAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }\n        }" ({ "{") (expression_statement "uVar4 = puVar9[-1];" (assignment_expression "uVar4 = puVar9[-1]" (identifier "uVar4") (= "=") (subscript_expression "puVar9[-1]" (identifier "puVar9") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "iVar5 = 0x10;" (assignment_expression "iVar5 = 0x10" (identifier "iVar5") (= "=") (number_literal "0x10")) (; ";")) (labeled_statement "LAB_0013f30a:\n          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" (statement_identifier "LAB_0013f30a") (: ":") (if_statement "if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)) {\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" (if "if") (parenthesized_expression "((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1))" (( "(") (binary_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&\n             ((long)iVar6 == (iVar14 - param_3) + -1)" (parenthesized_expression "(*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)))" (( "(") (binary_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==\n               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (* "*") (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" (( "(") (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" (& "&") (identifier "DAT_0014a840")) (+ "+") (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar5")) (* "*") (number_literal "8"))) () ")")))) (== "==") (parenthesized_expression "((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))" (( "(") (binary_expression "(ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (cast_expression "(ulong)uVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar4")) (& "&") (pointer_expression "*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (* "*") (cast_expression "(ulong *)(&DAT_0014a840 + (long)iVar5 * 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_0014a840 + (long)iVar5 * 8)" (( "(") (binary_expression "&DAT_0014a840 + (long)iVar5 * 8" (pointer_expression "&DAT_0014a840" (& "&") (identifier "DAT_0014a840")) (+ "+") (binary_expression "(long)iVar5 * 8" (cast_expression "(long)iVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar5")) (* "*") (number_literal "8"))) () ")"))))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((long)iVar6 == (iVar14 - param_3) + -1)" (( "(") (binary_expression "(long)iVar6 == (iVar14 - param_3) + -1" (cast_expression "(long)iVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar6")) (== "==") (binary_expression "(iVar14 - param_3) + -1" (parenthesized_expression "(iVar14 - param_3)" (( "(") (binary_expression "iVar14 - param_3" (identifier "iVar14") (- "-") (identifier "param_3")) () ")")) (+ "+") (number_literal "-1"))) () ")"))) () ")")) (compound_statement "{\n            uVar4 = 0;\n            if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }\n            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));\n            while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }\n            return 0;\n          }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (if_statement "if (DAT_0015f480 != '+') {\n              uVar4 = 0x8000;\n            }" (if "if") (parenthesized_expression "(DAT_0015f480 != '+')" (( "(") (binary_expression "DAT_0015f480 != '+'" (identifier "DAT_0015f480") (!= "!=") (char_literal "'+'" (' "'") (character "+") (' "'"))) () ")")) (compound_statement "{\n              uVar4 = 0x8000;\n            }" ({ "{") (expression_statement "uVar4 = 0x8000;" (assignment_expression "uVar4 = 0x8000" (identifier "uVar4") (= "=") (number_literal "0x8000")) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));" (assignment_expression "*param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f))" (identifier "uVar4") (| "|") (call_expression "(ushort)(1 << (0xfU - cVar2 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(1 << (0xfU - cVar2 & 0x1f))" (( "(") (binary_expression "1 << (0xfU - cVar2 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(0xfU - cVar2 & 0x1f)" (( "(") (binary_expression "0xfU - cVar2 & 0x1f" (binary_expression "0xfU - cVar2" (number_literal "0xfU") (- "-") (identifier "cVar2")) (& "&") (number_literal "0x1f")) () ")"))) () ")"))))) (; ";")) (while_statement "while (param_1 = param_1 + 1, param_1 < puVar13) {\n              *param_1 = 0;\n            }" (while "while") (parenthesized_expression "(param_1 = param_1 + 1, param_1 < puVar13)" (( "(") (comma_expression "param_1 = param_1 + 1, param_1 < puVar13" (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (, ",") (binary_expression "param_1 < puVar13" (identifier "param_1") (< "<") (identifier "puVar13"))) () ")")) (compound_statement "{\n              *param_1 = 0;\n            }" ({ "{") (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))) (} "}")) (else_clause "else if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" (else "else") (if_statement "if (puVar9[-1] == 0xffff) {\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" (if "if") (parenthesized_expression "(puVar9[-1] == 0xffff)" (( "(") (binary_expression "puVar9[-1] == 0xffff" (subscript_expression "puVar9[-1]" (identifier "puVar9") ([ "[") (number_literal "-1") (] "]")) (== "==") (number_literal "0xffff")) () ")")) (compound_statement "{\n          puVar9 = puVar9 + -2;\n          iVar5 = iVar6;\n          do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);\n        }" ({ "{") (expression_statement "puVar9 = puVar9 + -2;" (assignment_expression "puVar9 = puVar9 + -2" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -2" (identifier "puVar9") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "iVar5 = iVar6;" (assignment_expression "iVar5 = iVar6" (identifier "iVar5") (= "=") (identifier "iVar6")) (; ";")) (do_statement "do {\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          } while (uVar4 == 0xffff);" (do "do") (compound_statement "{\n            iVar5 = iVar5 + -0x10;\n            uVar4 = *puVar9;\n            if (iVar5 < 0x11) goto LAB_0013f30a;\n            puVar9 = puVar9 + -1;\n          }" ({ "{") (expression_statement "iVar5 = iVar5 + -0x10;" (assignment_expression "iVar5 = iVar5 + -0x10" (identifier "iVar5") (= "=") (binary_expression "iVar5 + -0x10" (identifier "iVar5") (+ "+") (number_literal "-0x10"))) (; ";")) (expression_statement "uVar4 = *puVar9;" (assignment_expression "uVar4 = *puVar9" (identifier "uVar4") (= "=") (pointer_expression "*puVar9" (* "*") (identifier "puVar9"))) (; ";")) (if_statement "if (iVar5 < 0x11) goto LAB_0013f30a;" (if "if") (parenthesized_expression "(iVar5 < 0x11)" (( "(") (binary_expression "iVar5 < 0x11" (identifier "iVar5") (< "<") (number_literal "0x11")) () ")")) (goto_statement "goto LAB_0013f30a;" (goto "goto") (statement_identifier "LAB_0013f30a") (; ";"))) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -1" (identifier "puVar9") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar4 == 0xffff)" (( "(") (binary_expression "uVar4 == 0xffff" (identifier "uVar4") (== "==") (number_literal "0xffff")) () ")")) (; ";")) (} "}"))))) (do_statement "do {\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        } while ((ulong)uVar4 + 1 >> 0x10 != 0);" (do "do") (compound_statement "{\n          if (puVar8 < param_1) {\n            return 0;\n          }\n          uVar4 = *puVar8;\n          *puVar8 = uVar4 + 1;\n          puVar8 = puVar8 + -1;\n        }" ({ "{") (if_statement "if (puVar8 < param_1) {\n            return 0;\n          }" (if "if") (parenthesized_expression "(puVar8 < param_1)" (( "(") (binary_expression "puVar8 < param_1" (identifier "puVar8") (< "<") (identifier "param_1")) () ")")) (compound_statement "{\n            return 0;\n          }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar4 = *puVar8;" (assignment_expression "uVar4 = *puVar8" (identifier "uVar4") (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (expression_statement "*puVar8 = uVar4 + 1;" (assignment_expression "*puVar8 = uVar4 + 1" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + -1" (identifier "puVar8") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((ulong)uVar4 + 1 >> 0x10 != 0)" (( "(") (binary_expression "(ulong)uVar4 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar4 + 1 >> 0x10" (binary_expression "(ulong)uVar4 + 1" (cast_expression "(ulong)uVar4" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar4")) (+ "+") (number_literal "1")) (>> ">>") (number_literal "0x10")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")))) (} "}"))) (} "}")) (else_clause "else {\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" (else "else") (compound_statement "{\n    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }\nLAB_0013f190:\n    FUN_0013eed0(param_1);\n  }" ({ "{") (if_statement "if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" (if "if") (parenthesized_expression "(uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8))" (( "(") (binary_expression "uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)" (identifier "uVar7") (< "<") (pointer_expression "*(ulong *)(&DAT_0014a840 + param_3 * 8)" (* "*") (cast_expression "(ulong *)(&DAT_0014a840 + param_3 * 8)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_0014a840 + param_3 * 8)" (( "(") (binary_expression "&DAT_0014a840 + param_3 * 8" (pointer_expression "&DAT_0014a840" (& "&") (identifier "DAT_0014a840")) (+ "+") (binary_expression "param_3 * 8" (identifier "param_3") (* "*") (number_literal "8"))) () ")"))))) () ")")) (compound_statement "{\n      uVar3 = FUN_0013ee40();\n      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));\n      puVar9 = param_1 + 1;\n      *param_1 = uVar4;\n      bVar1 = param_3 == 0xf && param_2 == 5;\n      if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }\n      puVar8 = puVar9;\n      if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }\n      iVar6 = FUN_0013ee40(1);\n      if (iVar6 == 0) {\n        return 0;\n      }\n      puVar9 = puVar9 + -1;\n      do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);\n      if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }\n      if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }\n      *param_1 = *param_1 & 0x7fff;\n      return 0;\n    }" ({ "{") (expression_statement "uVar3 = FUN_0013ee40();" (assignment_expression "uVar3 = FUN_0013ee40()" (identifier "uVar3") (= "=") (call_expression "FUN_0013ee40()" (identifier "FUN_0013ee40") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));" (assignment_expression "uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (identifier "uVar4") (= "=") (binary_expression "uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (binary_expression "uVar3 | uVar4" (identifier "uVar3") (| "|") (identifier "uVar4")) (| "|") (call_expression "(ushort)(uVar7 << (0xfU - cVar2 & 0x3f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(uVar7 << (0xfU - cVar2 & 0x3f))" (( "(") (binary_expression "uVar7 << (0xfU - cVar2 & 0x3f)" (identifier "uVar7") (<< "<<") (parenthesized_expression "(0xfU - cVar2 & 0x3f)" (( "(") (binary_expression "0xfU - cVar2 & 0x3f" (binary_expression "0xfU - cVar2" (number_literal "0xfU") (- "-") (identifier "cVar2")) (& "&") (number_literal "0x3f")) () ")"))) () ")"))))) (; ";")) (expression_statement "puVar9 = param_1 + 1;" (assignment_expression "puVar9 = param_1 + 1" (identifier "puVar9") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_1 = uVar4;" (assignment_expression "*param_1 = uVar4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "bVar1 = param_3 == 0xf && param_2 == 5;" (assignment_expression "bVar1 = param_3 == 0xf && param_2 == 5" (identifier "bVar1") (= "=") (binary_expression "param_3 == 0xf && param_2 == 5" (binary_expression "param_3 == 0xf" (identifier "param_3") (== "==") (number_literal "0xf")) (&& "&&") (binary_expression "param_2 == 5" (identifier "param_2") (== "==") (number_literal "5")))) (; ";")) (if_statement "if (bVar1) {\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" (if "if") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (compound_statement "{\n        uVar3 = FUN_0013ee40(0xf);\n        puVar9 = param_1 + 2;\n        param_1[1] = uVar3 | 0x8000;\n      }" ({ "{") (expression_statement "uVar3 = FUN_0013ee40(0xf);" (assignment_expression "uVar3 = FUN_0013ee40(0xf)" (identifier "uVar3") (= "=") (call_expression "FUN_0013ee40(0xf)" (identifier "FUN_0013ee40") (argument_list "(0xf)" (( "(") (number_literal "0xf") () ")")))) (; ";")) (expression_statement "puVar9 = param_1 + 2;" (assignment_expression "puVar9 = param_1 + 2" (identifier "puVar9") (= "=") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "param_1[1] = uVar3 | 0x8000;" (assignment_expression "param_1[1] = uVar3 | 0x8000" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "uVar3 | 0x8000" (identifier "uVar3") (| "|") (number_literal "0x8000"))) (; ";")) (} "}"))) (expression_statement "puVar8 = puVar9;" (assignment_expression "puVar8 = puVar9" (identifier "puVar8") (= "=") (identifier "puVar9")) (; ";")) (if_statement "if (puVar9 < puVar13) {\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" (if "if") (parenthesized_expression "(puVar9 < puVar13)" (( "(") (binary_expression "puVar9 < puVar13" (identifier "puVar9") (< "<") (identifier "puVar13")) () ")")) (compound_statement "{\n        do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);\n        puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);\n      }" ({ "{") (do_statement "do {\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        } while (puVar10 < puVar13);" (do "do") (compound_statement "{\n          puVar10 = puVar8 + 1;\n          uVar3 = FUN_0013ee40(0x10);\n          *puVar8 = uVar3;\n          puVar8 = puVar10;\n        }" ({ "{") (expression_statement "puVar10 = puVar8 + 1;" (assignment_expression "puVar10 = puVar8 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar3 = FUN_0013ee40(0x10);" (assignment_expression "uVar3 = FUN_0013ee40(0x10)" (identifier "uVar3") (= "=") (call_expression "FUN_0013ee40(0x10)" (identifier "FUN_0013ee40") (argument_list "(0x10)" (( "(") (number_literal "0x10") () ")")))) (; ";")) (expression_statement "*puVar8 = uVar3;" (assignment_expression "*puVar8 = uVar3" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "puVar8 = puVar10;" (assignment_expression "puVar8 = puVar10" (identifier "puVar8") (= "=") (identifier "puVar10")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar10 < puVar13)" (( "(") (binary_expression "puVar10 < puVar13" (identifier "puVar10") (< "<") (identifier "puVar13")) () ")")) (; ";")) (expression_statement "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);" (assignment_expression "puVar9 = (ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (identifier "puVar9") (= "=") (cast_expression "(ushort *)\n                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2)" (( "(") (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2" (binary_expression "(long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9")) (+ "+") (parenthesized_expression "((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU)" (( "(") (binary_expression "(long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU" (binary_expression "(long)puVar13 + (-1 - (long)puVar9)" (cast_expression "(long)puVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar13")) (+ "+") (parenthesized_expression "(-1 - (long)puVar9)" (( "(") (binary_expression "-1 - (long)puVar9" (number_literal "-1") (- "-") (cast_expression "(long)puVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar9"))) () ")"))) (& "&") (number_literal "0xfffffffffffffffeU")) () ")"))) (+ "+") (number_literal "2")) () ")")))) (; ";")) (} "}"))) (expression_statement "iVar6 = FUN_0013ee40(1);" (assignment_expression "iVar6 = FUN_0013ee40(1)" (identifier "iVar6") (= "=") (call_expression "FUN_0013ee40(1)" (identifier "FUN_0013ee40") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -1" (identifier "puVar9") (+ "+") (number_literal "-1"))) (; ";")) (do_statement "do {\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      } while ((ulong)uVar3 + 1 >> 0x10 != 0);" (do "do") (compound_statement "{\n        uVar3 = *puVar9;\n        *puVar9 = uVar3 + 1;\n        if (param_1 == puVar9) goto LAB_0013f0ef;\n        puVar9 = puVar9 + -1;\n      }" ({ "{") (expression_statement "uVar3 = *puVar9;" (assignment_expression "uVar3 = *puVar9" (identifier "uVar3") (= "=") (pointer_expression "*puVar9" (* "*") (identifier "puVar9"))) (; ";")) (expression_statement "*puVar9 = uVar3 + 1;" (assignment_expression "*puVar9 = uVar3 + 1" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_1 == puVar9) goto LAB_0013f0ef;" (if "if") (parenthesized_expression "(param_1 == puVar9)" (( "(") (binary_expression "param_1 == puVar9" (identifier "param_1") (== "==") (identifier "puVar9")) () ")")) (goto_statement "goto LAB_0013f0ef;" (goto "goto") (statement_identifier "LAB_0013f0ef") (; ";"))) (expression_statement "puVar9 = puVar9 + -1;" (assignment_expression "puVar9 = puVar9 + -1" (identifier "puVar9") (= "=") (binary_expression "puVar9 + -1" (identifier "puVar9") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((ulong)uVar3 + 1 >> 0x10 != 0)" (( "(") (binary_expression "(ulong)uVar3 + 1 >> 0x10 != 0" (binary_expression "(ulong)uVar3 + 1 >> 0x10" (binary_expression "(ulong)uVar3 + 1" (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3")) (+ "+") (number_literal "1")) (>> ">>") (number_literal "0x10")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (if_statement "if (param_1 == puVar9) {\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" (if "if") (parenthesized_expression "(param_1 == puVar9)" (( "(") (binary_expression "param_1 == puVar9" (identifier "param_1") (== "==") (identifier "puVar9")) () ")")) (compound_statement "{\nLAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }\n      }" ({ "{") (labeled_statement "LAB_0013f0ef:\n        if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" (statement_identifier "LAB_0013f0ef") (: ":") (if_statement "if (bVar1) {\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" (if "if") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")")) (compound_statement "{\n          puVar9[1] = puVar9[1] | 0x8000;\n        }" ({ "{") (expression_statement "puVar9[1] = puVar9[1] | 0x8000;" (assignment_expression "puVar9[1] = puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "puVar9[1] | 0x8000" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (| "|") (number_literal "0x8000"))) (; ";")) (} "}")))) (} "}"))) (if_statement "if (-1 < (short)(uVar4 ^ *param_1)) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(-1 < (short)(uVar4 ^ *param_1))" (( "(") (binary_expression "-1 < (short)(uVar4 ^ *param_1)" (number_literal "-1") (< "<") (cast_expression "(short)(uVar4 ^ *param_1)" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "(uVar4 ^ *param_1)" (( "(") (binary_expression "uVar4 ^ *param_1" (identifier "uVar4") (^ "^") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) () ")")))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*param_1 = *param_1 & 0x7fff;" (assignment_expression "*param_1 = *param_1 & 0x7fff" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (binary_expression "*param_1 & 0x7fff" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (& "&") (number_literal "0x7fff"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (labeled_statement "LAB_0013f190:\n    FUN_0013eed0(param_1);" (statement_identifier "LAB_0013f190") (: ":") (expression_statement "FUN_0013eed0(param_1);" (call_expression "FUN_0013eed0(param_1)" (identifier "FUN_0013eed0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";"))) (} "}")))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *var_2,int var_4,long var_12)

{
  type_2 var_22;
  bool bVar2;
  type_2 var_13;
  type_1 LVar4;
  int var_7;
  int var_8;
  type_3 var_21;
  type_2 *var_15;
  int var_14;
  type_2 *var_16;
  type_2 *var_19;
  type_4 var_17;
  long var_3;
  type_2 *var_18;
  int var_20;
  
  var_3 = (long)var_4 * 2;
  if (generic_floating_point_number.leader < generic_floating_point_number.low) {
    LVar4 = 0;
    if (generic_floating_point_number.sign != '+') {
      LVar4 = 0x8000;
    }
    *var_2 = LVar4;
    var_1(var_2 + 1,0,var_3 - 2);
    return 0;
  }
  if (generic_floating_point_number.sign == '\0') {
    if (var_4 == 2) {
      var_2[0] = 0x7fff;
      var_2[1] = 0xffff;
      return 0;
    }
    if (var_4 != 5) {
      var_2[0] = 0x7fff;
      var_2[1] = 0xffff;
      var_2[2] = 0xffff;
      var_2[3] = 0xffff;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    var_5("../../gas/config/atof-ieee.c",0x135,"gen_to_words");
  }
  if (generic_floating_point_number.sign == 'P') {
    if (var_4 == 2) {
      var_2[0] = 0x7f80;
      var_2[1] = 0;
      return 0;
    }
    if (var_4 != 5) {
      var_2[0] = 0x7ff0;
      var_2[1] = 0;
      var_2[2] = 0;
      var_2[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    var_5("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");
  }
  if (generic_floating_point_number.sign == 'N') {
    if (var_4 == 2) {
      var_2[0] = 0xff80;
      var_2[1] = 0;
      return 0;
    }
    if (var_4 != 5) {
      var_2[0] = 0xfff0;
      var_2[1] = 0;
      var_2[2] = 0;
      var_2[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    var_5("../../gas/config/atof-ieee.c",0x187,"gen_to_words");
  }
  var_10 = generic_floating_point_number.leader;
  var_8 = 0;
  var_11 = 0x10;
  var_9 =
       (int)((long)generic_floating_point_number.leader +
             (2 - (long)generic_floating_point_number.low) >> 1);
  while (var_7 = var_6(1), var_7 == 0) {
    var_8 = var_8 + 1;
  }
  var_21 = (((long)generic_floating_point_number.leader +
            ((generic_floating_point_number.exponent * 2 + 2) -
            (long)generic_floating_point_number.low) >> 1) * 0x10 - (long)var_8) +
          (long)((1 << ((char)var_12 - 1U & 0x1f)) + -2);
  var_13 = 0;
  if (generic_floating_point_number.sign != '+') {
    var_13 = 0x8000;
  }
  var_18 = (type_2 *)(var_3 + (long)var_2);
  var_8 = (int)var_12;
  if ((long)var_21 < 1) {
    if (var_9 == 0) {
      var_10 = var_10 + 1;
      var_9 = 1;
      var_11 = 1;
      var_7 = var_11;
    }
    else {
      var_7 = var_11 + 1;
      if (0x10 < var_11 + 1) {
        var_9 = var_9 + 1;
        var_10 = var_10 + 1;
        var_7 = var_11 + -0xf;
      }
    }
    var_11 = var_7;
    var_7 = (int)var_21;
    var_20 = var_4 * 0x10;
    if ((long)-var_7 < 0x10 - var_12) {
      if ((var_4 == 5) && (var_12 == 0xf)) {
        *var_2 = var_13;
        var_14 = var_6(var_7 + 0x10);
        var_16 = var_2 + 2;
        var_2[1] = (type_2)var_14;
      }
      else {
        var_14 = var_6((var_7 - var_8) + 0xf);
        var_16 = var_2 + 1;
        *var_2 = var_13 | (type_2)var_14;
      }
    }
    else {
      *var_2 = var_13;
      var_14 = (var_8 + -0xf) - var_7;
      if ((long)var_20 <= var_14 + var_12) goto LAB_0013f190;
      var_15 = var_2 + 1;
      if (0xf < var_14) {
        var_17 = var_14 - 0x10U >> 4;
        do {
          var_16 = var_15 + 1;
          *var_15 = 0;
          var_15 = var_16;
        } while (var_2 + (type_3)var_17 + 2 != var_16);
        var_15 = var_2 + (type_3)var_17 + 2;
        var_14 = (var_14 - 0x10U) + var_17 * -0x10;
      }
      var_16 = var_15;
      if (var_14 != 0) {
        var_16 = var_15 + 1;
        var_14 = var_6(0x10 - var_14);
        *var_15 = (type_2)var_14;
      }
    }
    var_15 = var_16;
    if (var_16 < var_18) {
      do {
        var_19 = var_15 + 1;
        var_14 = var_6(0x10);
        *var_15 = (type_2)var_14;
        var_15 = var_19;
      } while (var_19 < var_18);
      var_16 = (type_2 *)
                ((long)var_16 + ((long)var_18 + (-1 - (long)var_16) & 0xfffffffffffffffeU) + 2);
    }
    var_14 = var_6(1);
    if (var_14 != 0) {
      var_8 = var_20 + -1 + (var_7 - var_8);
      if (var_8 < 0x10) {
        var_16[-1] = var_16[-1] + 1;
      }
      else {
        var_15 = var_16 + -1;
        if (var_8 == 0x10) {
          var_13 = var_16[-1];
          var_7 = 0x10;
LAB_0013f30a:
          if ((mask[var_7] == ((type_3)var_13 & mask[var_7])) &&
             ((long)var_8 == (var_20 - var_12) + -1)) {
            var_13 = 0;
            if (generic_floating_point_number.sign != '+') {
              var_13 = 0x8000;
            }
            *var_2 = var_13 | (type_2)(1 << (0xfU - (char)var_12 & 0x1f));
            while (var_2 = var_2 + 1, var_2 < var_18) {
              *var_2 = 0;
            }
            return 0;
          }
        }
        else if (var_16[-1] == 0xffff) {
          var_16 = var_16 + -2;
          var_7 = var_8;
          do {
            var_7 = var_7 + -0x10;
            var_13 = *var_16;
            if (var_7 < 0x11) goto LAB_0013f30a;
            var_16 = var_16 + -1;
          } while (var_13 == 0xffff);
        }
        do {
          if (var_15 < var_2) {
            return 0;
          }
          var_13 = *var_15;
          *var_15 = var_13 + 1;
          var_15 = var_15 + -1;
        } while ((type_3)var_13 + 1 >> 0x10 != 0);
      }
    }
  }
  else {
    if (var_21 < mask[var_12]) {
      var_7 = var_6(0xf - var_8);
      var_13 = (type_2)var_7 | var_13 | (type_2)(var_21 << ((byte)(0xf - var_8) & 0x3f));
      var_16 = var_2 + 1;
      *var_2 = var_13;
      bVar2 = var_12 == 0xf && var_4 == 5;
      if (bVar2) {
        var_8 = var_6(0xf);
        var_16 = var_2 + 2;
        var_2[1] = (type_2)var_8 | 0x8000;
      }
      var_15 = var_16;
      if (var_16 < var_18) {
        do {
          var_19 = var_15 + 1;
          var_8 = var_6(0x10);
          *var_15 = (type_2)var_8;
          var_15 = var_19;
        } while (var_19 < var_18);
        var_16 = (type_2 *)
                  ((long)var_16 + ((long)var_18 + (-1 - (long)var_16) & 0xfffffffffffffffeU) + 2)
        ;
      }
      var_8 = var_6(1);
      if (var_8 == 0) {
        return 0;
      }
      var_16 = var_16 + -1;
      do {
        var_22 = *var_16;
        *var_16 = var_22 + 1;
        if (var_2 == var_16) goto LAB_0013f0ef;
        var_16 = var_16 + -1;
      } while ((type_3)var_22 + 1 >> 0x10 != 0);
      if (var_2 == var_16) {
LAB_0013f0ef:
        if (bVar2) {
          var_16[1] = var_16[1] | 0x8000;
        }
      }
      if (-1 < (short)(var_13 ^ *var_2)) {
        return 0;
      }
      *var_2 = *var_2 & 0x7fff;
      return 0;
    }
LAB_0013f190:
    var_23(var_2);
  }
  return 0;
}


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

undefined8 MASKED(ushort *param_1,int param_2,long param_3)

{
  bool bVar1;
  char cVar2;
  ushort uVar3;
  ushort uVar4;
  int iVar5;
  int iVar6;
  ulong uVar7;
  ushort *puVar8;
  ushort *puVar9;
  ushort *puVar10;
  uint uVar11;
  long lVar12;
  ushort *puVar13;
  int iVar14;
  
  lVar12 = (long)param_2 * 2;
  if (DAT_0015f470 < PTR_DAT_0015f460) {
    uVar4 = 0;
    if (DAT_0015f480 != '+') {
      uVar4 = 0x8000;
    }
    *param_1 = uVar4;
    memset(param_1 + 1,0,lVar12 - 2);
    return 0;
  }
  if (DAT_0015f480 == '\0') {
    if (param_2 == 2) {
      param_1[0] = 0x7fff;
      param_1[1] = 0xffff;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0x7fff;
      param_1[1] = 0xffff;
      param_1[2] = 0xffff;
      param_1[3] = 0xffff;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x135,"gen_to_words");
  }
  if (DAT_0015f480 == 'P') {
    if (param_2 == 2) {
      param_1[0] = 0x7f80;
      param_1[1] = 0;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0x7ff0;
      param_1[1] = 0;
      param_1[2] = 0;
      param_1[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x15e,"gen_to_words");
  }
  if (DAT_0015f480 == 'N') {
    if (param_2 == 2) {
      param_1[0] = 0xff80;
      param_1[1] = 0;
      return 0;
    }
    if (param_2 != 5) {
      param_1[0] = 0xfff0;
      param_1[1] = 0;
      param_1[2] = 0;
      param_1[3] = 0;
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    FUN_0011e990("../../gas/config/atof-ieee.c",0x187,"gen_to_words");
  }
  DAT_001686e8 = DAT_0015f470;
  iVar6 = 0;
  DAT_001686f4 = 0x10;
  DAT_001686f0 = (int)((long)(DAT_0015f470 + (2 - (long)PTR_DAT_0015f460)) >> 1);
  while (iVar5 = FUN_0013ee40(1), iVar5 == 0) {
    iVar6 = iVar6 + 1;
  }
  cVar2 = (char)param_3;
  uVar7 = (((long)(DAT_0015f470 + ((DAT_0015f478 * 2 + 2) - (long)PTR_DAT_0015f460)) >> 1) * 0x10 -
          (long)iVar6) + (long)((1 << (cVar2 - 1U & 0x1f)) + -2);
  uVar4 = 0;
  if (DAT_0015f480 != '+') {
    uVar4 = 0x8000;
  }
  puVar13 = (ushort *)(lVar12 + (long)param_1);
  if ((long)uVar7 < 1) {
    if (DAT_001686f0 == 0) {
      DAT_001686e8 = DAT_001686e8 + 2;
      DAT_001686f0 = 1;
      DAT_001686f4 = 1;
      iVar6 = DAT_001686f4;
    }
    else {
      iVar6 = DAT_001686f4 + 1;
      if (0x10 < DAT_001686f4 + 1) {
        DAT_001686f0 = DAT_001686f0 + 1;
        DAT_001686e8 = DAT_001686e8 + 2;
        iVar6 = DAT_001686f4 + -0xf;
      }
    }
    DAT_001686f4 = iVar6;
    iVar5 = (int)uVar7;
    iVar14 = param_2 * 0x10;
    iVar6 = iVar5 - (int)param_3;
    if ((long)-iVar5 < 0x10 - param_3) {
      if ((param_2 == 5) && (param_3 == 0xf)) {
        *param_1 = uVar4;
        uVar4 = FUN_0013ee40(iVar5 + 0x10);
        puVar9 = param_1 + 2;
        param_1[1] = uVar4;
      }
      else {
        uVar3 = FUN_0013ee40(iVar6 + 0xf);
        puVar9 = param_1 + 1;
        *param_1 = uVar4 | uVar3;
      }
    }
    else {
      *param_1 = uVar4;
      iVar5 = ((int)param_3 + -0xf) - iVar5;
      if ((long)iVar14 <= iVar5 + param_3) goto LAB_0013f190;
      puVar8 = param_1 + 1;
      if (0xf < iVar5) {
        uVar11 = iVar5 - 0x10U >> 4;
        do {
          puVar9 = puVar8 + 1;
          *puVar8 = 0;
          puVar8 = puVar9;
        } while (param_1 + (ulong)uVar11 + 2 != puVar9);
        puVar8 = param_1 + (ulong)uVar11 + 2;
        iVar5 = (iVar5 - 0x10U) + uVar11 * -0x10;
      }
      puVar9 = puVar8;
      if (iVar5 != 0) {
        puVar9 = puVar8 + 1;
        uVar4 = FUN_0013ee40(0x10 - iVar5);
        *puVar8 = uVar4;
      }
    }
    puVar8 = puVar9;
    if (puVar9 < puVar13) {
      do {
        puVar10 = puVar8 + 1;
        uVar4 = FUN_0013ee40(0x10);
        *puVar8 = uVar4;
        puVar8 = puVar10;
      } while (puVar10 < puVar13);
      puVar9 = (ushort *)
               ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);
    }
    iVar5 = FUN_0013ee40(1);
    if (iVar5 != 0) {
      iVar6 = iVar14 + -1 + iVar6;
      if (iVar6 < 0x10) {
        puVar9[-1] = puVar9[-1] + 1;
      }
      else {
        puVar8 = puVar9 + -1;
        if (iVar6 == 0x10) {
          uVar4 = puVar9[-1];
          iVar5 = 0x10;
LAB_0013f30a:
          if ((*(ulong *)(&DAT_0014a840 + (long)iVar5 * 8) ==
               ((ulong)uVar4 & *(ulong *)(&DAT_0014a840 + (long)iVar5 * 8))) &&
             ((long)iVar6 == (iVar14 - param_3) + -1)) {
            uVar4 = 0;
            if (DAT_0015f480 != '+') {
              uVar4 = 0x8000;
            }
            *param_1 = uVar4 | (ushort)(1 << (0xfU - cVar2 & 0x1f));
            while (param_1 = param_1 + 1, param_1 < puVar13) {
              *param_1 = 0;
            }
            return 0;
          }
        }
        else if (puVar9[-1] == 0xffff) {
          puVar9 = puVar9 + -2;
          iVar5 = iVar6;
          do {
            iVar5 = iVar5 + -0x10;
            uVar4 = *puVar9;
            if (iVar5 < 0x11) goto LAB_0013f30a;
            puVar9 = puVar9 + -1;
          } while (uVar4 == 0xffff);
        }
        do {
          if (puVar8 < param_1) {
            return 0;
          }
          uVar4 = *puVar8;
          *puVar8 = uVar4 + 1;
          puVar8 = puVar8 + -1;
        } while ((ulong)uVar4 + 1 >> 0x10 != 0);
      }
    }
  }
  else {
    if (uVar7 < *(ulong *)(&DAT_0014a840 + param_3 * 8)) {
      uVar3 = FUN_0013ee40();
      uVar4 = uVar3 | uVar4 | (ushort)(uVar7 << (0xfU - cVar2 & 0x3f));
      puVar9 = param_1 + 1;
      *param_1 = uVar4;
      bVar1 = param_3 == 0xf && param_2 == 5;
      if (bVar1) {
        uVar3 = FUN_0013ee40(0xf);
        puVar9 = param_1 + 2;
        param_1[1] = uVar3 | 0x8000;
      }
      puVar8 = puVar9;
      if (puVar9 < puVar13) {
        do {
          puVar10 = puVar8 + 1;
          uVar3 = FUN_0013ee40(0x10);
          *puVar8 = uVar3;
          puVar8 = puVar10;
        } while (puVar10 < puVar13);
        puVar9 = (ushort *)
                 ((long)puVar9 + ((long)puVar13 + (-1 - (long)puVar9) & 0xfffffffffffffffeU) + 2);
      }
      iVar6 = FUN_0013ee40(1);
      if (iVar6 == 0) {
        return 0;
      }
      puVar9 = puVar9 + -1;
      do {
        uVar3 = *puVar9;
        *puVar9 = uVar3 + 1;
        if (param_1 == puVar9) goto LAB_0013f0ef;
        puVar9 = puVar9 + -1;
      } while ((ulong)uVar3 + 1 >> 0x10 != 0);
      if (param_1 == puVar9) {
LAB_0013f0ef:
        if (bVar1) {
          puVar9[1] = puVar9[1] | 0x8000;
        }
      }
      if (-1 < (short)(uVar4 ^ *param_1)) {
        return 0;
      }
      *param_1 = *param_1 & 0x7fff;
      return 0;
    }
LAB_0013f190:
    FUN_0013eed0(param_1);
  }
  return 0;
}

