
int unicodeNext(sqlite3_tokenizer_cursor *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,
               int *piPos)

{
  byte *pbVar1;
  byte bVar2;
  unicode_tokenizer *p;
  sqlite3_tokenizer *psVar3;
  byte *pbVar4;
  int iVar5;
  uint iCode;
  int iVar6;
  sqlite3_tokenizer *psVar7;
  byte *pbVar8;
  char cVar9;
  uint uVar10;
  int iVar11;
  unicode_cursor *pCsr;
  long lVar12;
  byte *pbVar13;
  sqlite3_tokenizer *psVar14;
  
  p = (unicode_tokenizer *)pC->pTokenizer;
  pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);
  pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)
                   );
  do {
    pbVar4 = pbVar8;
    if (pbVar1 <= pbVar4) {
      return 0x65;
    }
    iCode = (uint)*pbVar4;
    pbVar8 = pbVar4 + 1;
    if (*pbVar4 < 0xc0) {
LAB_0015d452:
      iVar5 = unicodeIsAlnum(p,iCode);
    }
    else {
      iCode = (uint)""[iCode - 0xc0];
      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {
        if (iCode < 0x80) goto LAB_0015d4fa;
        goto LAB_0015d452;
      }
      do {
        pbVar8 = pbVar8 + 1;
        iCode = iCode * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar8) break;
        bVar2 = *pbVar8;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))
      goto LAB_0015d452;
LAB_0015d4fa:
      iCode = 0xfffd;
      iVar5 = unicodeIsAlnum(p,0xfffd);
    }
  } while (iVar5 == 0);
  if (pbVar1 <= pbVar4) {
    return 0x65;
  }
  psVar7 = pC[4].pTokenizer;
  psVar14 = psVar7;
LAB_0015d531:
  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {
    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))
    ;
    if (psVar7 == (sqlite3_tokenizer *)0x0) {
      return 7;
    }
    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;
    psVar3 = pC[4].pTokenizer;
    pC[4].pTokenizer = psVar7;
    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);
  }
  if (0x7f < (int)iCode) {
    if ((int)iCode < 0x10000) {
      uVar10 = 0x3f1;
      lVar12 = -1;
      iVar11 = 0;
      iVar5 = 0xa2;
      iVar6 = 0xa2;
      do {
        iVar6 = iVar6 >> 1;
        if ((int)(iCode - uVar10) < 0) {
          iVar5 = iVar6 + -1;
          if (iVar5 < iVar11) goto LAB_0015d620;
        }
        else {
          iVar11 = iVar6 + 1;
          lVar12 = (long)iVar6;
          if (iVar5 < iVar11) goto LAB_0015d620;
        }
        iVar6 = iVar5 + iVar11;
        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);
      } while( true );
    }
    if (iCode - 0x10400 < 0x28) {
      iCode = iCode + 0x28;
    }
    goto LAB_0015d817;
  }
  if (iCode - 0x41 < 0x1a) {
    iCode = iCode + 0x20;
    goto joined_r0x0015d68b;
  }
  if (iCode != 0) {
    *(char *)&psVar14->pModule = (char)iCode;
    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);
  }
  goto LAB_0015d585;
LAB_0015d620:
  iVar5 = p->eRemoveDiacritic;
  if (((int)iCode <
       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)
            )) &&
     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==
      0)) {
    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode
            & 0xffff;
    if (iVar5 != 0) {
LAB_0015d679:
      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));
    }
joined_r0x0015d68b:
    if (iCode != 0) {
      if (0x7f < (int)iCode) goto LAB_0015d868;
      *(char *)&psVar14->pModule = (char)iCode;
      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);
    }
  }
  else {
    if (iVar5 != 0) goto LAB_0015d679;
LAB_0015d868:
    cVar9 = ((byte)iCode & 0x3f) + 0x80;
    bVar2 = (byte)((int)iCode >> 6);
    if ((int)iCode < 0x800) {
      *(char *)((long)&psVar14->pModule + 1) = cVar9;
      *(byte *)&psVar14->pModule = bVar2 - 0x40;
      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);
    }
    else if ((int)iCode < 0x10000) {
      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;
      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;
      *(char *)((long)&psVar14->pModule + 2) = cVar9;
      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);
    }
    else {
LAB_0015d817:
      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;
      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;
      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;
      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;
      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);
    }
  }
LAB_0015d585:
  iVar5 = (int)pbVar8;
  iVar6 = iVar5;
  if (pbVar1 <= pbVar8) goto LAB_0015d76e;
  iCode = (uint)*pbVar8;
  pbVar13 = pbVar8 + 1;
  if (iCode < 0xc0) {
    iVar6 = unicodeIsAlnum(p,iCode);
joined_r0x0015d5b2:
    pbVar8 = pbVar13;
    if (iVar6 == 0) goto LAB_0015d760;
  }
  else {
    iCode = (uint)""[iCode - 0xc0];
    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {
      if (0x7f < iCode) goto LAB_0015d72b;
    }
    else {
      do {
        pbVar13 = pbVar13 + 1;
        iCode = iCode * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar13) break;
        bVar2 = *pbVar13;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))
      {
LAB_0015d72b:
        iVar6 = unicodeIsAlnum(p,iCode);
        pbVar8 = pbVar13;
        if (iVar6 != 0) goto LAB_0015d5b8;
        if (0x31 < iCode - 0x300) {
LAB_0015d760:
          iVar6 = (int)pbVar13;
LAB_0015d76e:
          psVar7 = pC[4].pTokenizer;
          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;
          *paToken = (char *)psVar7;
          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;
          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;
          *piEnd = iVar5 - (int)pC[1].pTokenizer;
          iVar5 = *(int *)&pC[3].pTokenizer;
          *(int *)&pC[3].pTokenizer = iVar5 + 1;
          *piPos = iVar5;
          return 0;
        }
        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);
        goto joined_r0x0015d5b2;
      }
    }
    iVar6 = unicodeIsAlnum(p,0xfffd);
    if (iVar6 == 0) goto LAB_0015d760;
    iCode = 0xfffd;
    pbVar8 = pbVar13;
  }
LAB_0015d5b8:
  psVar7 = pC[4].pTokenizer;
  goto LAB_0015d531;
}



undefined8
FUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)

{
  byte *pbVar1;
  byte bVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  long lVar9;
  byte *pbVar10;
  char cVar11;
  uint uVar12;
  int iVar13;
  char *pcVar14;
  byte *pbVar15;
  char *pcVar16;
  
  lVar3 = *param_1;
  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);
  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);
  do {
    pbVar5 = pbVar10;
    if (pbVar1 <= pbVar5) {
      return 0x65;
    }
    uVar7 = (uint)*pbVar5;
    pbVar10 = pbVar5 + 1;
    if (*pbVar5 < 0xc0) {
LAB_0015d452:
      iVar6 = FUN_00126290(lVar3,uVar7);
    }
    else {
      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];
      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {
        if (uVar7 < 0x80) goto LAB_0015d4fa;
        goto LAB_0015d452;
      }
      do {
        pbVar10 = pbVar10 + 1;
        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar10) break;
        bVar2 = *pbVar10;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))
      goto LAB_0015d452;
LAB_0015d4fa:
      uVar7 = 0xfffd;
      iVar6 = FUN_00126290(lVar3,0xfffd);
    }
  } while (iVar6 == 0);
  if (pbVar1 <= pbVar5) {
    return 0x65;
  }
  pcVar14 = (char *)param_1[4];
  pcVar16 = pcVar14;
LAB_0015d531:
  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {
    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));
    if (lVar9 == 0) {
      return 7;
    }
    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;
    lVar4 = param_1[4];
    param_1[4] = lVar9;
    pcVar16 = pcVar16 + (lVar9 - lVar4);
  }
  if (0x7f < (int)uVar7) {
    if ((int)uVar7 < 0x10000) {
      uVar12 = 0x3f1;
      lVar9 = -1;
      iVar13 = 0;
      iVar6 = 0xa2;
      iVar8 = 0xa2;
      do {
        iVar8 = iVar8 >> 1;
        if ((int)(uVar7 - uVar12) < 0) {
          iVar6 = iVar8 + -1;
          if (iVar6 < iVar13) goto LAB_0015d620;
        }
        else {
          iVar13 = iVar8 + 1;
          lVar9 = (long)iVar8;
          if (iVar6 < iVar13) goto LAB_0015d620;
        }
        iVar8 = iVar6 + iVar13;
        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);
      } while( true );
    }
    if (uVar7 - 0x10400 < 0x28) {
      uVar7 = uVar7 + 0x28;
    }
    goto LAB_0015d817;
  }
  if (uVar7 - 0x41 < 0x1a) {
    uVar7 = uVar7 + 0x20;
    goto joined_r0x0015d68b;
  }
  if (uVar7 != 0) {
    *pcVar16 = (char)uVar7;
    pcVar16 = pcVar16 + 1;
  }
  goto LAB_0015d585;
LAB_0015d620:
  iVar6 = *(int *)(lVar3 + 8);
  if (((int)uVar7 <
       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))
     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))
         == 0)) {
    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7
            & 0xffff;
    if (iVar6 != 0) {
LAB_0015d679:
      uVar7 = FUN_00114260(uVar7,iVar6 == 2);
    }
joined_r0x0015d68b:
    if (uVar7 != 0) {
      if (0x7f < (int)uVar7) goto LAB_0015d868;
      *pcVar16 = (char)uVar7;
      pcVar16 = pcVar16 + 1;
    }
  }
  else {
    if (iVar6 != 0) goto LAB_0015d679;
LAB_0015d868:
    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;
    bVar2 = (byte)((int)uVar7 >> 6);
    if ((int)uVar7 < 0x800) {
      pcVar16[1] = cVar11;
      *pcVar16 = bVar2 - 0x40;
      pcVar16 = pcVar16 + 2;
    }
    else if ((int)uVar7 < 0x10000) {
      pcVar16[1] = (bVar2 & 0x3f) + 0x80;
      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;
      pcVar16[2] = cVar11;
      pcVar16 = pcVar16 + 3;
    }
    else {
LAB_0015d817:
      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;
      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;
      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;
      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;
      pcVar16 = pcVar16 + 4;
    }
  }
LAB_0015d585:
  iVar6 = (int)pbVar10;
  iVar8 = iVar6;
  if (pbVar1 <= pbVar10) goto LAB_0015d76e;
  uVar7 = (uint)*pbVar10;
  pbVar15 = pbVar10 + 1;
  if (uVar7 < 0xc0) {
    iVar8 = FUN_00126290(lVar3,uVar7);
joined_r0x0015d5b2:
    pbVar10 = pbVar15;
    if (iVar8 == 0) goto LAB_0015d760;
  }
  else {
    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];
    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {
      if (0x7f < uVar7) goto LAB_0015d72b;
    }
    else {
      do {
        pbVar15 = pbVar15 + 1;
        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar15) break;
        bVar2 = *pbVar15;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))
      {
LAB_0015d72b:
        iVar8 = FUN_00126290(lVar3,uVar7);
        pbVar10 = pbVar15;
        if (iVar8 != 0) goto LAB_0015d5b8;
        if (0x31 < uVar7 - 0x300) {
LAB_0015d760:
          iVar8 = (int)pbVar15;
LAB_0015d76e:
          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];
          *param_2 = param_1[4];
          *param_3 = (int)pcVar16 - (int)param_1[4];
          *param_4 = (int)pbVar5 - (int)param_1[1];
          *param_5 = iVar6 - (int)param_1[1];
          lVar3 = param_1[3];
          *(int *)(param_1 + 3) = (int)lVar3 + 1;
          *param_6 = (int)lVar3;
          return 0;
        }
        iVar8 = FUN_001262e0(uVar7);
        goto joined_r0x0015d5b2;
      }
    }
    iVar8 = FUN_00126290(lVar3,0xfffd);
    if (iVar8 == 0) goto LAB_0015d760;
    uVar7 = 0xfffd;
    pbVar10 = pbVar15;
  }
LAB_0015d5b8:
  pcVar14 = (char *)param_1[4];
  goto LAB_0015d531;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x48
MOV R10,qword ptr [RDI + 0x8]
MOVSXD RBP,dword ptr [RDI + 0x14]
MOVSXD RAX,dword ptr [RDI + 0x10]
MOV R13,qword ptr [RDI]
ADD RBP,R10
LEA R14,[R10 + RAX*0x1]
MOV qword ptr [RSP + 0x8],R13
CMP RBP,R14
JNC 0x0015d8a8
MOV qword ptr [RSP + 0x38],R9
LEA R15,[0x1f5520]
MOV R12,RBP
MOV qword ptr [RSP + 0x30],R8
MOV qword ptr [RSP + 0x28],RCX
MOV qword ptr [RSP + 0x20],RDX
MOV qword ptr [RSP + 0x18],RSI
MOV qword ptr [RSP + 0x10],RDI
NOP word ptr [RAX + RAX*0x1]
MOVZX EBX,byte ptr [R12]
LEA RBP,[R12 + 0x1]
CMP EBX,0xbf
JA 0x0015d478
MOV ESI,EBX
MOV RDI,R13
CALL 0x00126290
TEST EAX,EAX
JNZ 0x0015d50a
CMP RBP,R14
JNC 0x0015d8a8
MOV R12,RBP
JMP 0x0015d440
LEA EAX,[RBX + -0xc0]
MOVZX EBX,byte ptr [R15 + RAX*0x1]
CMP R14,RBP
JZ 0x0015d8f0
MOVZX EAX,byte ptr [R12 + 0x1]
MOV EDX,EAX
AND EDX,0xffffffc0
CMP DL,0x80
JZ 0x0015d4b6
JMP 0x0015d8f0
MOVZX EAX,byte ptr [RBP]
MOV EDX,EAX
AND EDX,0xffffffc0
CMP DL,0x80
JNZ 0x0015d4c7
SHL EBX,0x6
AND EAX,0x3f
ADD RBP,0x1
ADD EBX,EAX
CMP R14,RBP
JNZ 0x0015d4a8
CMP EBX,0x7f
JBE 0x0015d4f0
MOV EAX,EBX
AND EAX,0xfffff800
CMP EAX,0xd800
JZ 0x0015d4f0
MOV EAX,EBX
AND EAX,0xfffffffe
CMP EAX,0xfffe
JNZ 0x0015d452
NOP word ptr [RAX + RAX*0x1]
MOV ESI,0xfffd
MOV EBX,0xfffd
MOV RDI,R13
CALL 0x00126290
TEST EAX,EAX
JZ 0x0015d464
MOV R13,RBP
MOV RBP,R12
MOV R12,qword ptr [RSP + 0x10]
CMP R14,RBP
JBE 0x0015d8a8
MOV R15,qword ptr [R12 + 0x20]
MOV qword ptr [RSP + 0x10],RBP
MOV RBP,R12
MOV R12,R13
MOV RDI,R15
MOV ESI,dword ptr [RBP + 0x28]
MOV RDX,R15
SUB RDX,RDI
LEA EAX,[RSI + -0x4]
CDQE
CMP RDX,RAX
JL 0x0015d567
ADD ESI,0x40
MOVSXD RSI,ESI
CALL 0x00138360
TEST RAX,RAX
JZ 0x0015d91b
ADD dword ptr [RBP + 0x28],0x40
SUB R15,qword ptr [RBP + 0x20]
MOV qword ptr [RBP + 0x20],RAX
ADD R15,RAX
MOV EAX,EBX
CMP EBX,0x7f
JG 0x0015d5c8
LEA EDX,[RBX + -0x41]
CMP EDX,0x19
JA 0x0015d890
ADD EAX,0x20
TEST EAX,EAX
JNZ 0x0015d691
CMP R12,R14
JNC 0x0015d908
MOVZX EBX,byte ptr [R12]
LEA R13,[R12 + 0x1]
CMP EBX,0xbf
JA 0x0015d6b0
MOV RDI,qword ptr [RSP + 0x8]
MOV ESI,EBX
CALL 0x00126290
TEST EAX,EAX
JZ 0x0015d760
MOV RDI,qword ptr [RBP + 0x20]
MOV R12,R13
JMP 0x0015d531
CMP EBX,0xffff
JG 0x0015d808
MOV ESI,0x3f1
MOV R10,-0x1
XOR EDI,EDI
MOV R9D,0xa2
MOV EDX,0xa2
JMP 0x0015d611
LEA EDI,[RDX + 0x1]
MOVSXD R10,EDX
CMP R9D,EDI
JL 0x0015d620
LEA EDX,[R9 + RDI*0x1]
LEA RSI,[0x1ef220]
MOV ECX,EDX
SAR ECX,0x1
MOVSXD RCX,ECX
MOVZX ESI,word ptr [RSI + RCX*0x4]
SAR EDX,0x1
CMP EBX,ESI
JNS 0x0015d5f0
LEA R9D,[RDX + -0x1]
CMP R9D,EDI
JGE 0x0015d5fb
LEA RCX,[0x1ef220]
MOV RDI,qword ptr [RSP + 0x8]
MOVZX ESI,word ptr [RCX + R10*0x4]
MOVZX EDX,byte ptr [RCX + R10*0x4 + 0x3]
MOV EDI,dword ptr [RDI + 0x8]
ADD EDX,ESI
CMP EBX,EDX
JGE 0x0015d860
MOVZX EDX,byte ptr [RCX + R10*0x4 + 0x2]
XOR ESI,EBX
MOV R9D,EDX
AND R9D,0x1
TEST R9D,ESI
JNZ 0x0015d860
SHR DL,0x1
LEA RCX,[0x1ef180]
AND EDX,0x7f
MOVZX EAX,word ptr [RCX + RDX*0x2]
ADD EAX,EBX
MOVZX EAX,AX
TEST EDI,EDI
JZ 0x0015d57d
XOR ESI,ESI
CMP EDI,0x2
MOV EDI,EAX
SETZ SIL
CALL 0x00114260
TEST EAX,EAX
JZ 0x0015d585
CMP EAX,0x7f
JG 0x0015d868
MOV byte ptr [R15],AL
ADD R15,0x1
JMP 0x0015d585
LEA EAX,[RBX + -0xc0]
LEA RDI,[0x1f5520]
MOVZX EBX,byte ptr [RDI + RAX*0x1]
CMP R14,R13
JZ 0x0015d7d5
MOVZX EAX,byte ptr [R12 + 0x1]
MOV EDX,EAX
AND EDX,0xffffffc0
CMP DL,0x80
JZ 0x0015d6ef
JMP 0x0015d7d5
MOVZX EAX,byte ptr [R13]
MOV EDX,EAX
AND EDX,0xffffffc0
CMP DL,0x80
JNZ 0x0015d700
SHL EBX,0x6
AND EAX,0x3f
ADD R13,0x1
ADD EBX,EAX
CMP R14,R13
JNZ 0x0015d6e0
CMP EBX,0x7f
JBE 0x0015d7e0
MOV EAX,EBX
AND EAX,0xfffff800
CMP EAX,0xd800
JZ 0x0015d7e0
MOV EAX,EBX
AND EAX,0xfffffffe
CMP EAX,0xfffe
JZ 0x0015d7e0
MOV RDI,qword ptr [RSP + 0x8]
MOV ESI,EBX
CALL 0x00126290
TEST EAX,EAX
JNZ 0x0015d5b8
LEA EAX,[RBX + -0x300]
CMP EAX,0x31
JA 0x0015d760
MOV EDI,EBX
CALL 0x001262e0
TEST EAX,EAX
JNZ 0x0015d5b8
NOP dword ptr [RAX]
MOV RCX,R13
MOV R13,R12
MOV R12,RBP
MOV RBP,qword ptr [RSP + 0x10]
SUB RCX,qword ptr [R12 + 0x8]
MOV RAX,qword ptr [R12 + 0x20]
MOV R8,R15
MOV RDX,R13
MOV dword ptr [R12 + 0x14],ECX
MOV RCX,qword ptr [RSP + 0x18]
MOV RDI,qword ptr [RSP + 0x38]
MOV qword ptr [RCX],RAX
MOV RAX,qword ptr [RSP + 0x20]
SUB R8,qword ptr [R12 + 0x20]
MOV dword ptr [RAX],R8D
MOV RAX,qword ptr [RSP + 0x28]
SUB RBP,qword ptr [R12 + 0x8]
MOV dword ptr [RAX],EBP
MOV RAX,qword ptr [RSP + 0x30]
SUB RDX,qword ptr [R12 + 0x8]
MOV dword ptr [RAX],EDX
MOV EAX,dword ptr [R12 + 0x18]
LEA EDX,[RAX + 0x1]
MOV dword ptr [R12 + 0x18],EDX
MOV dword ptr [RDI],EAX
XOR EAX,EAX
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP EBX,0x7f
JA 0x0015d72b
NOP
MOV RDI,qword ptr [RSP + 0x8]
MOV ESI,0xfffd
CALL 0x00126290
TEST EAX,EAX
JZ 0x0015d760
MOV EBX,0xfffd
JMP 0x0015d5b8
LEA ESI,[RBX + -0x10400]
LEA EDX,[RBX + 0x28]
CMP ESI,0x28
CMOVC EAX,EDX
MOV EDX,EAX
ADD R15,0x4
SAR EDX,0x12
AND EDX,0x7
SUB EDX,0x10
MOV byte ptr [R15 + -0x4],DL
MOV EDX,EAX
SAR EDX,0xc
AND EDX,0x3f
ADD EDX,-0x80
MOV byte ptr [R15 + -0x3],DL
MOV EDX,EAX
AND EAX,0x3f
SAR EDX,0x6
ADD EAX,-0x80
AND EDX,0x3f
MOV byte ptr [R15 + -0x1],AL
ADD EDX,-0x80
MOV byte ptr [R15 + -0x2],DL
JMP 0x0015d585
TEST EDI,EDI
JNZ 0x0015d679
MOV ESI,EAX
MOV EDX,EAX
AND ESI,0x3f
SAR EDX,0x6
ADD ESI,-0x80
CMP EAX,0x7ff
JG 0x0015d8c0
SUB EDX,0x40
MOV byte ptr [R15 + 0x1],SIL
ADD R15,0x2
MOV byte ptr [R15 + -0x2],DL
JMP 0x0015d585
TEST EBX,EBX
JZ 0x0015d585
MOV byte ptr [R15],AL
ADD R15,0x1
JMP 0x0015d585
ADD RSP,0x48
MOV EAX,0x65
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDI,EAX
AND EDX,0x3f
SAR EDI,0xc
ADD EDX,-0x80
CMP EAX,0xffff
JG 0x0015d817
SUB EDI,0x20
MOV byte ptr [R15 + 0x1],DL
ADD R15,0x3
MOV byte ptr [R15 + -0x3],DIL
MOV byte ptr [R15 + -0x1],SIL
JMP 0x0015d585
CMP EBX,0x7f
JA 0x0015d452
MOV ESI,0xfffd
MOV EBX,0xfffd
JMP 0x0015d4fa
MOV R13,R12
MOV R12,RBP
MOV RBP,qword ptr [RSP + 0x10]
MOV RCX,R13
JMP 0x0015d76e
MOV EAX,0x7
JMP 0x0015d7c6
(translation_unit "undefined8\nFUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}\n\n" (function_definition "undefined8\nFUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" type_identifier (function_declarator "FUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" identifier (parameter_list "(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "char cVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "char *pcVar14;" primitive_type (pointer_declarator "*pcVar14" * identifier) ;) (declaration "byte *pbVar15;" type_identifier (pointer_declarator "*pbVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (expression_statement "lVar3 = *param_1;" (assignment_expression "lVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);" (assignment_expression "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2])" identifier = (cast_expression "(byte *)(param_1[1] + (long)(int)param_1[2])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[1] + (long)(int)param_1[2])" ( (binary_expression "param_1[1] + (long)(int)param_1[2]" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (cast_expression "(long)(int)param_1[2]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])))) )))) ;) (expression_statement "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);" (assignment_expression "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" identifier = (cast_expression "(byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(int *)((long)param_1 + 0x14) + param_1[1])" ( (binary_expression "(long)*(int *)((long)param_1 + 0x14) + param_1[1]" (cast_expression "(long)*(int *)((long)param_1 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)((long)param_1 + 0x14)" * (cast_expression "(int *)((long)param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x14)" ( (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) + (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (do_statement "do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);" do (compound_statement "{\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  }" { (expression_statement "pbVar5 = pbVar10;" (assignment_expression "pbVar5 = pbVar10" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }" if (parenthesized_expression "(pbVar1 <= pbVar5)" ( (binary_expression "pbVar1 <= pbVar5" identifier <= identifier) )) (compound_statement "{\n      return 0x65;\n    }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar10 = pbVar5 + 1;" (assignment_expression "pbVar10 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (if_statement "if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" if (parenthesized_expression "(*pbVar5 < 0xc0)" ( (binary_expression "*pbVar5 < 0xc0" (pointer_expression "*pbVar5" * identifier) < number_literal) )) (compound_statement "{\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }" { (labeled_statement "LAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);" statement_identifier : (expression_statement "iVar6 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar6 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;)) }) (else_clause "else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" else (compound_statement "{\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" { (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" identifier = (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&DAT_001f5520)" ( (pointer_expression "&DAT_001f5520" & identifier) ))) [ (binary_expression "uVar7 - 0xc0" identifier - number_literal) ])) ;) (if_statement "if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" if (parenthesized_expression "((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar10)" ( (binary_expression "pbVar1 == pbVar10" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar5[1]" identifier = (subscript_expression "pbVar5[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" { (if_statement "if (uVar7 < 0x80) goto LAB_0015d4fa;" if (parenthesized_expression "(uVar7 < 0x80)" ( (binary_expression "uVar7 < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0015d4fa;" goto statement_identifier ;)) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;) })) (do_statement "do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      }" { (expression_statement "pbVar10 = pbVar10 + 1;" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar10) break;" if (parenthesized_expression "(pbVar1 == pbVar10)" ( (binary_expression "pbVar1 == pbVar10" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar10;" (assignment_expression "bVar2 = *pbVar10" identifier = (pointer_expression "*pbVar10" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;" if (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) && (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" ( (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" ( (binary_expression "uVar7 & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" ( (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" ( (binary_expression "uVar7 & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;)) (labeled_statement "LAB_0015d4fa:\n      uVar7 = 0xfffd;" statement_identifier : (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" identifier = number_literal) ;)) (expression_statement "iVar6 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar6 = FUN_00126290(lVar3,0xfffd)" identifier = (call_expression "FUN_00126290(lVar3,0xfffd)" identifier (argument_list "(lVar3,0xfffd)" ( identifier , number_literal )))) ;) }))) }) while (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) ;) (if_statement "if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }" if (parenthesized_expression "(pbVar1 <= pbVar5)" ( (binary_expression "pbVar1 <= pbVar5" identifier <= identifier) )) (compound_statement "{\n    return 0x65;\n  }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" identifier = (cast_expression "(char *)param_1[4]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "pcVar16 = pcVar14;" (assignment_expression "pcVar16 = pcVar14" identifier = identifier) ;) (labeled_statement "LAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" statement_identifier : (if_statement "if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" if (parenthesized_expression "((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14)" ( (binary_expression "(long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14" (cast_expression "(long)((int)param_1[5] + -4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)param_1[5] + -4)" ( (binary_expression "(int)param_1[5] + -4" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal) ))) <= (binary_expression "(long)pcVar16 - (long)pcVar14" (cast_expression "(long)pcVar16" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pcVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" { (expression_statement "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));" (assignment_expression "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" identifier = (call_expression "FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" identifier (argument_list "(pcVar14,(long)((int)param_1[5] + 0x40))" ( identifier , (cast_expression "(long)((int)param_1[5] + 0x40)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)param_1[5] + 0x40)" ( (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal) ))) )))) ;) (if_statement "if (lVar9 == 0) {\n      return 7;\n    }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40;" (assignment_expression "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40" (pointer_expression "*(int *)(param_1 + 5)" * (cast_expression "(int *)(param_1 + 5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal)) ;) (expression_statement "lVar4 = param_1[4];" (assignment_expression "lVar4 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = lVar9;" (assignment_expression "param_1[4] = lVar9" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar16 = pcVar16 + (lVar9 - lVar4);" (assignment_expression "pcVar16 = pcVar16 + (lVar9 - lVar4)" identifier = (binary_expression "pcVar16 + (lVar9 - lVar4)" identifier + (parenthesized_expression "(lVar9 - lVar4)" ( (binary_expression "lVar9 - lVar4" identifier - identifier) )))) ;) }))) (if_statement "if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" if (parenthesized_expression "(0x7f < (int)uVar7)" ( (binary_expression "0x7f < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" { (if_statement "if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" if (parenthesized_expression "((int)uVar7 < 0x10000)" ( (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" { (expression_statement "uVar12 = 0x3f1;" (assignment_expression "uVar12 = 0x3f1" identifier = number_literal) ;) (expression_statement "lVar9 = -1;" (assignment_expression "lVar9 = -1" identifier = number_literal) ;) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = 0xa2;" (assignment_expression "iVar6 = 0xa2" identifier = number_literal) ;) (expression_statement "iVar8 = 0xa2;" (assignment_expression "iVar8 = 0xa2" identifier = number_literal) ;) (do_statement "do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );" do (compound_statement "{\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      }" { (expression_statement "iVar8 = iVar8 >> 1;" (assignment_expression "iVar8 = iVar8 >> 1" identifier = (binary_expression "iVar8 >> 1" identifier >> number_literal)) ;) (if_statement "if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" if (parenthesized_expression "((int)(uVar7 - uVar12) < 0)" ( (binary_expression "(int)(uVar7 - uVar12) < 0" (cast_expression "(int)(uVar7 - uVar12)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 - uVar12)" ( (binary_expression "uVar7 - uVar12" identifier - identifier) ))) < number_literal) )) (compound_statement "{\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" { (expression_statement "iVar6 = iVar8 + -1;" (assignment_expression "iVar6 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" if (parenthesized_expression "(iVar6 < iVar13)" ( (binary_expression "iVar6 < iVar13" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }) (else_clause "else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" else (compound_statement "{\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" { (expression_statement "iVar13 = iVar8 + 1;" (assignment_expression "iVar13 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "lVar9 = (long)iVar8;" (assignment_expression "lVar9 = (long)iVar8" identifier = (cast_expression "(long)iVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" if (parenthesized_expression "(iVar6 < iVar13)" ( (binary_expression "iVar6 < iVar13" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }))) (expression_statement "iVar8 = iVar6 + iVar13;" (assignment_expression "iVar8 = iVar6 + iVar13" identifier = (binary_expression "iVar6 + iVar13" identifier + identifier)) ;) (expression_statement "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);" (assignment_expression "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" identifier = (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" ( (binary_expression "&DAT_001ef220 + (long)(iVar8 >> 1) * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "(long)(iVar8 >> 1) * 4" (cast_expression "(long)(iVar8 >> 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar8 >> 1)" ( (binary_expression "iVar8 >> 1" identifier >> number_literal) ))) * number_literal)) ))))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }" if (parenthesized_expression "(uVar7 - 0x10400 < 0x28)" ( (binary_expression "uVar7 - 0x10400 < 0x28" (binary_expression "uVar7 - 0x10400" identifier - number_literal) < number_literal) )) (compound_statement "{\n      uVar7 = uVar7 + 0x28;\n    }" { (expression_statement "uVar7 = uVar7 + 0x28;" (assignment_expression "uVar7 = uVar7 + 0x28" identifier = (binary_expression "uVar7 + 0x28" identifier + number_literal)) ;) })) (goto_statement "goto LAB_0015d817;" goto statement_identifier ;) })) (if_statement "if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" if (parenthesized_expression "(uVar7 - 0x41 < 0x1a)" ( (binary_expression "uVar7 - 0x41 < 0x1a" (binary_expression "uVar7 - 0x41" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" { (expression_statement "uVar7 = uVar7 + 0x20;" (assignment_expression "uVar7 = uVar7 + 0x20" identifier = (binary_expression "uVar7 + 0x20" identifier + number_literal)) ;) (goto_statement "goto joined_r0x0015d68b;" goto statement_identifier ;) })) (if_statement "if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" { (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" * identifier) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" identifier = (binary_expression "pcVar16 + 1" identifier + number_literal)) ;) })) (goto_statement "goto LAB_0015d585;" goto statement_identifier ;) (labeled_statement "LAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);" statement_identifier : (expression_statement "iVar6 = *(int *)(lVar3 + 8);" (assignment_expression "iVar6 = *(int *)(lVar3 + 8)" identifier = (pointer_expression "*(int *)(lVar3 + 8)" * (cast_expression "(int *)(lVar3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) ;)) (if_statement "if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" if (parenthesized_expression "(((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0))" ( (binary_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" (parenthesized_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))" ( (binary_expression "(int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" ( (binary_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (subscript_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4]" (call_expression "(uint)(byte)(&UNK_001ef223)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&UNK_001ef223)" ( (pointer_expression "&UNK_001ef223" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) + (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" ( (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "lVar9 * 4" identifier * number_literal)) ))))) )))) )) && (parenthesized_expression "(((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" ( (binary_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0" (parenthesized_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))" ( (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&UNK_001ef222)" ( (pointer_expression "&UNK_001ef222" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) & number_literal) & (parenthesized_expression "(*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" ( (binary_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7" (pointer_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4)" * (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" ( (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "lVar9 * 4" identifier * number_literal)) )))) ^ identifier) ))) )) == number_literal) ))) )) (compound_statement "{\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }" { (expression_statement "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;" (assignment_expression "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" identifier = (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7" (pointer_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" * (cast_expression "(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" ( (binary_expression "&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (pointer_expression "&DAT_001ef180" & identifier) + (binary_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (call_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" ( (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] >> 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&UNK_001ef222)" ( (pointer_expression "&UNK_001ef222" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) >> number_literal) ))) * number_literal)) )))) + identifier) & number_literal)) ;) (if_statement "if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" { (labeled_statement "LAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);" statement_identifier : (expression_statement "uVar7 = FUN_00114260(uVar7,iVar6 == 2);" (assignment_expression "uVar7 = FUN_00114260(uVar7,iVar6 == 2)" identifier = (call_expression "FUN_00114260(uVar7,iVar6 == 2)" identifier (argument_list "(uVar7,iVar6 == 2)" ( identifier , (binary_expression "iVar6 == 2" identifier == number_literal) )))) ;)) })) (labeled_statement "joined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" statement_identifier : (if_statement "if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" { (if_statement "if (0x7f < (int)uVar7) goto LAB_0015d868;" if (parenthesized_expression "(0x7f < (int)uVar7)" ( (binary_expression "0x7f < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0015d868;" goto statement_identifier ;)) (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" * identifier) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" identifier = (binary_expression "pcVar16 + 1" identifier + number_literal)) ;) }))) }) (else_clause "else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" else (compound_statement "{\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" { (if_statement "if (iVar6 != 0) goto LAB_0015d679;" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d679;" goto statement_identifier ;)) (labeled_statement "LAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" statement_identifier : (expression_statement "cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "cVar11 = ((byte)uVar7 & 0x3f) + 0x80" identifier = (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" ( (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;)) (expression_statement "bVar2 = (byte)((int)uVar7 >> 6);" (assignment_expression "bVar2 = (byte)((int)uVar7 >> 6)" identifier = (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 6)" ( (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" if (parenthesized_expression "((int)uVar7 < 0x800)" ( (binary_expression "(int)uVar7 < 0x800" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }" { (expression_statement "pcVar16[1] = cVar11;" (assignment_expression "pcVar16[1] = cVar11" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*pcVar16 = bVar2 - 0x40;" (assignment_expression "*pcVar16 = bVar2 - 0x40" (pointer_expression "*pcVar16" * identifier) = (binary_expression "bVar2 - 0x40" identifier - number_literal)) ;) (expression_statement "pcVar16 = pcVar16 + 2;" (assignment_expression "pcVar16 = pcVar16 + 2" identifier = (binary_expression "pcVar16 + 2" identifier + number_literal)) ;) }) (else_clause "else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" else (if_statement "if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" if (parenthesized_expression "((int)uVar7 < 0x10000)" ( (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }" { (expression_statement "pcVar16[1] = (bVar2 & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = (bVar2 & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = (binary_expression "(bVar2 & 0x3f) + 0x80" (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )) + number_literal)) ;) (expression_statement "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;" (assignment_expression "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20" (pointer_expression "*pcVar16" * identifier) = (binary_expression "(char)((int)uVar7 >> 0xc) + -0x20" (cast_expression "(char)((int)uVar7 >> 0xc)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)uVar7 >> 0xc)" ( (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + number_literal)) ;) (expression_statement "pcVar16[2] = cVar11;" (assignment_expression "pcVar16[2] = cVar11" (subscript_expression "pcVar16[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar16 = pcVar16 + 3;" (assignment_expression "pcVar16 = pcVar16 + 3" identifier = (binary_expression "pcVar16 + 3" identifier + number_literal)) ;) }) (else_clause "else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" else (compound_statement "{\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" { (labeled_statement "LAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" statement_identifier : (expression_statement "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" (assignment_expression "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (pointer_expression "*pcVar16" * identifier) = (binary_expression "((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (parenthesized_expression "((byte)((int)uVar7 >> 0x12) & 7)" ( (binary_expression "(byte)((int)uVar7 >> 0x12) & 7" (call_expression "(byte)((int)uVar7 >> 0x12)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 0x12)" ( (binary_expression "(int)uVar7 >> 0x12" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) - number_literal)) ;)) (expression_statement "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = (binary_expression "((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 0xc) & 0x3f)" ( (binary_expression "(byte)((int)uVar7 >> 0xc) & 0x3f" (call_expression "(byte)((int)uVar7 >> 0xc)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 0xc)" ( (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80" (subscript_expression "pcVar16[3]" identifier [ number_literal ]) = (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" ( (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;" (assignment_expression "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (subscript_expression "pcVar16[2]" identifier [ number_literal ]) = (binary_expression "((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 6) & 0x3f)" ( (binary_expression "(byte)((int)uVar7 >> 6) & 0x3f" (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 6)" ( (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16 = pcVar16 + 4;" (assignment_expression "pcVar16 = pcVar16 + 4" identifier = (binary_expression "pcVar16 + 4" identifier + number_literal)) ;) }))))) }))) (labeled_statement "LAB_0015d585:\n  iVar6 = (int)pbVar10;" statement_identifier : (expression_statement "iVar6 = (int)pbVar10;" (assignment_expression "iVar6 = (int)pbVar10" identifier = (cast_expression "(int)pbVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (expression_statement "iVar8 = iVar6;" (assignment_expression "iVar8 = iVar6" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar10) goto LAB_0015d76e;" if (parenthesized_expression "(pbVar1 <= pbVar10)" ( (binary_expression "pbVar1 <= pbVar10" identifier <= identifier) )) (goto_statement "goto LAB_0015d76e;" goto statement_identifier ;)) (expression_statement "uVar7 = (uint)*pbVar10;" (assignment_expression "uVar7 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar15 = pbVar10 + 1;" (assignment_expression "pbVar15 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" if (parenthesized_expression "(uVar7 < 0xc0)" ( (binary_expression "uVar7 < 0xc0" identifier < number_literal) )) (compound_statement "{\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }" { (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;) (labeled_statement "joined_r0x0015d5b2:\n    pbVar10 = pbVar15;" statement_identifier : (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;)) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" else (compound_statement "{\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" { (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" identifier = (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&DAT_001f5520)" ( (pointer_expression "&DAT_001f5520" & identifier) ))) [ (binary_expression "uVar7 - 0xc0" identifier - number_literal) ])) ;) (if_statement "if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" if (parenthesized_expression "((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar15)" ( (binary_expression "pbVar1 == pbVar15" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar10[1]" identifier = (subscript_expression "pbVar10[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }" { (if_statement "if (0x7f < uVar7) goto LAB_0015d72b;" if (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_0015d72b;" goto statement_identifier ;)) }) (else_clause "else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" else (compound_statement "{\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" { (do_statement "do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      }" { (expression_statement "pbVar15 = pbVar15 + 1;" (assignment_expression "pbVar15 = pbVar15 + 1" identifier = (binary_expression "pbVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar15) break;" if (parenthesized_expression "(pbVar1 == pbVar15)" ( (binary_expression "pbVar1 == pbVar15" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar15;" (assignment_expression "bVar2 = *pbVar15" identifier = (pointer_expression "*pbVar15" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" if (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) && (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" ( (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" ( (binary_expression "uVar7 & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" ( (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" ( (binary_expression "uVar7 & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" { (labeled_statement "LAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);" statement_identifier : (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;)) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;) (if_statement "if (iVar8 != 0) goto LAB_0015d5b8;" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d5b8;" goto statement_identifier ;)) (if_statement "if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" if (parenthesized_expression "(0x31 < uVar7 - 0x300)" ( (binary_expression "0x31 < uVar7 - 0x300" number_literal < (binary_expression "uVar7 - 0x300" identifier - number_literal)) )) (compound_statement "{\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" { (labeled_statement "LAB_0015d760:\n          iVar8 = (int)pbVar15;" statement_identifier : (expression_statement "iVar8 = (int)pbVar15;" (assignment_expression "iVar8 = (int)pbVar15" identifier = (cast_expression "(int)pbVar15" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (labeled_statement "LAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" statement_identifier : (expression_statement "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" (assignment_expression "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1]" (pointer_expression "*(int *)((long)param_1 + 0x14)" * (cast_expression "(int *)((long)param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x14)" ( (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "iVar8 - (int)param_1[1]" identifier - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;)) (expression_statement "*param_2 = param_1[4];" (assignment_expression "*param_2 = param_1[4]" (pointer_expression "*param_2" * identifier) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "*param_3 = (int)pcVar16 - (int)param_1[4];" (assignment_expression "*param_3 = (int)pcVar16 - (int)param_1[4]" (pointer_expression "*param_3" * identifier) = (binary_expression "(int)pcVar16 - (int)param_1[4]" (cast_expression "(int)pcVar16" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[4]" identifier [ number_literal ])))) ;) (expression_statement "*param_4 = (int)pbVar5 - (int)param_1[1];" (assignment_expression "*param_4 = (int)pbVar5 - (int)param_1[1]" (pointer_expression "*param_4" * identifier) = (binary_expression "(int)pbVar5 - (int)param_1[1]" (cast_expression "(int)pbVar5" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;) (expression_statement "*param_5 = iVar6 - (int)param_1[1];" (assignment_expression "*param_5 = iVar6 - (int)param_1[1]" (pointer_expression "*param_5" * identifier) = (binary_expression "iVar6 - (int)param_1[1]" identifier - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;) (expression_statement "lVar3 = param_1[3];" (assignment_expression "lVar3 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "*(int *)(param_1 + 3) = (int)lVar3 + 1;" (assignment_expression "*(int *)(param_1 + 3) = (int)lVar3 + 1" (pointer_expression "*(int *)(param_1 + 3)" * (cast_expression "(int *)(param_1 + 3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) = (binary_expression "(int)lVar3 + 1" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "*param_6 = (int)lVar3;" (assignment_expression "*param_6 = (int)lVar3" (pointer_expression "*param_6" * identifier) = (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar8 = FUN_001262e0(uVar7);" (assignment_expression "iVar8 = FUN_001262e0(uVar7)" identifier = (call_expression "FUN_001262e0(uVar7)" identifier (argument_list "(uVar7)" ( identifier )))) ;) (goto_statement "goto joined_r0x0015d5b2;" goto statement_identifier ;) })) }))) (expression_statement "iVar8 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar8 = FUN_00126290(lVar3,0xfffd)" identifier = (call_expression "FUN_00126290(lVar3,0xfffd)" identifier (argument_list "(lVar3,0xfffd)" ( identifier , number_literal )))) ;) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" identifier = number_literal) ;) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;) }))) (labeled_statement "LAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];" statement_identifier : (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" identifier = (cast_expression "(char *)param_1[4]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;)) (goto_statement "goto LAB_0015d531;" goto statement_identifier ;) })))
(translation_unit "int unicodeNext(sqlite3_tokenizer_cursor *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,\n               int *piPos)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  unicode_tokenizer *p;\n  sqlite3_tokenizer *psVar3;\n  byte *pbVar4;\n  int iVar5;\n  uint iCode;\n  int iVar6;\n  sqlite3_tokenizer *psVar7;\n  byte *pbVar8;\n  char cVar9;\n  uint uVar10;\n  int iVar11;\n  unicode_cursor *pCsr;\n  long lVar12;\n  byte *pbVar13;\n  sqlite3_tokenizer *psVar14;\n  \n  p = (unicode_tokenizer *)pC->pTokenizer;\n  pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);\n  pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   );\n  do {\n    pbVar4 = pbVar8;\n    if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }\n    iCode = (uint)*pbVar4;\n    pbVar8 = pbVar4 + 1;\n    if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }\n  } while (iVar5 == 0);\n  if (pbVar1 <= pbVar4) {\n    return 0x65;\n  }\n  psVar7 = pC[4].pTokenizer;\n  psVar14 = psVar7;\nLAB_0015d531:\n  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }\n  if (0x7f < (int)iCode) {\n    if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }\n    if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (iCode - 0x41 < 0x1a) {\n    iCode = iCode + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (iCode != 0) {\n    *(char *)&psVar14->pModule = (char)iCode;\n    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar5 = p->eRemoveDiacritic;\n  if (((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)) {\n    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;\n    if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }\njoined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }\n  }\n  else {\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }\nLAB_0015d585:\n  iVar5 = (int)pbVar8;\n  iVar6 = iVar5;\n  if (pbVar1 <= pbVar8) goto LAB_0015d76e;\n  iCode = (uint)*pbVar8;\n  pbVar13 = pbVar8 + 1;\n  if (iCode < 0xc0) {\n    iVar6 = unicodeIsAlnum(p,iCode);\njoined_r0x0015d5b2:\n    pbVar8 = pbVar13;\n    if (iVar6 == 0) goto LAB_0015d760;\n  }\n  else {\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }\nLAB_0015d5b8:\n  psVar7 = pC[4].pTokenizer;\n  goto LAB_0015d531;\n}\n\n" (function_definition "int unicodeNext(sqlite3_tokenizer_cursor *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,\n               int *piPos)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  unicode_tokenizer *p;\n  sqlite3_tokenizer *psVar3;\n  byte *pbVar4;\n  int iVar5;\n  uint iCode;\n  int iVar6;\n  sqlite3_tokenizer *psVar7;\n  byte *pbVar8;\n  char cVar9;\n  uint uVar10;\n  int iVar11;\n  unicode_cursor *pCsr;\n  long lVar12;\n  byte *pbVar13;\n  sqlite3_tokenizer *psVar14;\n  \n  p = (unicode_tokenizer *)pC->pTokenizer;\n  pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);\n  pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   );\n  do {\n    pbVar4 = pbVar8;\n    if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }\n    iCode = (uint)*pbVar4;\n    pbVar8 = pbVar4 + 1;\n    if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }\n  } while (iVar5 == 0);\n  if (pbVar1 <= pbVar4) {\n    return 0x65;\n  }\n  psVar7 = pC[4].pTokenizer;\n  psVar14 = psVar7;\nLAB_0015d531:\n  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }\n  if (0x7f < (int)iCode) {\n    if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }\n    if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (iCode - 0x41 < 0x1a) {\n    iCode = iCode + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (iCode != 0) {\n    *(char *)&psVar14->pModule = (char)iCode;\n    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar5 = p->eRemoveDiacritic;\n  if (((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)) {\n    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;\n    if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }\njoined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }\n  }\n  else {\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }\nLAB_0015d585:\n  iVar5 = (int)pbVar8;\n  iVar6 = iVar5;\n  if (pbVar1 <= pbVar8) goto LAB_0015d76e;\n  iCode = (uint)*pbVar8;\n  pbVar13 = pbVar8 + 1;\n  if (iCode < 0xc0) {\n    iVar6 = unicodeIsAlnum(p,iCode);\njoined_r0x0015d5b2:\n    pbVar8 = pbVar13;\n    if (iVar6 == 0) goto LAB_0015d760;\n  }\n  else {\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }\nLAB_0015d5b8:\n  psVar7 = pC[4].pTokenizer;\n  goto LAB_0015d531;\n}" primitive_type (function_declarator "unicodeNext(sqlite3_tokenizer_cursor *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,\n               int *piPos)" identifier (parameter_list "(sqlite3_tokenizer_cursor *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,\n               int *piPos)" ( (parameter_declaration "sqlite3_tokenizer_cursor *pC" type_identifier (pointer_declarator "*pC" * identifier)) , (parameter_declaration "char **paToken" primitive_type (pointer_declarator "**paToken" * (pointer_declarator "*paToken" * identifier))) , (parameter_declaration "int *pnToken" primitive_type (pointer_declarator "*pnToken" * identifier)) , (parameter_declaration "int *piStart" primitive_type (pointer_declarator "*piStart" * identifier)) , (parameter_declaration "int *piEnd" primitive_type (pointer_declarator "*piEnd" * identifier)) , (parameter_declaration "int *piPos" primitive_type (pointer_declarator "*piPos" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  unicode_tokenizer *p;\n  sqlite3_tokenizer *psVar3;\n  byte *pbVar4;\n  int iVar5;\n  uint iCode;\n  int iVar6;\n  sqlite3_tokenizer *psVar7;\n  byte *pbVar8;\n  char cVar9;\n  uint uVar10;\n  int iVar11;\n  unicode_cursor *pCsr;\n  long lVar12;\n  byte *pbVar13;\n  sqlite3_tokenizer *psVar14;\n  \n  p = (unicode_tokenizer *)pC->pTokenizer;\n  pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);\n  pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   );\n  do {\n    pbVar4 = pbVar8;\n    if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }\n    iCode = (uint)*pbVar4;\n    pbVar8 = pbVar4 + 1;\n    if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }\n  } while (iVar5 == 0);\n  if (pbVar1 <= pbVar4) {\n    return 0x65;\n  }\n  psVar7 = pC[4].pTokenizer;\n  psVar14 = psVar7;\nLAB_0015d531:\n  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }\n  if (0x7f < (int)iCode) {\n    if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }\n    if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (iCode - 0x41 < 0x1a) {\n    iCode = iCode + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (iCode != 0) {\n    *(char *)&psVar14->pModule = (char)iCode;\n    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar5 = p->eRemoveDiacritic;\n  if (((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)) {\n    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;\n    if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }\njoined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }\n  }\n  else {\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }\nLAB_0015d585:\n  iVar5 = (int)pbVar8;\n  iVar6 = iVar5;\n  if (pbVar1 <= pbVar8) goto LAB_0015d76e;\n  iCode = (uint)*pbVar8;\n  pbVar13 = pbVar8 + 1;\n  if (iCode < 0xc0) {\n    iVar6 = unicodeIsAlnum(p,iCode);\njoined_r0x0015d5b2:\n    pbVar8 = pbVar13;\n    if (iVar6 == 0) goto LAB_0015d760;\n  }\n  else {\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }\nLAB_0015d5b8:\n  psVar7 = pC[4].pTokenizer;\n  goto LAB_0015d531;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "unicode_tokenizer *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "sqlite3_tokenizer *psVar3;" type_identifier (pointer_declarator "*psVar3" * identifier) ;) (declaration "byte *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint iCode;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "sqlite3_tokenizer *psVar7;" type_identifier (pointer_declarator "*psVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "char cVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "unicode_cursor *pCsr;" type_identifier (pointer_declarator "*pCsr" * identifier) ;) (declaration "long lVar12;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "sqlite3_tokenizer *psVar14;" type_identifier (pointer_declarator "*psVar14" * identifier) ;) (expression_statement "p = (unicode_tokenizer *)pC->pTokenizer;" (assignment_expression "p = (unicode_tokenizer *)pC->pTokenizer" identifier = (cast_expression "(unicode_tokenizer *)pC->pTokenizer" ( (type_descriptor "unicode_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pC->pTokenizer" identifier -> field_identifier))) ;) (expression_statement "pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);" (assignment_expression "pbVar1 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer)" identifier = (cast_expression "(byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer)" ( (binary_expression "(long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer" (cast_expression "(long)&(pC[1].pTokenizer)->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(pC[1].pTokenizer)->pModule" & (field_expression "(pC[1].pTokenizer)->pModule" (parenthesized_expression "(pC[1].pTokenizer)" ( (field_expression "pC[1].pTokenizer" (subscript_expression "pC[1]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (cast_expression "(long)*(int *)&pC[2].pTokenizer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)&pC[2].pTokenizer" * (cast_expression "(int *)&pC[2].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[2].pTokenizer" & (field_expression "pC[2].pTokenizer" (subscript_expression "pC[2]" identifier [ number_literal ]) . field_identifier)))))) )))) ;) (expression_statement "pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   );" (assignment_expression "pbVar8 = (byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   )" identifier = (cast_expression "(byte *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   )" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)\n                   )" ( (binary_expression "(long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)" (cast_expression "(long)&(pC[1].pTokenizer)->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(pC[1].pTokenizer)->pModule" & (field_expression "(pC[1].pTokenizer)->pModule" (parenthesized_expression "(pC[1].pTokenizer)" ( (field_expression "pC[1].pTokenizer" (subscript_expression "pC[1]" identifier [ number_literal ]) . field_identifier) )) -> field_identifier))) + (cast_expression "(long)*(int *)((long)&pC[2].pTokenizer + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)((long)&pC[2].pTokenizer + 4)" * (cast_expression "(int *)((long)&pC[2].pTokenizer + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pC[2].pTokenizer + 4)" ( (binary_expression "(long)&pC[2].pTokenizer + 4" (cast_expression "(long)&pC[2].pTokenizer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pC[2].pTokenizer" & (field_expression "pC[2].pTokenizer" (subscript_expression "pC[2]" identifier [ number_literal ]) . field_identifier))) + number_literal) )))))) )))) ;) (do_statement "do {\n    pbVar4 = pbVar8;\n    if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }\n    iCode = (uint)*pbVar4;\n    pbVar8 = pbVar4 + 1;\n    if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }\n  } while (iVar5 == 0);" do (compound_statement "{\n    pbVar4 = pbVar8;\n    if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }\n    iCode = (uint)*pbVar4;\n    pbVar8 = pbVar4 + 1;\n    if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }\n  }" { (expression_statement "pbVar4 = pbVar8;" (assignment_expression "pbVar4 = pbVar8" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar4) {\n      return 0x65;\n    }" if (parenthesized_expression "(pbVar1 <= pbVar4)" ( (binary_expression "pbVar1 <= pbVar4" identifier <= identifier) )) (compound_statement "{\n      return 0x65;\n    }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "iCode = (uint)*pbVar4;" (assignment_expression "iCode = (uint)*pbVar4" identifier = (binary_expression "(uint)*pbVar4" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar8 = pbVar4 + 1;" (assignment_expression "pbVar8 = pbVar4 + 1" identifier = (binary_expression "pbVar4 + 1" identifier + number_literal)) ;) (if_statement "if (*pbVar4 < 0xc0) {\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }\n    else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }" if (parenthesized_expression "(*pbVar4 < 0xc0)" ( (binary_expression "*pbVar4 < 0xc0" (pointer_expression "*pbVar4" * identifier) < number_literal) )) (compound_statement "{\nLAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);\n    }" { (labeled_statement "LAB_0015d452:\n      iVar5 = unicodeIsAlnum(p,iCode);" statement_identifier : (expression_statement "iVar5 = unicodeIsAlnum(p,iCode);" (assignment_expression "iVar5 = unicodeIsAlnum(p,iCode)" identifier = (call_expression "unicodeIsAlnum(p,iCode)" identifier (argument_list "(p,iCode)" ( identifier , identifier )))) ;)) }) (else_clause "else {\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }" else (compound_statement "{\n      iCode = (uint)""[iCode - 0xc0];\n      if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      iCode = 0xfffd;\n      iVar5 = unicodeIsAlnum(p,0xfffd);\n    }" { (expression_statement "iCode = (uint)""[iCode - 0xc0];" (assignment_expression "iCode = (uint)""[iCode - 0xc0]" identifier = (cast_expression "(uint)""[iCode - 0xc0]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression """[iCode - 0xc0]" (string_literal """" " ") [ (binary_expression "iCode - 0xc0" identifier - number_literal) ]))) ;) (if_statement "if ((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)) {\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" if (parenthesized_expression "((pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar8) || (bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar8)" ( (binary_expression "pbVar1 == pbVar8" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar4[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar4[1]" identifier = (subscript_expression "pbVar4[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        if (iCode < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" { (if_statement "if (iCode < 0x80) goto LAB_0015d4fa;" if (parenthesized_expression "(iCode < 0x80)" ( (binary_expression "iCode < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0015d4fa;" goto statement_identifier ;)) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;) })) (do_statement "do {\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar8 = pbVar8 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar8) break;\n        bVar2 = *pbVar8;\n      }" { (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (expression_statement "iCode = iCode * 0x40 + (bVar2 & 0x3f);" (assignment_expression "iCode = iCode * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "iCode * 0x40 + (bVar2 & 0x3f)" (binary_expression "iCode * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar8) break;" if (parenthesized_expression "(pbVar1 == pbVar8)" ( (binary_expression "pbVar1 == pbVar8" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar8;" (assignment_expression "bVar2 = *pbVar8" identifier = (pointer_expression "*pbVar8" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;" if (parenthesized_expression "(((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < iCode)" ( (binary_expression "0x7f < iCode" number_literal < identifier) )) && (parenthesized_expression "((iCode & 0xfffff800) != 0xd800)" ( (binary_expression "(iCode & 0xfffff800) != 0xd800" (parenthesized_expression "(iCode & 0xfffff800)" ( (binary_expression "iCode & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((iCode & 0xfffffffe) != 0xfffe)" ( (binary_expression "(iCode & 0xfffffffe) != 0xfffe" (parenthesized_expression "(iCode & 0xfffffffe)" ( (binary_expression "iCode & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;)) (labeled_statement "LAB_0015d4fa:\n      iCode = 0xfffd;" statement_identifier : (expression_statement "iCode = 0xfffd;" (assignment_expression "iCode = 0xfffd" identifier = number_literal) ;)) (expression_statement "iVar5 = unicodeIsAlnum(p,0xfffd);" (assignment_expression "iVar5 = unicodeIsAlnum(p,0xfffd)" identifier = (call_expression "unicodeIsAlnum(p,0xfffd)" identifier (argument_list "(p,0xfffd)" ( identifier , number_literal )))) ;) }))) }) while (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) ;) (if_statement "if (pbVar1 <= pbVar4) {\n    return 0x65;\n  }" if (parenthesized_expression "(pbVar1 <= pbVar4)" ( (binary_expression "pbVar1 <= pbVar4" identifier <= identifier) )) (compound_statement "{\n    return 0x65;\n  }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "psVar7 = pC[4].pTokenizer;" (assignment_expression "psVar7 = pC[4].pTokenizer" identifier = (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "psVar14 = psVar7;" (assignment_expression "psVar14 = psVar7" identifier = identifier) ;) (labeled_statement "LAB_0015d531:\n  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }" statement_identifier : (if_statement "if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7) {\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }" if (parenthesized_expression "((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7)" ( (binary_expression "(long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)psVar7" (cast_expression "(long)(*(int *)&pC[5].pTokenizer + -4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(int *)&pC[5].pTokenizer + -4)" ( (binary_expression "*(int *)&pC[5].pTokenizer + -4" (pointer_expression "*(int *)&pC[5].pTokenizer" * (cast_expression "(int *)&pC[5].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[5].pTokenizer" & (field_expression "pC[5].pTokenizer" (subscript_expression "pC[5]" identifier [ number_literal ]) . field_identifier)))) + number_literal) ))) <= (binary_expression "(long)psVar14 - (long)psVar7" (cast_expression "(long)psVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)psVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n    psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;\n    if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }\n    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;\n    psVar3 = pC[4].pTokenizer;\n    pC[4].pTokenizer = psVar7;\n    psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);\n  }" { (expression_statement "psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))\n    ;" (assignment_expression "psVar7 = (sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))" identifier = (cast_expression "(sqlite3_tokenizer *)sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3_realloc64(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))" identifier (argument_list "(psVar7,(long)(*(int *)&pC[5].pTokenizer + 0x40))" ( identifier , (cast_expression "(long)(*(int *)&pC[5].pTokenizer + 0x40)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(int *)&pC[5].pTokenizer + 0x40)" ( (binary_expression "*(int *)&pC[5].pTokenizer + 0x40" (pointer_expression "*(int *)&pC[5].pTokenizer" * (cast_expression "(int *)&pC[5].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[5].pTokenizer" & (field_expression "pC[5].pTokenizer" (subscript_expression "pC[5]" identifier [ number_literal ]) . field_identifier)))) + number_literal) ))) ))))) ;) (if_statement "if (psVar7 == (sqlite3_tokenizer *)0x0) {\n      return 7;\n    }" if (parenthesized_expression "(psVar7 == (sqlite3_tokenizer *)0x0)" ( (binary_expression "psVar7 == (sqlite3_tokenizer *)0x0" identifier == (cast_expression "(sqlite3_tokenizer *)0x0" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "*(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;" (assignment_expression "*(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40" (pointer_expression "*(int *)&pC[5].pTokenizer" * (cast_expression "(int *)&pC[5].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[5].pTokenizer" & (field_expression "pC[5].pTokenizer" (subscript_expression "pC[5]" identifier [ number_literal ]) . field_identifier)))) = (binary_expression "*(int *)&pC[5].pTokenizer + 0x40" (pointer_expression "*(int *)&pC[5].pTokenizer" * (cast_expression "(int *)&pC[5].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[5].pTokenizer" & (field_expression "pC[5].pTokenizer" (subscript_expression "pC[5]" identifier [ number_literal ]) . field_identifier)))) + number_literal)) ;) (expression_statement "psVar3 = pC[4].pTokenizer;" (assignment_expression "psVar3 = pC[4].pTokenizer" identifier = (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pC[4].pTokenizer = psVar7;" (assignment_expression "pC[4].pTokenizer = psVar7" (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7)" identifier = (cast_expression "(sqlite3_tokenizer *)(((long)psVar14 - (long)psVar3) + (long)psVar7)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((long)psVar14 - (long)psVar3) + (long)psVar7)" ( (binary_expression "((long)psVar14 - (long)psVar3) + (long)psVar7" (parenthesized_expression "((long)psVar14 - (long)psVar3)" ( (binary_expression "(long)psVar14 - (long)psVar3" (cast_expression "(long)psVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)psVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) + (cast_expression "(long)psVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) }))) (if_statement "if (0x7f < (int)iCode) {\n    if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }\n    if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }\n    goto LAB_0015d817;\n  }" if (parenthesized_expression "(0x7f < (int)iCode)" ( (binary_expression "0x7f < (int)iCode" number_literal < (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }\n    if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }\n    goto LAB_0015d817;\n  }" { (if_statement "if ((int)iCode < 0x10000) {\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }" if (parenthesized_expression "((int)iCode < 0x10000)" ( (binary_expression "(int)iCode < 0x10000" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar10 = 0x3f1;\n      lVar12 = -1;\n      iVar11 = 0;\n      iVar5 = 0xa2;\n      iVar6 = 0xa2;\n      do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );\n    }" { (expression_statement "uVar10 = 0x3f1;" (assignment_expression "uVar10 = 0x3f1" identifier = number_literal) ;) (expression_statement "lVar12 = -1;" (assignment_expression "lVar12 = -1" identifier = number_literal) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "iVar5 = 0xa2;" (assignment_expression "iVar5 = 0xa2" identifier = number_literal) ;) (expression_statement "iVar6 = 0xa2;" (assignment_expression "iVar6 = 0xa2" identifier = number_literal) ;) (do_statement "do {\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      } while( true );" do (compound_statement "{\n        iVar6 = iVar6 >> 1;\n        if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        iVar6 = iVar5 + iVar11;\n        uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);\n      }" { (expression_statement "iVar6 = iVar6 >> 1;" (assignment_expression "iVar6 = iVar6 >> 1" identifier = (binary_expression "iVar6 >> 1" identifier >> number_literal)) ;) (if_statement "if ((int)(iCode - uVar10) < 0) {\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }\n        else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }" if (parenthesized_expression "((int)(iCode - uVar10) < 0)" ( (binary_expression "(int)(iCode - uVar10) < 0" (cast_expression "(int)(iCode - uVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(iCode - uVar10)" ( (binary_expression "iCode - uVar10" identifier - identifier) ))) < number_literal) )) (compound_statement "{\n          iVar5 = iVar6 + -1;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }" { (expression_statement "iVar5 = iVar6 + -1;" (assignment_expression "iVar5 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if (iVar5 < iVar11) goto LAB_0015d620;" if (parenthesized_expression "(iVar5 < iVar11)" ( (binary_expression "iVar5 < iVar11" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }) (else_clause "else {\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }" else (compound_statement "{\n          iVar11 = iVar6 + 1;\n          lVar12 = (long)iVar6;\n          if (iVar5 < iVar11) goto LAB_0015d620;\n        }" { (expression_statement "iVar11 = iVar6 + 1;" (assignment_expression "iVar11 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "lVar12 = (long)iVar6;" (assignment_expression "lVar12 = (long)iVar6" identifier = (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (if_statement "if (iVar5 < iVar11) goto LAB_0015d620;" if (parenthesized_expression "(iVar5 < iVar11)" ( (binary_expression "iVar5 < iVar11" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }))) (expression_statement "iVar6 = iVar5 + iVar11;" (assignment_expression "iVar6 = iVar5 + iVar11" identifier = (binary_expression "iVar5 + iVar11" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4);" (assignment_expression "uVar10 = (uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4)" identifier = (binary_expression "(uint)*(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(aEntry_44558 + (long)(iVar6 >> 1) * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(aEntry_44558 + (long)(iVar6 >> 1) * 4)" ( (binary_expression "aEntry_44558 + (long)(iVar6 >> 1) * 4" identifier + (binary_expression "(long)(iVar6 >> 1) * 4" (cast_expression "(long)(iVar6 >> 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar6 >> 1)" ( (binary_expression "iVar6 >> 1" identifier >> number_literal) ))) * number_literal)) ))))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iCode - 0x10400 < 0x28) {\n      iCode = iCode + 0x28;\n    }" if (parenthesized_expression "(iCode - 0x10400 < 0x28)" ( (binary_expression "iCode - 0x10400 < 0x28" (binary_expression "iCode - 0x10400" identifier - number_literal) < number_literal) )) (compound_statement "{\n      iCode = iCode + 0x28;\n    }" { (expression_statement "iCode = iCode + 0x28;" (assignment_expression "iCode = iCode + 0x28" identifier = (binary_expression "iCode + 0x28" identifier + number_literal)) ;) })) (goto_statement "goto LAB_0015d817;" goto statement_identifier ;) })) (if_statement "if (iCode - 0x41 < 0x1a) {\n    iCode = iCode + 0x20;\n    goto joined_r0x0015d68b;\n  }" if (parenthesized_expression "(iCode - 0x41 < 0x1a)" ( (binary_expression "iCode - 0x41 < 0x1a" (binary_expression "iCode - 0x41" identifier - number_literal) < number_literal) )) (compound_statement "{\n    iCode = iCode + 0x20;\n    goto joined_r0x0015d68b;\n  }" { (expression_statement "iCode = iCode + 0x20;" (assignment_expression "iCode = iCode + 0x20" identifier = (binary_expression "iCode + 0x20" identifier + number_literal)) ;) (goto_statement "goto joined_r0x0015d68b;" goto statement_identifier ;) })) (if_statement "if (iCode != 0) {\n    *(char *)&psVar14->pModule = (char)iCode;\n    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n  }" if (parenthesized_expression "(iCode != 0)" ( (binary_expression "iCode != 0" identifier != number_literal) )) (compound_statement "{\n    *(char *)&psVar14->pModule = (char)iCode;\n    psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n  }" { (expression_statement "*(char *)&psVar14->pModule = (char)iCode;" (assignment_expression "*(char *)&psVar14->pModule = (char)iCode" (pointer_expression "*(char *)&psVar14->pModule" * (cast_expression "(char *)&psVar14->pModule" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier)))) = (cast_expression "(char)iCode" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1)" identifier = (cast_expression "(sqlite3_tokenizer *)((long)&psVar14->pModule + 1)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 1)" ( (binary_expression "(long)&psVar14->pModule + 1" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) ;) })) (goto_statement "goto LAB_0015d585;" goto statement_identifier ;) (labeled_statement "LAB_0015d620:\n  iVar5 = p->eRemoveDiacritic;" statement_identifier : (expression_statement "iVar5 = p->eRemoveDiacritic;" (assignment_expression "iVar5 = p->eRemoveDiacritic" identifier = (field_expression "p->eRemoveDiacritic" identifier -> field_identifier)) ;)) (if_statement "if (((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)) {\n    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;\n    if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }\njoined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }\n  }\n  else {\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }" if (parenthesized_expression "(((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0))" ( (binary_expression "((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )) &&\n     (((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)" (parenthesized_expression "((int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            ))" ( (binary_expression "(int)iCode <\n       (int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)\n            )" ( (binary_expression "(uint)(byte)aEntry_44558[lVar12 * 4 + 3] + (uint)*(ushort *)(aEntry_44558 + lVar12 * 4)" (cast_expression "(uint)(byte)aEntry_44558[lVar12 * 4 + 3]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)aEntry_44558[lVar12 * 4 + 3]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "aEntry_44558[lVar12 * 4 + 3]" identifier [ (binary_expression "lVar12 * 4 + 3" (binary_expression "lVar12 * 4" identifier * number_literal) + number_literal) ]))) + (binary_expression "(uint)*(ushort *)(aEntry_44558 + lVar12 * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(aEntry_44558 + lVar12 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(aEntry_44558 + lVar12 * 4)" ( (binary_expression "aEntry_44558 + lVar12 * 4" identifier + (binary_expression "lVar12 * 4" identifier * number_literal)) ))))) )))) )) && (parenthesized_expression "(((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0)" ( (binary_expression "((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)) ==\n      0" (parenthesized_expression "((byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode))" ( (binary_expression "(byte)aEntry_44558[lVar12 * 4 + 2] & 1 & (*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)" (binary_expression "(byte)aEntry_44558[lVar12 * 4 + 2] & 1" (cast_expression "(byte)aEntry_44558[lVar12 * 4 + 2]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "aEntry_44558[lVar12 * 4 + 2]" identifier [ (binary_expression "lVar12 * 4 + 2" (binary_expression "lVar12 * 4" identifier * number_literal) + number_literal) ])) & number_literal) & (parenthesized_expression "(*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode)" ( (binary_expression "*(ushort *)(aEntry_44558 + lVar12 * 4) ^ iCode" (pointer_expression "*(ushort *)(aEntry_44558 + lVar12 * 4)" * (cast_expression "(ushort *)(aEntry_44558 + lVar12 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(aEntry_44558 + lVar12 * 4)" ( (binary_expression "aEntry_44558 + lVar12 * 4" identifier + (binary_expression "lVar12 * 4" identifier * number_literal)) )))) ^ identifier) ))) )) == number_literal) ))) )) (compound_statement "{\n    iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;\n    if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }\njoined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }\n  }" { (expression_statement "iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff;" (assignment_expression "iCode = *(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff" identifier = (binary_expression "*(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode\n            & 0xffff" (binary_expression "*(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2) + iCode" (pointer_expression "*(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2)" * (cast_expression "(ushort *)(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2)" ( (binary_expression "aiOff_44559 + (ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2" identifier + (binary_expression "(ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1) * 2" (call_expression "(ulong)((byte)aEntry_44558[lVar12 * 4 + 2] >> 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((byte)aEntry_44558[lVar12 * 4 + 2] >> 1)" ( (binary_expression "(byte)aEntry_44558[lVar12 * 4 + 2] >> 1" (cast_expression "(byte)aEntry_44558[lVar12 * 4 + 2]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "aEntry_44558[lVar12 * 4 + 2]" identifier [ (binary_expression "lVar12 * 4 + 2" (binary_expression "lVar12 * 4" identifier * number_literal) + number_literal) ])) >> number_literal) ))) * number_literal)) )))) + identifier) & number_literal)) ;) (if_statement "if (iVar5 != 0) {\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));\n    }" { (labeled_statement "LAB_0015d679:\n      iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));" statement_identifier : (expression_statement "iCode = remove_diacritic(iCode,(uint)(iVar5 == 2));" (assignment_expression "iCode = remove_diacritic(iCode,(uint)(iVar5 == 2))" identifier = (call_expression "remove_diacritic(iCode,(uint)(iVar5 == 2))" identifier (argument_list "(iCode,(uint)(iVar5 == 2))" ( identifier , (call_expression "(uint)(iVar5 == 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 == 2)" ( (binary_expression "iVar5 == 2" identifier == number_literal) ))) )))) ;)) })) (labeled_statement "joined_r0x0015d68b:\n    if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }" statement_identifier : (if_statement "if (iCode != 0) {\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }" if (parenthesized_expression "(iCode != 0)" ( (binary_expression "iCode != 0" identifier != number_literal) )) (compound_statement "{\n      if (0x7f < (int)iCode) goto LAB_0015d868;\n      *(char *)&psVar14->pModule = (char)iCode;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);\n    }" { (if_statement "if (0x7f < (int)iCode) goto LAB_0015d868;" if (parenthesized_expression "(0x7f < (int)iCode)" ( (binary_expression "0x7f < (int)iCode" number_literal < (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0015d868;" goto statement_identifier ;)) (expression_statement "*(char *)&psVar14->pModule = (char)iCode;" (assignment_expression "*(char *)&psVar14->pModule = (char)iCode" (pointer_expression "*(char *)&psVar14->pModule" * (cast_expression "(char *)&psVar14->pModule" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier)))) = (cast_expression "(char)iCode" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 1)" identifier = (cast_expression "(sqlite3_tokenizer *)((long)&psVar14->pModule + 1)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 1)" ( (binary_expression "(long)&psVar14->pModule + 1" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) ;) }))) }) (else_clause "else {\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }" else (compound_statement "{\n    if (iVar5 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;\n    bVar2 = (byte)((int)iCode >> 6);\n    if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }\n  }" { (if_statement "if (iVar5 != 0) goto LAB_0015d679;" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d679;" goto statement_identifier ;)) (labeled_statement "LAB_0015d868:\n    cVar9 = ((byte)iCode & 0x3f) + 0x80;" statement_identifier : (expression_statement "cVar9 = ((byte)iCode & 0x3f) + 0x80;" (assignment_expression "cVar9 = ((byte)iCode & 0x3f) + 0x80" identifier = (binary_expression "((byte)iCode & 0x3f) + 0x80" (parenthesized_expression "((byte)iCode & 0x3f)" ( (binary_expression "(byte)iCode & 0x3f" (cast_expression "(byte)iCode" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;)) (expression_statement "bVar2 = (byte)((int)iCode >> 6);" (assignment_expression "bVar2 = (byte)((int)iCode >> 6)" identifier = (call_expression "(byte)((int)iCode >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)iCode >> 6)" ( (binary_expression "(int)iCode >> 6" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)iCode < 0x800) {\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }\n    else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }" if (parenthesized_expression "((int)iCode < 0x800)" ( (binary_expression "(int)iCode < 0x800" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      *(char *)((long)&psVar14->pModule + 1) = cVar9;\n      *(byte *)&psVar14->pModule = bVar2 - 0x40;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);\n    }" { (expression_statement "*(char *)((long)&psVar14->pModule + 1) = cVar9;" (assignment_expression "*(char *)((long)&psVar14->pModule + 1) = cVar9" (pointer_expression "*(char *)((long)&psVar14->pModule + 1)" * (cast_expression "(char *)((long)&psVar14->pModule + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 1)" ( (binary_expression "(long)&psVar14->pModule + 1" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "*(byte *)&psVar14->pModule = bVar2 - 0x40;" (assignment_expression "*(byte *)&psVar14->pModule = bVar2 - 0x40" (pointer_expression "*(byte *)&psVar14->pModule" * (cast_expression "(byte *)&psVar14->pModule" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier)))) = (binary_expression "bVar2 - 0x40" identifier - number_literal)) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 2)" identifier = (cast_expression "(sqlite3_tokenizer *)((long)&psVar14->pModule + 2)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 2)" ( (binary_expression "(long)&psVar14->pModule + 2" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) ;) }) (else_clause "else if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }" else (if_statement "if ((int)iCode < 0x10000) {\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }\n    else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }" if (parenthesized_expression "((int)iCode < 0x10000)" ( (binary_expression "(int)iCode < 0x10000" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      *(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;\n      *(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;\n      *(char *)((long)&psVar14->pModule + 2) = cVar9;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);\n    }" { (expression_statement "*(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80;" (assignment_expression "*(byte *)((long)&psVar14->pModule + 1) = (bVar2 & 0x3f) + 0x80" (pointer_expression "*(byte *)((long)&psVar14->pModule + 1)" * (cast_expression "(byte *)((long)&psVar14->pModule + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 1)" ( (binary_expression "(long)&psVar14->pModule + 1" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = (binary_expression "(bVar2 & 0x3f) + 0x80" (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )) + number_literal)) ;) (expression_statement "*(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20;" (assignment_expression "*(char *)&psVar14->pModule = (char)((int)iCode >> 0xc) + -0x20" (pointer_expression "*(char *)&psVar14->pModule" * (cast_expression "(char *)&psVar14->pModule" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier)))) = (binary_expression "(char)((int)iCode >> 0xc) + -0x20" (cast_expression "(char)((int)iCode >> 0xc)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)iCode >> 0xc)" ( (binary_expression "(int)iCode >> 0xc" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + number_literal)) ;) (expression_statement "*(char *)((long)&psVar14->pModule + 2) = cVar9;" (assignment_expression "*(char *)((long)&psVar14->pModule + 2) = cVar9" (pointer_expression "*(char *)((long)&psVar14->pModule + 2)" * (cast_expression "(char *)((long)&psVar14->pModule + 2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 2)" ( (binary_expression "(long)&psVar14->pModule + 2" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = identifier) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 3)" identifier = (cast_expression "(sqlite3_tokenizer *)((long)&psVar14->pModule + 3)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 3)" ( (binary_expression "(long)&psVar14->pModule + 3" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) ;) }) (else_clause "else {\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }" else (compound_statement "{\nLAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;\n      *(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;\n      *(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;\n      psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);\n    }" { (labeled_statement "LAB_0015d817:\n      *(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;" statement_identifier : (expression_statement "*(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10;" (assignment_expression "*(byte *)&psVar14->pModule = ((byte)((int)iCode >> 0x12) & 7) - 0x10" (pointer_expression "*(byte *)&psVar14->pModule" * (cast_expression "(byte *)&psVar14->pModule" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier)))) = (binary_expression "((byte)((int)iCode >> 0x12) & 7) - 0x10" (parenthesized_expression "((byte)((int)iCode >> 0x12) & 7)" ( (binary_expression "(byte)((int)iCode >> 0x12) & 7" (call_expression "(byte)((int)iCode >> 0x12)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)iCode >> 0x12)" ( (binary_expression "(int)iCode >> 0x12" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) - number_literal)) ;)) (expression_statement "*(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80;" (assignment_expression "*(byte *)((long)&psVar14->pModule + 1) = ((byte)((int)iCode >> 0xc) & 0x3f) + 0x80" (pointer_expression "*(byte *)((long)&psVar14->pModule + 1)" * (cast_expression "(byte *)((long)&psVar14->pModule + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 1)" ( (binary_expression "(long)&psVar14->pModule + 1" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = (binary_expression "((byte)((int)iCode >> 0xc) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)iCode >> 0xc) & 0x3f)" ( (binary_expression "(byte)((int)iCode >> 0xc) & 0x3f" (call_expression "(byte)((int)iCode >> 0xc)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)iCode >> 0xc)" ( (binary_expression "(int)iCode >> 0xc" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "*(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80;" (assignment_expression "*(byte *)((long)&psVar14->pModule + 3) = ((byte)iCode & 0x3f) + 0x80" (pointer_expression "*(byte *)((long)&psVar14->pModule + 3)" * (cast_expression "(byte *)((long)&psVar14->pModule + 3)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 3)" ( (binary_expression "(long)&psVar14->pModule + 3" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = (binary_expression "((byte)iCode & 0x3f) + 0x80" (parenthesized_expression "((byte)iCode & 0x3f)" ( (binary_expression "(byte)iCode & 0x3f" (cast_expression "(byte)iCode" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;) (expression_statement "*(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80;" (assignment_expression "*(byte *)((long)&psVar14->pModule + 2) = ((byte)((int)iCode >> 6) & 0x3f) + 0x80" (pointer_expression "*(byte *)((long)&psVar14->pModule + 2)" * (cast_expression "(byte *)((long)&psVar14->pModule + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 2)" ( (binary_expression "(long)&psVar14->pModule + 2" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) = (binary_expression "((byte)((int)iCode >> 6) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)iCode >> 6) & 0x3f)" ( (binary_expression "(byte)((int)iCode >> 6) & 0x3f" (call_expression "(byte)((int)iCode >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)iCode >> 6)" ( (binary_expression "(int)iCode >> 6" (cast_expression "(int)iCode" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4);" (assignment_expression "psVar14 = (sqlite3_tokenizer *)((long)&psVar14->pModule + 4)" identifier = (cast_expression "(sqlite3_tokenizer *)((long)&psVar14->pModule + 4)" ( (type_descriptor "sqlite3_tokenizer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&psVar14->pModule + 4)" ( (binary_expression "(long)&psVar14->pModule + 4" (cast_expression "(long)&psVar14->pModule" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&psVar14->pModule" & (field_expression "psVar14->pModule" identifier -> field_identifier))) + number_literal) )))) ;) }))))) }))) (labeled_statement "LAB_0015d585:\n  iVar5 = (int)pbVar8;" statement_identifier : (expression_statement "iVar5 = (int)pbVar8;" (assignment_expression "iVar5 = (int)pbVar8" identifier = (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar8) goto LAB_0015d76e;" if (parenthesized_expression "(pbVar1 <= pbVar8)" ( (binary_expression "pbVar1 <= pbVar8" identifier <= identifier) )) (goto_statement "goto LAB_0015d76e;" goto statement_identifier ;)) (expression_statement "iCode = (uint)*pbVar8;" (assignment_expression "iCode = (uint)*pbVar8" identifier = (binary_expression "(uint)*pbVar8" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar13 = pbVar8 + 1;" (assignment_expression "pbVar13 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (if_statement "if (iCode < 0xc0) {\n    iVar6 = unicodeIsAlnum(p,iCode);\njoined_r0x0015d5b2:\n    pbVar8 = pbVar13;\n    if (iVar6 == 0) goto LAB_0015d760;\n  }\n  else {\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }" if (parenthesized_expression "(iCode < 0xc0)" ( (binary_expression "iCode < 0xc0" identifier < number_literal) )) (compound_statement "{\n    iVar6 = unicodeIsAlnum(p,iCode);\njoined_r0x0015d5b2:\n    pbVar8 = pbVar13;\n    if (iVar6 == 0) goto LAB_0015d760;\n  }" { (expression_statement "iVar6 = unicodeIsAlnum(p,iCode);" (assignment_expression "iVar6 = unicodeIsAlnum(p,iCode)" identifier = (call_expression "unicodeIsAlnum(p,iCode)" identifier (argument_list "(p,iCode)" ( identifier , identifier )))) ;) (labeled_statement "joined_r0x0015d5b2:\n    pbVar8 = pbVar13;" statement_identifier : (expression_statement "pbVar8 = pbVar13;" (assignment_expression "pbVar8 = pbVar13" identifier = identifier) ;)) (if_statement "if (iVar6 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) }) (else_clause "else {\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }" else (compound_statement "{\n    iCode = (uint)""[iCode - 0xc0];\n    if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar6 = unicodeIsAlnum(p,0xfffd);\n    if (iVar6 == 0) goto LAB_0015d760;\n    iCode = 0xfffd;\n    pbVar8 = pbVar13;\n  }" { (expression_statement "iCode = (uint)""[iCode - 0xc0];" (assignment_expression "iCode = (uint)""[iCode - 0xc0]" identifier = (cast_expression "(uint)""[iCode - 0xc0]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression """[iCode - 0xc0]" (string_literal """" " ") [ (binary_expression "iCode - 0xc0" identifier - number_literal) ]))) ;) (if_statement "if ((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }" if (parenthesized_expression "((pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar13) || (bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar13)" ( (binary_expression "pbVar1 == pbVar13" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar8[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar8[1]" identifier = (subscript_expression "pbVar8[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      if (0x7f < iCode) goto LAB_0015d72b;\n    }" { (if_statement "if (0x7f < iCode) goto LAB_0015d72b;" if (parenthesized_expression "(0x7f < iCode)" ( (binary_expression "0x7f < iCode" number_literal < identifier) )) (goto_statement "goto LAB_0015d72b;" goto statement_identifier ;)) }) (else_clause "else {\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }" else (compound_statement "{\n      do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }\n    }" { (do_statement "do {\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar13 = pbVar13 + 1;\n        iCode = iCode * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar13) break;\n        bVar2 = *pbVar13;\n      }" { (expression_statement "pbVar13 = pbVar13 + 1;" (assignment_expression "pbVar13 = pbVar13 + 1" identifier = (binary_expression "pbVar13 + 1" identifier + number_literal)) ;) (expression_statement "iCode = iCode * 0x40 + (bVar2 & 0x3f);" (assignment_expression "iCode = iCode * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "iCode * 0x40 + (bVar2 & 0x3f)" (binary_expression "iCode * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar13) break;" if (parenthesized_expression "(pbVar1 == pbVar13)" ( (binary_expression "pbVar1 == pbVar13" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar13;" (assignment_expression "bVar2 = *pbVar13" identifier = (pointer_expression "*pbVar13" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }" if (parenthesized_expression "(((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)) && ((iCode & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < iCode) && ((iCode & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < iCode)" ( (binary_expression "0x7f < iCode" number_literal < identifier) )) && (parenthesized_expression "((iCode & 0xfffff800) != 0xd800)" ( (binary_expression "(iCode & 0xfffff800) != 0xd800" (parenthesized_expression "(iCode & 0xfffff800)" ( (binary_expression "iCode & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((iCode & 0xfffffffe) != 0xfffe)" ( (binary_expression "(iCode & 0xfffffffe) != 0xfffe" (parenthesized_expression "(iCode & 0xfffffffe)" ( (binary_expression "iCode & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\nLAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);\n        pbVar8 = pbVar13;\n        if (iVar6 != 0) goto LAB_0015d5b8;\n        if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }\n        iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);\n        goto joined_r0x0015d5b2;\n      }" { (labeled_statement "LAB_0015d72b:\n        iVar6 = unicodeIsAlnum(p,iCode);" statement_identifier : (expression_statement "iVar6 = unicodeIsAlnum(p,iCode);" (assignment_expression "iVar6 = unicodeIsAlnum(p,iCode)" identifier = (call_expression "unicodeIsAlnum(p,iCode)" identifier (argument_list "(p,iCode)" ( identifier , identifier )))) ;)) (expression_statement "pbVar8 = pbVar13;" (assignment_expression "pbVar8 = pbVar13" identifier = identifier) ;) (if_statement "if (iVar6 != 0) goto LAB_0015d5b8;" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d5b8;" goto statement_identifier ;)) (if_statement "if (0x31 < iCode - 0x300) {\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }" if (parenthesized_expression "(0x31 < iCode - 0x300)" ( (binary_expression "0x31 < iCode - 0x300" number_literal < (binary_expression "iCode - 0x300" identifier - number_literal)) )) (compound_statement "{\nLAB_0015d760:\n          iVar6 = (int)pbVar13;\nLAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;\n          *(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;\n          *paToken = (char *)psVar7;\n          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;\n          *piStart = (int)pbVar4 - (int)pC[1].pTokenizer;\n          *piEnd = iVar5 - (int)pC[1].pTokenizer;\n          iVar5 = *(int *)&pC[3].pTokenizer;\n          *(int *)&pC[3].pTokenizer = iVar5 + 1;\n          *piPos = iVar5;\n          return 0;\n        }" { (labeled_statement "LAB_0015d760:\n          iVar6 = (int)pbVar13;" statement_identifier : (expression_statement "iVar6 = (int)pbVar13;" (assignment_expression "iVar6 = (int)pbVar13" identifier = (cast_expression "(int)pbVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (labeled_statement "LAB_0015d76e:\n          psVar7 = pC[4].pTokenizer;" statement_identifier : (expression_statement "psVar7 = pC[4].pTokenizer;" (assignment_expression "psVar7 = pC[4].pTokenizer" identifier = (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier)) ;)) (expression_statement "*(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer;" (assignment_expression "*(int *)((long)&pC[2].pTokenizer + 4) = iVar6 - (int)pC[1].pTokenizer" (pointer_expression "*(int *)((long)&pC[2].pTokenizer + 4)" * (cast_expression "(int *)((long)&pC[2].pTokenizer + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pC[2].pTokenizer + 4)" ( (binary_expression "(long)&pC[2].pTokenizer + 4" (cast_expression "(long)&pC[2].pTokenizer" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pC[2].pTokenizer" & (field_expression "pC[2].pTokenizer" (subscript_expression "pC[2]" identifier [ number_literal ]) . field_identifier))) + number_literal) )))) = (binary_expression "iVar6 - (int)pC[1].pTokenizer" identifier - (cast_expression "(int)pC[1].pTokenizer" ( (type_descriptor "int" primitive_type) ) (field_expression "pC[1].pTokenizer" (subscript_expression "pC[1]" identifier [ number_literal ]) . field_identifier)))) ;) (expression_statement "*paToken = (char *)psVar7;" (assignment_expression "*paToken = (char *)psVar7" (pointer_expression "*paToken" * identifier) = (cast_expression "(char *)psVar7" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "*pnToken = (int)psVar14 - (int)pC[4].pTokenizer;" (assignment_expression "*pnToken = (int)psVar14 - (int)pC[4].pTokenizer" (pointer_expression "*pnToken" * identifier) = (binary_expression "(int)psVar14 - (int)pC[4].pTokenizer" (cast_expression "(int)psVar14" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pC[4].pTokenizer" ( (type_descriptor "int" primitive_type) ) (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier)))) ;) (expression_statement "*piStart = (int)pbVar4 - (int)pC[1].pTokenizer;" (assignment_expression "*piStart = (int)pbVar4 - (int)pC[1].pTokenizer" (pointer_expression "*piStart" * identifier) = (binary_expression "(int)pbVar4 - (int)pC[1].pTokenizer" (cast_expression "(int)pbVar4" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pC[1].pTokenizer" ( (type_descriptor "int" primitive_type) ) (field_expression "pC[1].pTokenizer" (subscript_expression "pC[1]" identifier [ number_literal ]) . field_identifier)))) ;) (expression_statement "*piEnd = iVar5 - (int)pC[1].pTokenizer;" (assignment_expression "*piEnd = iVar5 - (int)pC[1].pTokenizer" (pointer_expression "*piEnd" * identifier) = (binary_expression "iVar5 - (int)pC[1].pTokenizer" identifier - (cast_expression "(int)pC[1].pTokenizer" ( (type_descriptor "int" primitive_type) ) (field_expression "pC[1].pTokenizer" (subscript_expression "pC[1]" identifier [ number_literal ]) . field_identifier)))) ;) (expression_statement "iVar5 = *(int *)&pC[3].pTokenizer;" (assignment_expression "iVar5 = *(int *)&pC[3].pTokenizer" identifier = (pointer_expression "*(int *)&pC[3].pTokenizer" * (cast_expression "(int *)&pC[3].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[3].pTokenizer" & (field_expression "pC[3].pTokenizer" (subscript_expression "pC[3]" identifier [ number_literal ]) . field_identifier))))) ;) (expression_statement "*(int *)&pC[3].pTokenizer = iVar5 + 1;" (assignment_expression "*(int *)&pC[3].pTokenizer = iVar5 + 1" (pointer_expression "*(int *)&pC[3].pTokenizer" * (cast_expression "(int *)&pC[3].pTokenizer" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pC[3].pTokenizer" & (field_expression "pC[3].pTokenizer" (subscript_expression "pC[3]" identifier [ number_literal ]) . field_identifier)))) = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (expression_statement "*piPos = iVar5;" (assignment_expression "*piPos = iVar5" (pointer_expression "*piPos" * identifier) = identifier) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode);" (assignment_expression "iVar6 = sqlite3FtsUnicodeIsdiacritic(iCode)" identifier = (call_expression "sqlite3FtsUnicodeIsdiacritic(iCode)" identifier (argument_list "(iCode)" ( identifier )))) ;) (goto_statement "goto joined_r0x0015d5b2;" goto statement_identifier ;) })) }))) (expression_statement "iVar6 = unicodeIsAlnum(p,0xfffd);" (assignment_expression "iVar6 = unicodeIsAlnum(p,0xfffd)" identifier = (call_expression "unicodeIsAlnum(p,0xfffd)" identifier (argument_list "(p,0xfffd)" ( identifier , number_literal )))) ;) (if_statement "if (iVar6 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) (expression_statement "iCode = 0xfffd;" (assignment_expression "iCode = 0xfffd" identifier = number_literal) ;) (expression_statement "pbVar8 = pbVar13;" (assignment_expression "pbVar8 = pbVar13" identifier = identifier) ;) }))) (labeled_statement "LAB_0015d5b8:\n  psVar7 = pC[4].pTokenizer;" statement_identifier : (expression_statement "psVar7 = pC[4].pTokenizer;" (assignment_expression "psVar7 = pC[4].pTokenizer" identifier = (field_expression "pC[4].pTokenizer" (subscript_expression "pC[4]" identifier [ number_literal ]) . field_identifier)) ;)) (goto_statement "goto LAB_0015d531;" goto statement_identifier ;) })))
(translation_unit "undefined8\nFUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}\n\n" (function_definition "undefined8\nFUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" type_identifier (function_declarator "FUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" identifier (parameter_list "(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "int *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "int *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "char cVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "char *pcVar14;" primitive_type (pointer_declarator "*pcVar14" * identifier) ;) (declaration "byte *pbVar15;" type_identifier (pointer_declarator "*pbVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (expression_statement "lVar3 = *param_1;" (assignment_expression "lVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);" (assignment_expression "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2])" identifier = (cast_expression "(byte *)(param_1[1] + (long)(int)param_1[2])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[1] + (long)(int)param_1[2])" ( (binary_expression "param_1[1] + (long)(int)param_1[2]" (subscript_expression "param_1[1]" identifier [ number_literal ]) + (cast_expression "(long)(int)param_1[2]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_1[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[2]" identifier [ number_literal ])))) )))) ;) (expression_statement "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);" (assignment_expression "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" identifier = (cast_expression "(byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)*(int *)((long)param_1 + 0x14) + param_1[1])" ( (binary_expression "(long)*(int *)((long)param_1 + 0x14) + param_1[1]" (cast_expression "(long)*(int *)((long)param_1 + 0x14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)((long)param_1 + 0x14)" * (cast_expression "(int *)((long)param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x14)" ( (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) + (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (do_statement "do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);" do (compound_statement "{\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  }" { (expression_statement "pbVar5 = pbVar10;" (assignment_expression "pbVar5 = pbVar10" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }" if (parenthesized_expression "(pbVar1 <= pbVar5)" ( (binary_expression "pbVar1 <= pbVar5" identifier <= identifier) )) (compound_statement "{\n      return 0x65;\n    }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" identifier = (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar10 = pbVar5 + 1;" (assignment_expression "pbVar10 = pbVar5 + 1" identifier = (binary_expression "pbVar5 + 1" identifier + number_literal)) ;) (if_statement "if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" if (parenthesized_expression "(*pbVar5 < 0xc0)" ( (binary_expression "*pbVar5 < 0xc0" (pointer_expression "*pbVar5" * identifier) < number_literal) )) (compound_statement "{\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }" { (labeled_statement "LAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);" statement_identifier : (expression_statement "iVar6 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar6 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;)) }) (else_clause "else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" else (compound_statement "{\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" { (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" identifier = (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&DAT_001f5520)" ( (pointer_expression "&DAT_001f5520" & identifier) ))) [ (binary_expression "uVar7 - 0xc0" identifier - number_literal) ])) ;) (if_statement "if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" if (parenthesized_expression "((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar10)" ( (binary_expression "pbVar1 == pbVar10" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar5[1]" identifier = (subscript_expression "pbVar5[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" { (if_statement "if (uVar7 < 0x80) goto LAB_0015d4fa;" if (parenthesized_expression "(uVar7 < 0x80)" ( (binary_expression "uVar7 < 0x80" identifier < number_literal) )) (goto_statement "goto LAB_0015d4fa;" goto statement_identifier ;)) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;) })) (do_statement "do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      }" { (expression_statement "pbVar10 = pbVar10 + 1;" (assignment_expression "pbVar10 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar10) break;" if (parenthesized_expression "(pbVar1 == pbVar10)" ( (binary_expression "pbVar1 == pbVar10" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar10;" (assignment_expression "bVar2 = *pbVar10" identifier = (pointer_expression "*pbVar10" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;" if (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) && (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" ( (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" ( (binary_expression "uVar7 & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" ( (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" ( (binary_expression "uVar7 & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (goto_statement "goto LAB_0015d452;" goto statement_identifier ;)) (labeled_statement "LAB_0015d4fa:\n      uVar7 = 0xfffd;" statement_identifier : (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" identifier = number_literal) ;)) (expression_statement "iVar6 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar6 = FUN_00126290(lVar3,0xfffd)" identifier = (call_expression "FUN_00126290(lVar3,0xfffd)" identifier (argument_list "(lVar3,0xfffd)" ( identifier , number_literal )))) ;) }))) }) while (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) ;) (if_statement "if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }" if (parenthesized_expression "(pbVar1 <= pbVar5)" ( (binary_expression "pbVar1 <= pbVar5" identifier <= identifier) )) (compound_statement "{\n    return 0x65;\n  }" { (return_statement "return 0x65;" return number_literal ;) })) (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" identifier = (cast_expression "(char *)param_1[4]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "pcVar16 = pcVar14;" (assignment_expression "pcVar16 = pcVar14" identifier = identifier) ;) (labeled_statement "LAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" statement_identifier : (if_statement "if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" if (parenthesized_expression "((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14)" ( (binary_expression "(long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14" (cast_expression "(long)((int)param_1[5] + -4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)param_1[5] + -4)" ( (binary_expression "(int)param_1[5] + -4" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal) ))) <= (binary_expression "(long)pcVar16 - (long)pcVar14" (cast_expression "(long)pcVar16" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pcVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) )) (compound_statement "{\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" { (expression_statement "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));" (assignment_expression "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" identifier = (call_expression "FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" identifier (argument_list "(pcVar14,(long)((int)param_1[5] + 0x40))" ( identifier , (cast_expression "(long)((int)param_1[5] + 0x40)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((int)param_1[5] + 0x40)" ( (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal) ))) )))) ;) (if_statement "if (lVar9 == 0) {\n      return 7;\n    }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      return 7;\n    }" { (return_statement "return 7;" return number_literal ;) })) (expression_statement "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40;" (assignment_expression "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40" (pointer_expression "*(int *)(param_1 + 5)" * (cast_expression "(int *)(param_1 + 5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 5)" ( (binary_expression "param_1 + 5" identifier + number_literal) )))) = (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) + number_literal)) ;) (expression_statement "lVar4 = param_1[4];" (assignment_expression "lVar4 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "param_1[4] = lVar9;" (assignment_expression "param_1[4] = lVar9" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar16 = pcVar16 + (lVar9 - lVar4);" (assignment_expression "pcVar16 = pcVar16 + (lVar9 - lVar4)" identifier = (binary_expression "pcVar16 + (lVar9 - lVar4)" identifier + (parenthesized_expression "(lVar9 - lVar4)" ( (binary_expression "lVar9 - lVar4" identifier - identifier) )))) ;) }))) (if_statement "if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" if (parenthesized_expression "(0x7f < (int)uVar7)" ( (binary_expression "0x7f < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" { (if_statement "if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" if (parenthesized_expression "((int)uVar7 < 0x10000)" ( (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" { (expression_statement "uVar12 = 0x3f1;" (assignment_expression "uVar12 = 0x3f1" identifier = number_literal) ;) (expression_statement "lVar9 = -1;" (assignment_expression "lVar9 = -1" identifier = number_literal) ;) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "iVar6 = 0xa2;" (assignment_expression "iVar6 = 0xa2" identifier = number_literal) ;) (expression_statement "iVar8 = 0xa2;" (assignment_expression "iVar8 = 0xa2" identifier = number_literal) ;) (do_statement "do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );" do (compound_statement "{\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      }" { (expression_statement "iVar8 = iVar8 >> 1;" (assignment_expression "iVar8 = iVar8 >> 1" identifier = (binary_expression "iVar8 >> 1" identifier >> number_literal)) ;) (if_statement "if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" if (parenthesized_expression "((int)(uVar7 - uVar12) < 0)" ( (binary_expression "(int)(uVar7 - uVar12) < 0" (cast_expression "(int)(uVar7 - uVar12)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 - uVar12)" ( (binary_expression "uVar7 - uVar12" identifier - identifier) ))) < number_literal) )) (compound_statement "{\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" { (expression_statement "iVar6 = iVar8 + -1;" (assignment_expression "iVar6 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" if (parenthesized_expression "(iVar6 < iVar13)" ( (binary_expression "iVar6 < iVar13" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }) (else_clause "else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" else (compound_statement "{\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" { (expression_statement "iVar13 = iVar8 + 1;" (assignment_expression "iVar13 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "lVar9 = (long)iVar8;" (assignment_expression "lVar9 = (long)iVar8" identifier = (cast_expression "(long)iVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" if (parenthesized_expression "(iVar6 < iVar13)" ( (binary_expression "iVar6 < iVar13" identifier < identifier) )) (goto_statement "goto LAB_0015d620;" goto statement_identifier ;)) }))) (expression_statement "iVar8 = iVar6 + iVar13;" (assignment_expression "iVar8 = iVar6 + iVar13" identifier = (binary_expression "iVar6 + iVar13" identifier + identifier)) ;) (expression_statement "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);" (assignment_expression "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" identifier = (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" ( (binary_expression "&DAT_001ef220 + (long)(iVar8 >> 1) * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "(long)(iVar8 >> 1) * 4" (cast_expression "(long)(iVar8 >> 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar8 >> 1)" ( (binary_expression "iVar8 >> 1" identifier >> number_literal) ))) * number_literal)) ))))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }" if (parenthesized_expression "(uVar7 - 0x10400 < 0x28)" ( (binary_expression "uVar7 - 0x10400 < 0x28" (binary_expression "uVar7 - 0x10400" identifier - number_literal) < number_literal) )) (compound_statement "{\n      uVar7 = uVar7 + 0x28;\n    }" { (expression_statement "uVar7 = uVar7 + 0x28;" (assignment_expression "uVar7 = uVar7 + 0x28" identifier = (binary_expression "uVar7 + 0x28" identifier + number_literal)) ;) })) (goto_statement "goto LAB_0015d817;" goto statement_identifier ;) })) (if_statement "if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" if (parenthesized_expression "(uVar7 - 0x41 < 0x1a)" ( (binary_expression "uVar7 - 0x41 < 0x1a" (binary_expression "uVar7 - 0x41" identifier - number_literal) < number_literal) )) (compound_statement "{\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" { (expression_statement "uVar7 = uVar7 + 0x20;" (assignment_expression "uVar7 = uVar7 + 0x20" identifier = (binary_expression "uVar7 + 0x20" identifier + number_literal)) ;) (goto_statement "goto joined_r0x0015d68b;" goto statement_identifier ;) })) (if_statement "if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" { (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" * identifier) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" identifier = (binary_expression "pcVar16 + 1" identifier + number_literal)) ;) })) (goto_statement "goto LAB_0015d585;" goto statement_identifier ;) (labeled_statement "LAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);" statement_identifier : (expression_statement "iVar6 = *(int *)(lVar3 + 8);" (assignment_expression "iVar6 = *(int *)(lVar3 + 8)" identifier = (pointer_expression "*(int *)(lVar3 + 8)" * (cast_expression "(int *)(lVar3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) ;)) (if_statement "if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" if (parenthesized_expression "(((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0))" ( (binary_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" (parenthesized_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))" ( (binary_expression "(int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" ( (binary_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (subscript_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4]" (call_expression "(uint)(byte)(&UNK_001ef223)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&UNK_001ef223)" ( (pointer_expression "&UNK_001ef223" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) + (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" ( (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "lVar9 * 4" identifier * number_literal)) ))))) )))) )) && (parenthesized_expression "(((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" ( (binary_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0" (parenthesized_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))" ( (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&UNK_001ef222)" ( (pointer_expression "&UNK_001ef222" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) & number_literal) & (parenthesized_expression "(*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" ( (binary_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7" (pointer_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4)" * (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" ( (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" & identifier) + (binary_expression "lVar9 * 4" identifier * number_literal)) )))) ^ identifier) ))) )) == number_literal) ))) )) (compound_statement "{\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }" { (expression_statement "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;" (assignment_expression "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" identifier = (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7" (pointer_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" * (cast_expression "(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" ( (binary_expression "&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (pointer_expression "&DAT_001ef180" & identifier) + (binary_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (call_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" ( (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] >> 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&UNK_001ef222)" ( (pointer_expression "&UNK_001ef222" & identifier) ))) [ (binary_expression "lVar9 * 4" identifier * number_literal) ]) >> number_literal) ))) * number_literal)) )))) + identifier) & number_literal)) ;) (if_statement "if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" { (labeled_statement "LAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);" statement_identifier : (expression_statement "uVar7 = FUN_00114260(uVar7,iVar6 == 2);" (assignment_expression "uVar7 = FUN_00114260(uVar7,iVar6 == 2)" identifier = (call_expression "FUN_00114260(uVar7,iVar6 == 2)" identifier (argument_list "(uVar7,iVar6 == 2)" ( identifier , (binary_expression "iVar6 == 2" identifier == number_literal) )))) ;)) })) (labeled_statement "joined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" statement_identifier : (if_statement "if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" if (parenthesized_expression "(uVar7 != 0)" ( (binary_expression "uVar7 != 0" identifier != number_literal) )) (compound_statement "{\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" { (if_statement "if (0x7f < (int)uVar7) goto LAB_0015d868;" if (parenthesized_expression "(0x7f < (int)uVar7)" ( (binary_expression "0x7f < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0015d868;" goto statement_identifier ;)) (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" * identifier) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" identifier = (binary_expression "pcVar16 + 1" identifier + number_literal)) ;) }))) }) (else_clause "else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" else (compound_statement "{\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" { (if_statement "if (iVar6 != 0) goto LAB_0015d679;" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d679;" goto statement_identifier ;)) (labeled_statement "LAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" statement_identifier : (expression_statement "cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "cVar11 = ((byte)uVar7 & 0x3f) + 0x80" identifier = (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" ( (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;)) (expression_statement "bVar2 = (byte)((int)uVar7 >> 6);" (assignment_expression "bVar2 = (byte)((int)uVar7 >> 6)" identifier = (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 6)" ( (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" if (parenthesized_expression "((int)uVar7 < 0x800)" ( (binary_expression "(int)uVar7 < 0x800" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }" { (expression_statement "pcVar16[1] = cVar11;" (assignment_expression "pcVar16[1] = cVar11" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*pcVar16 = bVar2 - 0x40;" (assignment_expression "*pcVar16 = bVar2 - 0x40" (pointer_expression "*pcVar16" * identifier) = (binary_expression "bVar2 - 0x40" identifier - number_literal)) ;) (expression_statement "pcVar16 = pcVar16 + 2;" (assignment_expression "pcVar16 = pcVar16 + 2" identifier = (binary_expression "pcVar16 + 2" identifier + number_literal)) ;) }) (else_clause "else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" else (if_statement "if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" if (parenthesized_expression "((int)uVar7 < 0x10000)" ( (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }" { (expression_statement "pcVar16[1] = (bVar2 & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = (bVar2 & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = (binary_expression "(bVar2 & 0x3f) + 0x80" (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )) + number_literal)) ;) (expression_statement "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;" (assignment_expression "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20" (pointer_expression "*pcVar16" * identifier) = (binary_expression "(char)((int)uVar7 >> 0xc) + -0x20" (cast_expression "(char)((int)uVar7 >> 0xc)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((int)uVar7 >> 0xc)" ( (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) + number_literal)) ;) (expression_statement "pcVar16[2] = cVar11;" (assignment_expression "pcVar16[2] = cVar11" (subscript_expression "pcVar16[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pcVar16 = pcVar16 + 3;" (assignment_expression "pcVar16 = pcVar16 + 3" identifier = (binary_expression "pcVar16 + 3" identifier + number_literal)) ;) }) (else_clause "else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" else (compound_statement "{\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" { (labeled_statement "LAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" statement_identifier : (expression_statement "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" (assignment_expression "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (pointer_expression "*pcVar16" * identifier) = (binary_expression "((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (parenthesized_expression "((byte)((int)uVar7 >> 0x12) & 7)" ( (binary_expression "(byte)((int)uVar7 >> 0x12) & 7" (call_expression "(byte)((int)uVar7 >> 0x12)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 0x12)" ( (binary_expression "(int)uVar7 >> 0x12" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) - number_literal)) ;)) (expression_statement "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" identifier [ number_literal ]) = (binary_expression "((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 0xc) & 0x3f)" ( (binary_expression "(byte)((int)uVar7 >> 0xc) & 0x3f" (call_expression "(byte)((int)uVar7 >> 0xc)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 0xc)" ( (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80" (subscript_expression "pcVar16[3]" identifier [ number_literal ]) = (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" ( (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;" (assignment_expression "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (subscript_expression "pcVar16[2]" identifier [ number_literal ]) = (binary_expression "((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 6) & 0x3f)" ( (binary_expression "(byte)((int)uVar7 >> 6) & 0x3f" (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((int)uVar7 >> 6)" ( (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) & number_literal) )) + number_literal)) ;) (expression_statement "pcVar16 = pcVar16 + 4;" (assignment_expression "pcVar16 = pcVar16 + 4" identifier = (binary_expression "pcVar16 + 4" identifier + number_literal)) ;) }))))) }))) (labeled_statement "LAB_0015d585:\n  iVar6 = (int)pbVar10;" statement_identifier : (expression_statement "iVar6 = (int)pbVar10;" (assignment_expression "iVar6 = (int)pbVar10" identifier = (cast_expression "(int)pbVar10" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (expression_statement "iVar8 = iVar6;" (assignment_expression "iVar8 = iVar6" identifier = identifier) ;) (if_statement "if (pbVar1 <= pbVar10) goto LAB_0015d76e;" if (parenthesized_expression "(pbVar1 <= pbVar10)" ( (binary_expression "pbVar1 <= pbVar10" identifier <= identifier) )) (goto_statement "goto LAB_0015d76e;" goto statement_identifier ;)) (expression_statement "uVar7 = (uint)*pbVar10;" (assignment_expression "uVar7 = (uint)*pbVar10" identifier = (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar15 = pbVar10 + 1;" (assignment_expression "pbVar15 = pbVar10 + 1" identifier = (binary_expression "pbVar10 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" if (parenthesized_expression "(uVar7 < 0xc0)" ( (binary_expression "uVar7 < 0xc0" identifier < number_literal) )) (compound_statement "{\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }" { (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;) (labeled_statement "joined_r0x0015d5b2:\n    pbVar10 = pbVar15;" statement_identifier : (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;)) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" else (compound_statement "{\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" { (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" identifier = (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(&DAT_001f5520)" ( (pointer_expression "&DAT_001f5520" & identifier) ))) [ (binary_expression "uVar7 - 0xc0" identifier - number_literal) ])) ;) (if_statement "if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" if (parenthesized_expression "((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80))" ( (binary_expression "(pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar15)" ( (binary_expression "pbVar1 == pbVar15" identifier == identifier) )) || (parenthesized_expression "(bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" ( (comma_expression "bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar10[1]" identifier = (subscript_expression "pbVar10[1]" identifier [ number_literal ])) , (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }" { (if_statement "if (0x7f < uVar7) goto LAB_0015d72b;" if (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_0015d72b;" goto statement_identifier ;)) }) (else_clause "else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" else (compound_statement "{\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" { (do_statement "do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);" do (compound_statement "{\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      }" { (expression_statement "pbVar15 = pbVar15 + 1;" (assignment_expression "pbVar15 = pbVar15 + 1" identifier = (binary_expression "pbVar15 + 1" identifier + number_literal)) ;) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" identifier = (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" identifier * number_literal) + (parenthesized_expression "(bVar2 & 0x3f)" ( (binary_expression "bVar2 & 0x3f" identifier & number_literal) )))) ;) (if_statement "if (pbVar1 == pbVar15) break;" if (parenthesized_expression "(pbVar1 == pbVar15)" ( (binary_expression "pbVar1 == pbVar15" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "bVar2 = *pbVar15;" (assignment_expression "bVar2 = *pbVar15" identifier = (pointer_expression "*pbVar15" * identifier)) ;) }) while (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" ( (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" ( (binary_expression "bVar2 & 0xc0" identifier & number_literal) )) == number_literal) )) ;) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" if (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" ( (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" ( (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" ( (binary_expression "0x7f < uVar7" number_literal < identifier) )) && (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" ( (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" ( (binary_expression "uVar7 & 0xfffff800" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" ( (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" ( (binary_expression "uVar7 & 0xfffffffe" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" { (labeled_statement "LAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);" statement_identifier : (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" identifier = (call_expression "FUN_00126290(lVar3,uVar7)" identifier (argument_list "(lVar3,uVar7)" ( identifier , identifier )))) ;)) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;) (if_statement "if (iVar8 != 0) goto LAB_0015d5b8;" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0015d5b8;" goto statement_identifier ;)) (if_statement "if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" if (parenthesized_expression "(0x31 < uVar7 - 0x300)" ( (binary_expression "0x31 < uVar7 - 0x300" number_literal < (binary_expression "uVar7 - 0x300" identifier - number_literal)) )) (compound_statement "{\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" { (labeled_statement "LAB_0015d760:\n          iVar8 = (int)pbVar15;" statement_identifier : (expression_statement "iVar8 = (int)pbVar15;" (assignment_expression "iVar8 = (int)pbVar15" identifier = (cast_expression "(int)pbVar15" ( (type_descriptor "int" primitive_type) ) identifier)) ;)) (labeled_statement "LAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" statement_identifier : (expression_statement "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" (assignment_expression "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1]" (pointer_expression "*(int *)((long)param_1 + 0x14)" * (cast_expression "(int *)((long)param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x14)" ( (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "iVar8 - (int)param_1[1]" identifier - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;)) (expression_statement "*param_2 = param_1[4];" (assignment_expression "*param_2 = param_1[4]" (pointer_expression "*param_2" * identifier) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "*param_3 = (int)pcVar16 - (int)param_1[4];" (assignment_expression "*param_3 = (int)pcVar16 - (int)param_1[4]" (pointer_expression "*param_3" * identifier) = (binary_expression "(int)pcVar16 - (int)param_1[4]" (cast_expression "(int)pcVar16" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[4]" identifier [ number_literal ])))) ;) (expression_statement "*param_4 = (int)pbVar5 - (int)param_1[1];" (assignment_expression "*param_4 = (int)pbVar5 - (int)param_1[1]" (pointer_expression "*param_4" * identifier) = (binary_expression "(int)pbVar5 - (int)param_1[1]" (cast_expression "(int)pbVar5" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;) (expression_statement "*param_5 = iVar6 - (int)param_1[1];" (assignment_expression "*param_5 = iVar6 - (int)param_1[1]" (pointer_expression "*param_5" * identifier) = (binary_expression "iVar6 - (int)param_1[1]" identifier - (cast_expression "(int)param_1[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))) ;) (expression_statement "lVar3 = param_1[3];" (assignment_expression "lVar3 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (expression_statement "*(int *)(param_1 + 3) = (int)lVar3 + 1;" (assignment_expression "*(int *)(param_1 + 3) = (int)lVar3 + 1" (pointer_expression "*(int *)(param_1 + 3)" * (cast_expression "(int *)(param_1 + 3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 3)" ( (binary_expression "param_1 + 3" identifier + number_literal) )))) = (binary_expression "(int)lVar3 + 1" (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "*param_6 = (int)lVar3;" (assignment_expression "*param_6 = (int)lVar3" (pointer_expression "*param_6" * identifier) = (cast_expression "(int)lVar3" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar8 = FUN_001262e0(uVar7);" (assignment_expression "iVar8 = FUN_001262e0(uVar7)" identifier = (call_expression "FUN_001262e0(uVar7)" identifier (argument_list "(uVar7)" ( identifier )))) ;) (goto_statement "goto joined_r0x0015d5b2;" goto statement_identifier ;) })) }))) (expression_statement "iVar8 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar8 = FUN_00126290(lVar3,0xfffd)" identifier = (call_expression "FUN_00126290(lVar3,0xfffd)" identifier (argument_list "(lVar3,0xfffd)" ( identifier , number_literal )))) ;) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0015d760;" goto statement_identifier ;)) (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" identifier = number_literal) ;) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" identifier = identifier) ;) }))) (labeled_statement "LAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];" statement_identifier : (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" identifier = (cast_expression "(char *)param_1[4]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;)) (goto_statement "goto LAB_0015d531;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * 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) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) + (subscript_expression IDENT [ LIT ])) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression IDENT - LIT) ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) }))) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) + LIT) ))) <= (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) + LIT) ))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (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)) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) * LIT)) ))))) ;) }) while (parenthesized_expression ( BOOL )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression IDENT * LIT) ]) + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression IDENT * LIT)) ))))) )))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression IDENT * LIT) ]) & LIT) & (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression IDENT * LIT)) )))) ^ IDENT) ))) )) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression IDENT * LIT) ]) >> LIT) ))) * LIT)) )))) + IDENT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT == LIT) )))) ;)) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) + LIT)) ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT) )) - LIT)) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT) )) + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT) )) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))))) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression IDENT - LIT) ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;)) (goto_statement goto statement_identifier ;) })))
(function_definition "undefined8\nFUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)\n\n{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" (type_identifier "undefined8") (function_declarator "FUN_0015d3e0(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" (identifier "FUN_0015d3e0") (parameter_list "(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "int *param_5" (primitive_type "int") (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) (, ",") (parameter_declaration "int *param_6" (primitive_type "int") (pointer_declarator "*param_6" (* "*") (identifier "param_6"))) () ")"))) (compound_statement "{\n  byte *pbVar1;\n  byte bVar2;\n  long lVar3;\n  long lVar4;\n  byte *pbVar5;\n  int iVar6;\n  uint uVar7;\n  int iVar8;\n  long lVar9;\n  byte *pbVar10;\n  char cVar11;\n  uint uVar12;\n  int iVar13;\n  char *pcVar14;\n  byte *pbVar15;\n  char *pcVar16;\n  \n  lVar3 = *param_1;\n  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);\n  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);\n  do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);\n  if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }\n  pcVar14 = (char *)param_1[4];\n  pcVar16 = pcVar14;\nLAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }\n  if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }\n  if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }\n  if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }\n  goto LAB_0015d585;\nLAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);\n  if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }\nLAB_0015d585:\n  iVar6 = (int)pbVar10;\n  iVar8 = iVar6;\n  if (pbVar1 <= pbVar10) goto LAB_0015d76e;\n  uVar7 = (uint)*pbVar10;\n  pbVar15 = pbVar10 + 1;\n  if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }\nLAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];\n  goto LAB_0015d531;\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "byte *pbVar5;" (type_identifier "byte") (pointer_declarator "*pbVar5" (* "*") (identifier "pbVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "byte *pbVar10;" (type_identifier "byte") (pointer_declarator "*pbVar10" (* "*") (identifier "pbVar10")) (; ";")) (declaration "char cVar11;" (primitive_type "char") (identifier "cVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "char *pcVar14;" (primitive_type "char") (pointer_declarator "*pcVar14" (* "*") (identifier "pcVar14")) (; ";")) (declaration "byte *pbVar15;" (type_identifier "byte") (pointer_declarator "*pbVar15" (* "*") (identifier "pbVar15")) (; ";")) (declaration "char *pcVar16;" (primitive_type "char") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (expression_statement "lVar3 = *param_1;" (assignment_expression "lVar3 = *param_1" (identifier "lVar3") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);" (assignment_expression "pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2])" (identifier "pbVar1") (= "=") (cast_expression "(byte *)(param_1[1] + (long)(int)param_1[2])" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[1] + (long)(int)param_1[2])" (( "(") (binary_expression "param_1[1] + (long)(int)param_1[2]" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (+ "+") (cast_expression "(long)(int)param_1[2]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)param_1[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))))) () ")")))) (; ";")) (expression_statement "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);" (assignment_expression "pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" (identifier "pbVar10") (= "=") (cast_expression "(byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1])" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)*(int *)((long)param_1 + 0x14) + param_1[1])" (( "(") (binary_expression "(long)*(int *)((long)param_1 + 0x14) + param_1[1]" (cast_expression "(long)*(int *)((long)param_1 + 0x14)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)((long)param_1 + 0x14)" (* "*") (cast_expression "(int *)((long)param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x14)" (( "(") (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x14")) () ")"))))) (+ "+") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (do_statement "do {\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  } while (iVar6 == 0);" (do "do") (compound_statement "{\n    pbVar5 = pbVar10;\n    if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }\n    uVar7 = (uint)*pbVar5;\n    pbVar10 = pbVar5 + 1;\n    if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }\n  }" ({ "{") (expression_statement "pbVar5 = pbVar10;" (assignment_expression "pbVar5 = pbVar10" (identifier "pbVar5") (= "=") (identifier "pbVar10")) (; ";")) (if_statement "if (pbVar1 <= pbVar5) {\n      return 0x65;\n    }" (if "if") (parenthesized_expression "(pbVar1 <= pbVar5)" (( "(") (binary_expression "pbVar1 <= pbVar5" (identifier "pbVar1") (<= "<=") (identifier "pbVar5")) () ")")) (compound_statement "{\n      return 0x65;\n    }" ({ "{") (return_statement "return 0x65;" (return "return") (number_literal "0x65") (; ";")) (} "}"))) (expression_statement "uVar7 = (uint)*pbVar5;" (assignment_expression "uVar7 = (uint)*pbVar5" (identifier "uVar7") (= "=") (binary_expression "(uint)*pbVar5" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar5"))) (; ";")) (expression_statement "pbVar10 = pbVar5 + 1;" (assignment_expression "pbVar10 = pbVar5 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar5 + 1" (identifier "pbVar5") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (*pbVar5 < 0xc0) {\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }\n    else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" (if "if") (parenthesized_expression "(*pbVar5 < 0xc0)" (( "(") (binary_expression "*pbVar5 < 0xc0" (pointer_expression "*pbVar5" (* "*") (identifier "pbVar5")) (< "<") (number_literal "0xc0")) () ")")) (compound_statement "{\nLAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);\n    }" ({ "{") (labeled_statement "LAB_0015d452:\n      iVar6 = FUN_00126290(lVar3,uVar7);" (statement_identifier "LAB_0015d452") (: ":") (expression_statement "iVar6 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar6 = FUN_00126290(lVar3,uVar7)" (identifier "iVar6") (= "=") (call_expression "FUN_00126290(lVar3,uVar7)" (identifier "FUN_00126290") (argument_list "(lVar3,uVar7)" (( "(") (identifier "lVar3") (, ",") (identifier "uVar7") () ")")))) (; ";"))) (} "}")) (else_clause "else {\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" (else "else") (compound_statement "{\n      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }\n      do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;\nLAB_0015d4fa:\n      uVar7 = 0xfffd;\n      iVar6 = FUN_00126290(lVar3,0xfffd);\n    }" ({ "{") (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (identifier "uVar7") (= "=") (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "(&DAT_001f5520)" (( "(") (pointer_expression "&DAT_001f5520" (& "&") (identifier "DAT_001f5520")) () ")"))) ([ "[") (binary_expression "uVar7 - 0xc0" (identifier "uVar7") (- "-") (number_literal "0xc0")) (] "]"))) (; ";")) (if_statement "if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" (if "if") (parenthesized_expression "((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80))" (( "(") (binary_expression "(pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar10)" (( "(") (binary_expression "pbVar1 == pbVar10" (identifier "pbVar1") (== "==") (identifier "pbVar10")) () ")")) (|| "||") (parenthesized_expression "(bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)" (( "(") (comma_expression "bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar5[1]" (identifier "bVar2") (= "=") (subscript_expression "pbVar5[1]" (identifier "pbVar5") ([ "[") (number_literal "1") (] "]"))) (, ",") (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" (( "(") (binary_expression "bVar2 & 0xc0" (identifier "bVar2") (& "&") (number_literal "0xc0")) () ")")) (!= "!=") (number_literal "0x80"))) () ")"))) () ")")) (compound_statement "{\n        if (uVar7 < 0x80) goto LAB_0015d4fa;\n        goto LAB_0015d452;\n      }" ({ "{") (if_statement "if (uVar7 < 0x80) goto LAB_0015d4fa;" (if "if") (parenthesized_expression "(uVar7 < 0x80)" (( "(") (binary_expression "uVar7 < 0x80" (identifier "uVar7") (< "<") (number_literal "0x80")) () ")")) (goto_statement "goto LAB_0015d4fa;" (goto "goto") (statement_identifier "LAB_0015d4fa") (; ";"))) (goto_statement "goto LAB_0015d452;" (goto "goto") (statement_identifier "LAB_0015d452") (; ";")) (} "}"))) (do_statement "do {\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      } while ((bVar2 & 0xc0) == 0x80);" (do "do") (compound_statement "{\n        pbVar10 = pbVar10 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar10) break;\n        bVar2 = *pbVar10;\n      }" ({ "{") (expression_statement "pbVar10 = pbVar10 + 1;" (assignment_expression "pbVar10 = pbVar10 + 1" (identifier "pbVar10") (= "=") (binary_expression "pbVar10 + 1" (identifier "pbVar10") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" (identifier "uVar7") (= "=") (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" (identifier "uVar7") (* "*") (number_literal "0x40")) (+ "+") (parenthesized_expression "(bVar2 & 0x3f)" (( "(") (binary_expression "bVar2 & 0x3f" (identifier "bVar2") (& "&") (number_literal "0x3f")) () ")")))) (; ";")) (if_statement "if (pbVar1 == pbVar10) break;" (if "if") (parenthesized_expression "(pbVar1 == pbVar10)" (( "(") (binary_expression "pbVar1 == pbVar10" (identifier "pbVar1") (== "==") (identifier "pbVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "bVar2 = *pbVar10;" (assignment_expression "bVar2 = *pbVar10" (identifier "bVar2") (= "=") (pointer_expression "*pbVar10" (* "*") (identifier "pbVar10"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" (( "(") (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" (( "(") (binary_expression "bVar2 & 0xc0" (identifier "bVar2") (& "&") (number_literal "0xc0")) () ")")) (== "==") (number_literal "0x80")) () ")")) (; ";")) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      goto LAB_0015d452;" (if "if") (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" (( "(") (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" (( "(") (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" (( "(") (binary_expression "0x7f < uVar7" (number_literal "0x7f") (< "<") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" (( "(") (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" (( "(") (binary_expression "uVar7 & 0xfffff800" (identifier "uVar7") (& "&") (number_literal "0xfffff800")) () ")")) (!= "!=") (number_literal "0xd800")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" (( "(") (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" (( "(") (binary_expression "uVar7 & 0xfffffffe" (identifier "uVar7") (& "&") (number_literal "0xfffffffe")) () ")")) (!= "!=") (number_literal "0xfffe")) () ")"))) () ")")) (goto_statement "goto LAB_0015d452;" (goto "goto") (statement_identifier "LAB_0015d452") (; ";"))) (labeled_statement "LAB_0015d4fa:\n      uVar7 = 0xfffd;" (statement_identifier "LAB_0015d4fa") (: ":") (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" (identifier "uVar7") (= "=") (number_literal "0xfffd")) (; ";"))) (expression_statement "iVar6 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar6 = FUN_00126290(lVar3,0xfffd)" (identifier "iVar6") (= "=") (call_expression "FUN_00126290(lVar3,0xfffd)" (identifier "FUN_00126290") (argument_list "(lVar3,0xfffd)" (( "(") (identifier "lVar3") (, ",") (number_literal "0xfffd") () ")")))) (; ";")) (} "}")))) (} "}")) (while "while") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (; ";")) (if_statement "if (pbVar1 <= pbVar5) {\n    return 0x65;\n  }" (if "if") (parenthesized_expression "(pbVar1 <= pbVar5)" (( "(") (binary_expression "pbVar1 <= pbVar5" (identifier "pbVar1") (<= "<=") (identifier "pbVar5")) () ")")) (compound_statement "{\n    return 0x65;\n  }" ({ "{") (return_statement "return 0x65;" (return "return") (number_literal "0x65") (; ";")) (} "}"))) (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" (identifier "pcVar14") (= "=") (cast_expression "(char *)param_1[4]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (expression_statement "pcVar16 = pcVar14;" (assignment_expression "pcVar16 = pcVar14" (identifier "pcVar16") (= "=") (identifier "pcVar14")) (; ";")) (labeled_statement "LAB_0015d531:\n  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" (statement_identifier "LAB_0015d531") (: ":") (if_statement "if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" (if "if") (parenthesized_expression "((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14)" (( "(") (binary_expression "(long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14" (cast_expression "(long)((int)param_1[5] + -4)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((int)param_1[5] + -4)" (( "(") (binary_expression "(int)param_1[5] + -4" (cast_expression "(int)param_1[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (+ "+") (number_literal "-4")) () ")"))) (<= "<=") (binary_expression "(long)pcVar16 - (long)pcVar14" (cast_expression "(long)pcVar16" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar16")) (- "-") (cast_expression "(long)pcVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar14")))) () ")")) (compound_statement "{\n    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));\n    if (lVar9 == 0) {\n      return 7;\n    }\n    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;\n    lVar4 = param_1[4];\n    param_1[4] = lVar9;\n    pcVar16 = pcVar16 + (lVar9 - lVar4);\n  }" ({ "{") (expression_statement "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));" (assignment_expression "lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" (identifier "lVar9") (= "=") (call_expression "FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40))" (identifier "FUN_00138360") (argument_list "(pcVar14,(long)((int)param_1[5] + 0x40))" (( "(") (identifier "pcVar14") (, ",") (cast_expression "(long)((int)param_1[5] + 0x40)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((int)param_1[5] + 0x40)" (( "(") (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (+ "+") (number_literal "0x40")) () ")"))) () ")")))) (; ";")) (if_statement "if (lVar9 == 0) {\n      return 7;\n    }" (if "if") (parenthesized_expression "(lVar9 == 0)" (( "(") (binary_expression "lVar9 == 0" (identifier "lVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 7;\n    }" ({ "{") (return_statement "return 7;" (return "return") (number_literal "7") (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40;" (assignment_expression "*(int *)(param_1 + 5) = (int)param_1[5] + 0x40" (pointer_expression "*(int *)(param_1 + 5)" (* "*") (cast_expression "(int *)(param_1 + 5)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 5)" (( "(") (binary_expression "param_1 + 5" (identifier "param_1") (+ "+") (number_literal "5")) () ")")))) (= "=") (binary_expression "(int)param_1[5] + 0x40" (cast_expression "(int)param_1[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (+ "+") (number_literal "0x40"))) (; ";")) (expression_statement "lVar4 = param_1[4];" (assignment_expression "lVar4 = param_1[4]" (identifier "lVar4") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "param_1[4] = lVar9;" (assignment_expression "param_1[4] = lVar9" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "lVar9")) (; ";")) (expression_statement "pcVar16 = pcVar16 + (lVar9 - lVar4);" (assignment_expression "pcVar16 = pcVar16 + (lVar9 - lVar4)" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + (lVar9 - lVar4)" (identifier "pcVar16") (+ "+") (parenthesized_expression "(lVar9 - lVar4)" (( "(") (binary_expression "lVar9 - lVar4" (identifier "lVar9") (- "-") (identifier "lVar4")) () ")")))) (; ";")) (} "}")))) (if_statement "if (0x7f < (int)uVar7) {\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" (if "if") (parenthesized_expression "(0x7f < (int)uVar7)" (( "(") (binary_expression "0x7f < (int)uVar7" (number_literal "0x7f") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n    if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }\n    if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }\n    goto LAB_0015d817;\n  }" ({ "{") (if_statement "if ((int)uVar7 < 0x10000) {\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" (if "if") (parenthesized_expression "((int)uVar7 < 0x10000)" (( "(") (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "0x10000")) () ")")) (compound_statement "{\n      uVar12 = 0x3f1;\n      lVar9 = -1;\n      iVar13 = 0;\n      iVar6 = 0xa2;\n      iVar8 = 0xa2;\n      do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );\n    }" ({ "{") (expression_statement "uVar12 = 0x3f1;" (assignment_expression "uVar12 = 0x3f1" (identifier "uVar12") (= "=") (number_literal "0x3f1")) (; ";")) (expression_statement "lVar9 = -1;" (assignment_expression "lVar9 = -1" (identifier "lVar9") (= "=") (number_literal "-1")) (; ";")) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" (identifier "iVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = 0xa2;" (assignment_expression "iVar6 = 0xa2" (identifier "iVar6") (= "=") (number_literal "0xa2")) (; ";")) (expression_statement "iVar8 = 0xa2;" (assignment_expression "iVar8 = 0xa2" (identifier "iVar8") (= "=") (number_literal "0xa2")) (; ";")) (do_statement "do {\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      } while( true );" (do "do") (compound_statement "{\n        iVar8 = iVar8 >> 1;\n        if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        iVar8 = iVar6 + iVar13;\n        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);\n      }" ({ "{") (expression_statement "iVar8 = iVar8 >> 1;" (assignment_expression "iVar8 = iVar8 >> 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 >> 1" (identifier "iVar8") (>> ">>") (number_literal "1"))) (; ";")) (if_statement "if ((int)(uVar7 - uVar12) < 0) {\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }\n        else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" (if "if") (parenthesized_expression "((int)(uVar7 - uVar12) < 0)" (( "(") (binary_expression "(int)(uVar7 - uVar12) < 0" (cast_expression "(int)(uVar7 - uVar12)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar7 - uVar12)" (( "(") (binary_expression "uVar7 - uVar12" (identifier "uVar7") (- "-") (identifier "uVar12")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          iVar6 = iVar8 + -1;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" ({ "{") (expression_statement "iVar6 = iVar8 + -1;" (assignment_expression "iVar6 = iVar8 + -1" (identifier "iVar6") (= "=") (binary_expression "iVar8 + -1" (identifier "iVar8") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" (if "if") (parenthesized_expression "(iVar6 < iVar13)" (( "(") (binary_expression "iVar6 < iVar13" (identifier "iVar6") (< "<") (identifier "iVar13")) () ")")) (goto_statement "goto LAB_0015d620;" (goto "goto") (statement_identifier "LAB_0015d620") (; ";"))) (} "}")) (else_clause "else {\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" (else "else") (compound_statement "{\n          iVar13 = iVar8 + 1;\n          lVar9 = (long)iVar8;\n          if (iVar6 < iVar13) goto LAB_0015d620;\n        }" ({ "{") (expression_statement "iVar13 = iVar8 + 1;" (assignment_expression "iVar13 = iVar8 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar9 = (long)iVar8;" (assignment_expression "lVar9 = (long)iVar8" (identifier "lVar9") (= "=") (cast_expression "(long)iVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar8"))) (; ";")) (if_statement "if (iVar6 < iVar13) goto LAB_0015d620;" (if "if") (parenthesized_expression "(iVar6 < iVar13)" (( "(") (binary_expression "iVar6 < iVar13" (identifier "iVar6") (< "<") (identifier "iVar13")) () ")")) (goto_statement "goto LAB_0015d620;" (goto "goto") (statement_identifier "LAB_0015d620") (; ";"))) (} "}")))) (expression_statement "iVar8 = iVar6 + iVar13;" (assignment_expression "iVar8 = iVar6 + iVar13" (identifier "iVar8") (= "=") (binary_expression "iVar6 + iVar13" (identifier "iVar6") (+ "+") (identifier "iVar13"))) (; ";")) (expression_statement "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);" (assignment_expression "uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (identifier "uVar12") (= "=") (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001ef220 + (long)(iVar8 >> 1) * 4)" (( "(") (binary_expression "&DAT_001ef220 + (long)(iVar8 >> 1) * 4" (pointer_expression "&DAT_001ef220" (& "&") (identifier "DAT_001ef220")) (+ "+") (binary_expression "(long)(iVar8 >> 1) * 4" (cast_expression "(long)(iVar8 >> 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(iVar8 >> 1)" (( "(") (binary_expression "iVar8 >> 1" (identifier "iVar8") (>> ">>") (number_literal "1")) () ")"))) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (if_statement "if (uVar7 - 0x10400 < 0x28) {\n      uVar7 = uVar7 + 0x28;\n    }" (if "if") (parenthesized_expression "(uVar7 - 0x10400 < 0x28)" (( "(") (binary_expression "uVar7 - 0x10400 < 0x28" (binary_expression "uVar7 - 0x10400" (identifier "uVar7") (- "-") (number_literal "0x10400")) (< "<") (number_literal "0x28")) () ")")) (compound_statement "{\n      uVar7 = uVar7 + 0x28;\n    }" ({ "{") (expression_statement "uVar7 = uVar7 + 0x28;" (assignment_expression "uVar7 = uVar7 + 0x28" (identifier "uVar7") (= "=") (binary_expression "uVar7 + 0x28" (identifier "uVar7") (+ "+") (number_literal "0x28"))) (; ";")) (} "}"))) (goto_statement "goto LAB_0015d817;" (goto "goto") (statement_identifier "LAB_0015d817") (; ";")) (} "}"))) (if_statement "if (uVar7 - 0x41 < 0x1a) {\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" (if "if") (parenthesized_expression "(uVar7 - 0x41 < 0x1a)" (( "(") (binary_expression "uVar7 - 0x41 < 0x1a" (binary_expression "uVar7 - 0x41" (identifier "uVar7") (- "-") (number_literal "0x41")) (< "<") (number_literal "0x1a")) () ")")) (compound_statement "{\n    uVar7 = uVar7 + 0x20;\n    goto joined_r0x0015d68b;\n  }" ({ "{") (expression_statement "uVar7 = uVar7 + 0x20;" (assignment_expression "uVar7 = uVar7 + 0x20" (identifier "uVar7") (= "=") (binary_expression "uVar7 + 0x20" (identifier "uVar7") (+ "+") (number_literal "0x20"))) (; ";")) (goto_statement "goto joined_r0x0015d68b;" (goto "goto") (statement_identifier "joined_r0x0015d68b") (; ";")) (} "}"))) (if_statement "if (uVar7 != 0) {\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" (if "if") (parenthesized_expression "(uVar7 != 0)" (( "(") (binary_expression "uVar7 != 0" (identifier "uVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    *pcVar16 = (char)uVar7;\n    pcVar16 = pcVar16 + 1;\n  }" ({ "{") (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + 1" (identifier "pcVar16") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (goto_statement "goto LAB_0015d585;" (goto "goto") (statement_identifier "LAB_0015d585") (; ";")) (labeled_statement "LAB_0015d620:\n  iVar6 = *(int *)(lVar3 + 8);" (statement_identifier "LAB_0015d620") (: ":") (expression_statement "iVar6 = *(int *)(lVar3 + 8);" (assignment_expression "iVar6 = *(int *)(lVar3 + 8)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(lVar3 + 8)" (* "*") (cast_expression "(int *)(lVar3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 8)" (( "(") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) () ")"))))) (; ";"))) (if_statement "if (((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)) {\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }\n  else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" (if "if") (parenthesized_expression "(((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0))" (( "(") (binary_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))\n     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" (parenthesized_expression "((int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))" (( "(") (binary_expression "(int)uVar7 <\n       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (cast_expression "(int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4))" (( "(") (binary_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (subscript_expression "(uint)(byte)(&UNK_001ef223)[lVar9 * 4]" (call_expression "(uint)(byte)(&UNK_001ef223)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "(&UNK_001ef223)" (( "(") (pointer_expression "&UNK_001ef223" (& "&") (identifier "UNK_001ef223")) () ")"))) ([ "[") (binary_expression "lVar9 * 4" (identifier "lVar9") (* "*") (number_literal "4")) (] "]")) (+ "+") (binary_expression "(uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" (( "(") (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" (& "&") (identifier "DAT_001ef220")) (+ "+") (binary_expression "lVar9 * 4" (identifier "lVar9") (* "*") (number_literal "4"))) () ")"))))) () ")")))) () ")")) (&& "&&") (parenthesized_expression "(((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0)" (( "(") (binary_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))\n         == 0" (parenthesized_expression "((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))" (( "(") (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] & 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(&UNK_001ef222)" (( "(") (pointer_expression "&UNK_001ef222" (& "&") (identifier "UNK_001ef222")) () ")"))) ([ "[") (binary_expression "lVar9 * 4" (identifier "lVar9") (* "*") (number_literal "4")) (] "]")) (& "&") (number_literal "1")) (& "&") (parenthesized_expression "(*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7)" (( "(") (binary_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7" (pointer_expression "*(ushort *)(&DAT_001ef220 + lVar9 * 4)" (* "*") (cast_expression "(ushort *)(&DAT_001ef220 + lVar9 * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001ef220 + lVar9 * 4)" (( "(") (binary_expression "&DAT_001ef220 + lVar9 * 4" (pointer_expression "&DAT_001ef220" (& "&") (identifier "DAT_001ef220")) (+ "+") (binary_expression "lVar9 * 4" (identifier "lVar9") (* "*") (number_literal "4"))) () ")")))) (^ "^") (identifier "uVar7")) () ")"))) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;\n    if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }\njoined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }\n  }" ({ "{") (expression_statement "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff;" (assignment_expression "uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" (identifier "uVar7") (= "=") (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7\n            & 0xffff" (binary_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7" (pointer_expression "*(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" (* "*") (cast_expression "(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2)" (( "(") (binary_expression "&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (pointer_expression "&DAT_001ef180" (& "&") (identifier "DAT_001ef180")) (+ "+") (binary_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2" (call_expression "(ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((byte)(&UNK_001ef222)[lVar9 * 4] >> 1)" (( "(") (binary_expression "(byte)(&UNK_001ef222)[lVar9 * 4] >> 1" (subscript_expression "(byte)(&UNK_001ef222)[lVar9 * 4]" (call_expression "(byte)(&UNK_001ef222)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(&UNK_001ef222)" (( "(") (pointer_expression "&UNK_001ef222" (& "&") (identifier "UNK_001ef222")) () ")"))) ([ "[") (binary_expression "lVar9 * 4" (identifier "lVar9") (* "*") (number_literal "4")) (] "]")) (>> ">>") (number_literal "1")) () ")"))) (* "*") (number_literal "2"))) () ")")))) (+ "+") (identifier "uVar7")) (& "&") (number_literal "0xffff"))) (; ";")) (if_statement "if (iVar6 != 0) {\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);\n    }" ({ "{") (labeled_statement "LAB_0015d679:\n      uVar7 = FUN_00114260(uVar7,iVar6 == 2);" (statement_identifier "LAB_0015d679") (: ":") (expression_statement "uVar7 = FUN_00114260(uVar7,iVar6 == 2);" (assignment_expression "uVar7 = FUN_00114260(uVar7,iVar6 == 2)" (identifier "uVar7") (= "=") (call_expression "FUN_00114260(uVar7,iVar6 == 2)" (identifier "FUN_00114260") (argument_list "(uVar7,iVar6 == 2)" (( "(") (identifier "uVar7") (, ",") (binary_expression "iVar6 == 2" (identifier "iVar6") (== "==") (number_literal "2")) () ")")))) (; ";"))) (} "}"))) (labeled_statement "joined_r0x0015d68b:\n    if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" (statement_identifier "joined_r0x0015d68b") (: ":") (if_statement "if (uVar7 != 0) {\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" (if "if") (parenthesized_expression "(uVar7 != 0)" (( "(") (binary_expression "uVar7 != 0" (identifier "uVar7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (0x7f < (int)uVar7) goto LAB_0015d868;\n      *pcVar16 = (char)uVar7;\n      pcVar16 = pcVar16 + 1;\n    }" ({ "{") (if_statement "if (0x7f < (int)uVar7) goto LAB_0015d868;" (if "if") (parenthesized_expression "(0x7f < (int)uVar7)" (( "(") (binary_expression "0x7f < (int)uVar7" (number_literal "0x7f") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (goto_statement "goto LAB_0015d868;" (goto "goto") (statement_identifier "LAB_0015d868") (; ";"))) (expression_statement "*pcVar16 = (char)uVar7;" (assignment_expression "*pcVar16 = (char)uVar7" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "pcVar16 = pcVar16 + 1;" (assignment_expression "pcVar16 = pcVar16 + 1" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + 1" (identifier "pcVar16") (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" (else "else") (compound_statement "{\n    if (iVar6 != 0) goto LAB_0015d679;\nLAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;\n    bVar2 = (byte)((int)uVar7 >> 6);\n    if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }\n  }" ({ "{") (if_statement "if (iVar6 != 0) goto LAB_0015d679;" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015d679;" (goto "goto") (statement_identifier "LAB_0015d679") (; ";"))) (labeled_statement "LAB_0015d868:\n    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" (statement_identifier "LAB_0015d868") (: ":") (expression_statement "cVar11 = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "cVar11 = ((byte)uVar7 & 0x3f) + 0x80" (identifier "cVar11") (= "=") (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" (( "(") (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar7")) (& "&") (number_literal "0x3f")) () ")")) (+ "+") (number_literal "0x80"))) (; ";"))) (expression_statement "bVar2 = (byte)((int)uVar7 >> 6);" (assignment_expression "bVar2 = (byte)((int)uVar7 >> 6)" (identifier "bVar2") (= "=") (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)uVar7 >> 6)" (( "(") (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "6")) () ")")))) (; ";")) (if_statement "if ((int)uVar7 < 0x800) {\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }\n    else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" (if "if") (parenthesized_expression "((int)uVar7 < 0x800)" (( "(") (binary_expression "(int)uVar7 < 0x800" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "0x800")) () ")")) (compound_statement "{\n      pcVar16[1] = cVar11;\n      *pcVar16 = bVar2 - 0x40;\n      pcVar16 = pcVar16 + 2;\n    }" ({ "{") (expression_statement "pcVar16[1] = cVar11;" (assignment_expression "pcVar16[1] = cVar11" (subscript_expression "pcVar16[1]" (identifier "pcVar16") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "cVar11")) (; ";")) (expression_statement "*pcVar16 = bVar2 - 0x40;" (assignment_expression "*pcVar16 = bVar2 - 0x40" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (= "=") (binary_expression "bVar2 - 0x40" (identifier "bVar2") (- "-") (number_literal "0x40"))) (; ";")) (expression_statement "pcVar16 = pcVar16 + 2;" (assignment_expression "pcVar16 = pcVar16 + 2" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + 2" (identifier "pcVar16") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" (else "else") (if_statement "if ((int)uVar7 < 0x10000) {\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }\n    else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" (if "if") (parenthesized_expression "((int)uVar7 < 0x10000)" (( "(") (binary_expression "(int)uVar7 < 0x10000" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "0x10000")) () ")")) (compound_statement "{\n      pcVar16[1] = (bVar2 & 0x3f) + 0x80;\n      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;\n      pcVar16[2] = cVar11;\n      pcVar16 = pcVar16 + 3;\n    }" ({ "{") (expression_statement "pcVar16[1] = (bVar2 & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = (bVar2 & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" (identifier "pcVar16") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "(bVar2 & 0x3f) + 0x80" (parenthesized_expression "(bVar2 & 0x3f)" (( "(") (binary_expression "bVar2 & 0x3f" (identifier "bVar2") (& "&") (number_literal "0x3f")) () ")")) (+ "+") (number_literal "0x80"))) (; ";")) (expression_statement "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;" (assignment_expression "*pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (= "=") (binary_expression "(char)((int)uVar7 >> 0xc) + -0x20" (cast_expression "(char)((int)uVar7 >> 0xc)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((int)uVar7 >> 0xc)" (( "(") (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "0xc")) () ")"))) (+ "+") (number_literal "-0x20"))) (; ";")) (expression_statement "pcVar16[2] = cVar11;" (assignment_expression "pcVar16[2] = cVar11" (subscript_expression "pcVar16[2]" (identifier "pcVar16") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "cVar11")) (; ";")) (expression_statement "pcVar16 = pcVar16 + 3;" (assignment_expression "pcVar16 = pcVar16 + 3" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + 3" (identifier "pcVar16") (+ "+") (number_literal "3"))) (; ";")) (} "}")) (else_clause "else {\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" (else "else") (compound_statement "{\nLAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;\n      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;\n      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;\n      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;\n      pcVar16 = pcVar16 + 4;\n    }" ({ "{") (labeled_statement "LAB_0015d817:\n      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" (statement_identifier "LAB_0015d817") (: ":") (expression_statement "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;" (assignment_expression "*pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (= "=") (binary_expression "((byte)((int)uVar7 >> 0x12) & 7) - 0x10" (parenthesized_expression "((byte)((int)uVar7 >> 0x12) & 7)" (( "(") (binary_expression "(byte)((int)uVar7 >> 0x12) & 7" (call_expression "(byte)((int)uVar7 >> 0x12)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)uVar7 >> 0x12)" (( "(") (binary_expression "(int)uVar7 >> 0x12" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "0x12")) () ")"))) (& "&") (number_literal "7")) () ")")) (- "-") (number_literal "0x10"))) (; ";"))) (expression_statement "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;" (assignment_expression "pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (subscript_expression "pcVar16[1]" (identifier "pcVar16") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 0xc) & 0x3f)" (( "(") (binary_expression "(byte)((int)uVar7 >> 0xc) & 0x3f" (call_expression "(byte)((int)uVar7 >> 0xc)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)uVar7 >> 0xc)" (( "(") (binary_expression "(int)uVar7 >> 0xc" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "0xc")) () ")"))) (& "&") (number_literal "0x3f")) () ")")) (+ "+") (number_literal "0x80"))) (; ";")) (expression_statement "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;" (assignment_expression "pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80" (subscript_expression "pcVar16[3]" (identifier "pcVar16") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "((byte)uVar7 & 0x3f) + 0x80" (parenthesized_expression "((byte)uVar7 & 0x3f)" (( "(") (binary_expression "(byte)uVar7 & 0x3f" (cast_expression "(byte)uVar7" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar7")) (& "&") (number_literal "0x3f")) () ")")) (+ "+") (number_literal "0x80"))) (; ";")) (expression_statement "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;" (assignment_expression "pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (subscript_expression "pcVar16[2]" (identifier "pcVar16") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "((byte)((int)uVar7 >> 6) & 0x3f) + 0x80" (parenthesized_expression "((byte)((int)uVar7 >> 6) & 0x3f)" (( "(") (binary_expression "(byte)((int)uVar7 >> 6) & 0x3f" (call_expression "(byte)((int)uVar7 >> 6)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((int)uVar7 >> 6)" (( "(") (binary_expression "(int)uVar7 >> 6" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "6")) () ")"))) (& "&") (number_literal "0x3f")) () ")")) (+ "+") (number_literal "0x80"))) (; ";")) (expression_statement "pcVar16 = pcVar16 + 4;" (assignment_expression "pcVar16 = pcVar16 + 4" (identifier "pcVar16") (= "=") (binary_expression "pcVar16 + 4" (identifier "pcVar16") (+ "+") (number_literal "4"))) (; ";")) (} "}")))))) (} "}")))) (labeled_statement "LAB_0015d585:\n  iVar6 = (int)pbVar10;" (statement_identifier "LAB_0015d585") (: ":") (expression_statement "iVar6 = (int)pbVar10;" (assignment_expression "iVar6 = (int)pbVar10" (identifier "iVar6") (= "=") (cast_expression "(int)pbVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pbVar10"))) (; ";"))) (expression_statement "iVar8 = iVar6;" (assignment_expression "iVar8 = iVar6" (identifier "iVar8") (= "=") (identifier "iVar6")) (; ";")) (if_statement "if (pbVar1 <= pbVar10) goto LAB_0015d76e;" (if "if") (parenthesized_expression "(pbVar1 <= pbVar10)" (( "(") (binary_expression "pbVar1 <= pbVar10" (identifier "pbVar1") (<= "<=") (identifier "pbVar10")) () ")")) (goto_statement "goto LAB_0015d76e;" (goto "goto") (statement_identifier "LAB_0015d76e") (; ";"))) (expression_statement "uVar7 = (uint)*pbVar10;" (assignment_expression "uVar7 = (uint)*pbVar10" (identifier "uVar7") (= "=") (binary_expression "(uint)*pbVar10" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar10"))) (; ";")) (expression_statement "pbVar15 = pbVar10 + 1;" (assignment_expression "pbVar15 = pbVar10 + 1" (identifier "pbVar15") (= "=") (binary_expression "pbVar10 + 1" (identifier "pbVar10") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar7 < 0xc0) {\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }\n  else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" (if "if") (parenthesized_expression "(uVar7 < 0xc0)" (( "(") (binary_expression "uVar7 < 0xc0" (identifier "uVar7") (< "<") (number_literal "0xc0")) () ")")) (compound_statement "{\n    iVar8 = FUN_00126290(lVar3,uVar7);\njoined_r0x0015d5b2:\n    pbVar10 = pbVar15;\n    if (iVar8 == 0) goto LAB_0015d760;\n  }" ({ "{") (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" (identifier "iVar8") (= "=") (call_expression "FUN_00126290(lVar3,uVar7)" (identifier "FUN_00126290") (argument_list "(lVar3,uVar7)" (( "(") (identifier "lVar3") (, ",") (identifier "uVar7") () ")")))) (; ";")) (labeled_statement "joined_r0x0015d5b2:\n    pbVar10 = pbVar15;" (statement_identifier "joined_r0x0015d5b2") (: ":") (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" (identifier "pbVar10") (= "=") (identifier "pbVar15")) (; ";"))) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" (if "if") (parenthesized_expression "(iVar8 == 0)" (( "(") (binary_expression "iVar8 == 0" (identifier "iVar8") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015d760;" (goto "goto") (statement_identifier "LAB_0015d760") (; ";"))) (} "}")) (else_clause "else {\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" (else "else") (compound_statement "{\n    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];\n    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }\n    iVar8 = FUN_00126290(lVar3,0xfffd);\n    if (iVar8 == 0) goto LAB_0015d760;\n    uVar7 = 0xfffd;\n    pbVar10 = pbVar15;\n  }" ({ "{") (expression_statement "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];" (assignment_expression "uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (identifier "uVar7") (= "=") (subscript_expression "(uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0]" (call_expression "(uint)(byte)(&DAT_001f5520)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "(&DAT_001f5520)" (( "(") (pointer_expression "&DAT_001f5520" (& "&") (identifier "DAT_001f5520")) () ")"))) ([ "[") (binary_expression "uVar7 - 0xc0" (identifier "uVar7") (- "-") (number_literal "0xc0")) (] "]"))) (; ";")) (if_statement "if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }\n    else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" (if "if") (parenthesized_expression "((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80))" (( "(") (binary_expression "(pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" (parenthesized_expression "(pbVar1 == pbVar15)" (( "(") (binary_expression "pbVar1 == pbVar15" (identifier "pbVar1") (== "==") (identifier "pbVar15")) () ")")) (|| "||") (parenthesized_expression "(bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)" (( "(") (comma_expression "bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80" (assignment_expression "bVar2 = pbVar10[1]" (identifier "bVar2") (= "=") (subscript_expression "pbVar10[1]" (identifier "pbVar10") ([ "[") (number_literal "1") (] "]"))) (, ",") (binary_expression "(bVar2 & 0xc0) != 0x80" (parenthesized_expression "(bVar2 & 0xc0)" (( "(") (binary_expression "bVar2 & 0xc0" (identifier "bVar2") (& "&") (number_literal "0xc0")) () ")")) (!= "!=") (number_literal "0x80"))) () ")"))) () ")")) (compound_statement "{\n      if (0x7f < uVar7) goto LAB_0015d72b;\n    }" ({ "{") (if_statement "if (0x7f < uVar7) goto LAB_0015d72b;" (if "if") (parenthesized_expression "(0x7f < uVar7)" (( "(") (binary_expression "0x7f < uVar7" (number_literal "0x7f") (< "<") (identifier "uVar7")) () ")")) (goto_statement "goto LAB_0015d72b;" (goto "goto") (statement_identifier "LAB_0015d72b") (; ";"))) (} "}")) (else_clause "else {\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" (else "else") (compound_statement "{\n      do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);\n      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }\n    }" ({ "{") (do_statement "do {\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      } while ((bVar2 & 0xc0) == 0x80);" (do "do") (compound_statement "{\n        pbVar15 = pbVar15 + 1;\n        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);\n        if (pbVar1 == pbVar15) break;\n        bVar2 = *pbVar15;\n      }" ({ "{") (expression_statement "pbVar15 = pbVar15 + 1;" (assignment_expression "pbVar15 = pbVar15 + 1" (identifier "pbVar15") (= "=") (binary_expression "pbVar15 + 1" (identifier "pbVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);" (assignment_expression "uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f)" (identifier "uVar7") (= "=") (binary_expression "uVar7 * 0x40 + (bVar2 & 0x3f)" (binary_expression "uVar7 * 0x40" (identifier "uVar7") (* "*") (number_literal "0x40")) (+ "+") (parenthesized_expression "(bVar2 & 0x3f)" (( "(") (binary_expression "bVar2 & 0x3f" (identifier "bVar2") (& "&") (number_literal "0x3f")) () ")")))) (; ";")) (if_statement "if (pbVar1 == pbVar15) break;" (if "if") (parenthesized_expression "(pbVar1 == pbVar15)" (( "(") (binary_expression "pbVar1 == pbVar15" (identifier "pbVar1") (== "==") (identifier "pbVar15")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "bVar2 = *pbVar15;" (assignment_expression "bVar2 = *pbVar15" (identifier "bVar2") (= "=") (pointer_expression "*pbVar15" (* "*") (identifier "pbVar15"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bVar2 & 0xc0) == 0x80)" (( "(") (binary_expression "(bVar2 & 0xc0) == 0x80" (parenthesized_expression "(bVar2 & 0xc0)" (( "(") (binary_expression "bVar2 & 0xc0" (identifier "bVar2") (& "&") (number_literal "0xc0")) () ")")) (== "==") (number_literal "0x80")) () ")")) (; ";")) (if_statement "if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))\n      {\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" (if "if") (parenthesized_expression "(((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))" (( "(") (binary_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe)" (parenthesized_expression "((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800))" (( "(") (binary_expression "(0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)" (parenthesized_expression "(0x7f < uVar7)" (( "(") (binary_expression "0x7f < uVar7" (number_literal "0x7f") (< "<") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "((uVar7 & 0xfffff800) != 0xd800)" (( "(") (binary_expression "(uVar7 & 0xfffff800) != 0xd800" (parenthesized_expression "(uVar7 & 0xfffff800)" (( "(") (binary_expression "uVar7 & 0xfffff800" (identifier "uVar7") (& "&") (number_literal "0xfffff800")) () ")")) (!= "!=") (number_literal "0xd800")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((uVar7 & 0xfffffffe) != 0xfffe)" (( "(") (binary_expression "(uVar7 & 0xfffffffe) != 0xfffe" (parenthesized_expression "(uVar7 & 0xfffffffe)" (( "(") (binary_expression "uVar7 & 0xfffffffe" (identifier "uVar7") (& "&") (number_literal "0xfffffffe")) () ")")) (!= "!=") (number_literal "0xfffe")) () ")"))) () ")")) (compound_statement "{\nLAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);\n        pbVar10 = pbVar15;\n        if (iVar8 != 0) goto LAB_0015d5b8;\n        if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }\n        iVar8 = FUN_001262e0(uVar7);\n        goto joined_r0x0015d5b2;\n      }" ({ "{") (labeled_statement "LAB_0015d72b:\n        iVar8 = FUN_00126290(lVar3,uVar7);" (statement_identifier "LAB_0015d72b") (: ":") (expression_statement "iVar8 = FUN_00126290(lVar3,uVar7);" (assignment_expression "iVar8 = FUN_00126290(lVar3,uVar7)" (identifier "iVar8") (= "=") (call_expression "FUN_00126290(lVar3,uVar7)" (identifier "FUN_00126290") (argument_list "(lVar3,uVar7)" (( "(") (identifier "lVar3") (, ",") (identifier "uVar7") () ")")))) (; ";"))) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" (identifier "pbVar10") (= "=") (identifier "pbVar15")) (; ";")) (if_statement "if (iVar8 != 0) goto LAB_0015d5b8;" (if "if") (parenthesized_expression "(iVar8 != 0)" (( "(") (binary_expression "iVar8 != 0" (identifier "iVar8") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015d5b8;" (goto "goto") (statement_identifier "LAB_0015d5b8") (; ";"))) (if_statement "if (0x31 < uVar7 - 0x300) {\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" (if "if") (parenthesized_expression "(0x31 < uVar7 - 0x300)" (( "(") (binary_expression "0x31 < uVar7 - 0x300" (number_literal "0x31") (< "<") (binary_expression "uVar7 - 0x300" (identifier "uVar7") (- "-") (number_literal "0x300"))) () ")")) (compound_statement "{\nLAB_0015d760:\n          iVar8 = (int)pbVar15;\nLAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];\n          *param_2 = param_1[4];\n          *param_3 = (int)pcVar16 - (int)param_1[4];\n          *param_4 = (int)pbVar5 - (int)param_1[1];\n          *param_5 = iVar6 - (int)param_1[1];\n          lVar3 = param_1[3];\n          *(int *)(param_1 + 3) = (int)lVar3 + 1;\n          *param_6 = (int)lVar3;\n          return 0;\n        }" ({ "{") (labeled_statement "LAB_0015d760:\n          iVar8 = (int)pbVar15;" (statement_identifier "LAB_0015d760") (: ":") (expression_statement "iVar8 = (int)pbVar15;" (assignment_expression "iVar8 = (int)pbVar15" (identifier "iVar8") (= "=") (cast_expression "(int)pbVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pbVar15"))) (; ";"))) (labeled_statement "LAB_0015d76e:\n          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" (statement_identifier "LAB_0015d76e") (: ":") (expression_statement "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];" (assignment_expression "*(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1]" (pointer_expression "*(int *)((long)param_1 + 0x14)" (* "*") (cast_expression "(int *)((long)param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x14)" (( "(") (binary_expression "(long)param_1 + 0x14" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar8 - (int)param_1[1]" (identifier "iVar8") (- "-") (cast_expression "(int)param_1[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))))) (; ";"))) (expression_statement "*param_2 = param_1[4];" (assignment_expression "*param_2 = param_1[4]" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "*param_3 = (int)pcVar16 - (int)param_1[4];" (assignment_expression "*param_3 = (int)pcVar16 - (int)param_1[4]" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (binary_expression "(int)pcVar16 - (int)param_1[4]" (cast_expression "(int)pcVar16" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar16")) (- "-") (cast_expression "(int)param_1[4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))))) (; ";")) (expression_statement "*param_4 = (int)pbVar5 - (int)param_1[1];" (assignment_expression "*param_4 = (int)pbVar5 - (int)param_1[1]" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (binary_expression "(int)pbVar5 - (int)param_1[1]" (cast_expression "(int)pbVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pbVar5")) (- "-") (cast_expression "(int)param_1[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))))) (; ";")) (expression_statement "*param_5 = iVar6 - (int)param_1[1];" (assignment_expression "*param_5 = iVar6 - (int)param_1[1]" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (binary_expression "iVar6 - (int)param_1[1]" (identifier "iVar6") (- "-") (cast_expression "(int)param_1[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))))) (; ";")) (expression_statement "lVar3 = param_1[3];" (assignment_expression "lVar3 = param_1[3]" (identifier "lVar3") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "*(int *)(param_1 + 3) = (int)lVar3 + 1;" (assignment_expression "*(int *)(param_1 + 3) = (int)lVar3 + 1" (pointer_expression "*(int *)(param_1 + 3)" (* "*") (cast_expression "(int *)(param_1 + 3)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 3)" (( "(") (binary_expression "param_1 + 3" (identifier "param_1") (+ "+") (number_literal "3")) () ")")))) (= "=") (binary_expression "(int)lVar3 + 1" (cast_expression "(int)lVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar3")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_6 = (int)lVar3;" (assignment_expression "*param_6 = (int)lVar3" (pointer_expression "*param_6" (* "*") (identifier "param_6")) (= "=") (cast_expression "(int)lVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar3"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar8 = FUN_001262e0(uVar7);" (assignment_expression "iVar8 = FUN_001262e0(uVar7)" (identifier "iVar8") (= "=") (call_expression "FUN_001262e0(uVar7)" (identifier "FUN_001262e0") (argument_list "(uVar7)" (( "(") (identifier "uVar7") () ")")))) (; ";")) (goto_statement "goto joined_r0x0015d5b2;" (goto "goto") (statement_identifier "joined_r0x0015d5b2") (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar8 = FUN_00126290(lVar3,0xfffd);" (assignment_expression "iVar8 = FUN_00126290(lVar3,0xfffd)" (identifier "iVar8") (= "=") (call_expression "FUN_00126290(lVar3,0xfffd)" (identifier "FUN_00126290") (argument_list "(lVar3,0xfffd)" (( "(") (identifier "lVar3") (, ",") (number_literal "0xfffd") () ")")))) (; ";")) (if_statement "if (iVar8 == 0) goto LAB_0015d760;" (if "if") (parenthesized_expression "(iVar8 == 0)" (( "(") (binary_expression "iVar8 == 0" (identifier "iVar8") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015d760;" (goto "goto") (statement_identifier "LAB_0015d760") (; ";"))) (expression_statement "uVar7 = 0xfffd;" (assignment_expression "uVar7 = 0xfffd" (identifier "uVar7") (= "=") (number_literal "0xfffd")) (; ";")) (expression_statement "pbVar10 = pbVar15;" (assignment_expression "pbVar10 = pbVar15" (identifier "pbVar10") (= "=") (identifier "pbVar15")) (; ";")) (} "}")))) (labeled_statement "LAB_0015d5b8:\n  pcVar14 = (char *)param_1[4];" (statement_identifier "LAB_0015d5b8") (: ":") (expression_statement "pcVar14 = (char *)param_1[4];" (assignment_expression "pcVar14 = (char *)param_1[4]" (identifier "pcVar14") (= "=") (cast_expression "(char *)param_1[4]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";"))) (goto_statement "goto LAB_0015d531;" (goto "goto") (statement_identifier "LAB_0015d531") (; ";")) (} "}")))

int function_1(type_1 *pC,char **paToken,int *pnToken,int *piStart,int *piEnd,
               int *piPos)

{
  type_2 *var_1;
  type_2 var_6;
  type_3 *p;
  type_4 *psVar3;
  type_2 *var_2;
  int var_7;
  type_5 var_4;
  int var_10;
  type_4 *var_9;
  type_2 *var_5;
  char cVar9;
  type_5 var_11;
  int var_12;
  type_6 *pCsr;
  long var_14;
  type_2 *var_17;
  type_4 *psVar14;
  
  p = (type_3 *)pC->pTokenizer;
  var_1 = (type_2 *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)&pC[2].pTokenizer);
  var_5 = (type_2 *)((long)&(pC[1].pTokenizer)->pModule + (long)*(int *)((long)&pC[2].pTokenizer + 4)
                   );
  do {
    var_2 = var_5;
    if (var_1 <= var_2) {
      return 0x65;
    }
    var_4 = (type_5)*var_2;
    var_5 = var_2 + 1;
    if (*var_2 < 0xc0) {
LAB_0015d452:
      var_7 = var_3(p,var_4);
    }
    else {
      var_4 = (type_5)""[var_4 - 0xc0];
      if ((var_1 == var_5) || (var_6 = var_2[1], (var_6 & 0xc0) != 0x80)) {
        if (var_4 < 0x80) goto LAB_0015d4fa;
        goto LAB_0015d452;
      }
      do {
        var_5 = var_5 + 1;
        var_4 = var_4 * 0x40 + (var_6 & 0x3f);
        if (var_1 == var_5) break;
        var_6 = *var_5;
      } while ((var_6 & 0xc0) == 0x80);
      if (((0x7f < var_4) && ((var_4 & 0xfffff800) != 0xd800)) && ((var_4 & 0xfffffffe) != 0xfffe))
      goto LAB_0015d452;
LAB_0015d4fa:
      var_4 = 0xfffd;
      var_7 = var_3(p,0xfffd);
    }
  } while (var_7 == 0);
  if (var_1 <= var_2) {
    return 0x65;
  }
  var_9 = pC[4].pTokenizer;
  psVar14 = var_9;
LAB_0015d531:
  if ((long)(*(int *)&pC[5].pTokenizer + -4) <= (long)psVar14 - (long)var_9) {
    var_9 = (type_4 *)var_8(var_9,(long)(*(int *)&pC[5].pTokenizer + 0x40))
    ;
    if (var_9 == (type_4 *)0x0) {
      return 7;
    }
    *(int *)&pC[5].pTokenizer = *(int *)&pC[5].pTokenizer + 0x40;
    psVar3 = pC[4].pTokenizer;
    pC[4].pTokenizer = var_9;
    psVar14 = (type_4 *)(((long)psVar14 - (long)psVar3) + (long)var_9);
  }
  if (0x7f < (int)var_4) {
    if ((int)var_4 < 0x10000) {
      var_11 = 0x3f1;
      var_14 = -1;
      var_12 = 0;
      var_7 = 0xa2;
      var_10 = 0xa2;
      do {
        var_10 = var_10 >> 1;
        if ((int)(var_4 - var_11) < 0) {
          var_7 = var_10 + -1;
          if (var_7 < var_12) goto LAB_0015d620;
        }
        else {
          var_12 = var_10 + 1;
          var_14 = (long)var_10;
          if (var_7 < var_12) goto LAB_0015d620;
        }
        var_10 = var_7 + var_12;
        var_11 = (type_5)*(type_7 *)(var_13 + (long)(var_10 >> 1) * 4);
      } while( true );
    }
    if (var_4 - 0x10400 < 0x28) {
      var_4 = var_4 + 0x28;
    }
    goto LAB_0015d817;
  }
  if (var_4 - 0x41 < 0x1a) {
    var_4 = var_4 + 0x20;
    goto joined_r0x0015d68b;
  }
  if (var_4 != 0) {
    *(char *)&psVar14->pModule = (char)var_4;
    psVar14 = (type_4 *)((long)&psVar14->pModule + 1);
  }
  goto LAB_0015d585;
LAB_0015d620:
  var_7 = p->eRemoveDiacritic;
  if (((int)var_4 <
       (int)((type_5)(type_2)var_13[var_14 * 4 + 3] + (type_5)*(type_7 *)(var_13 + var_14 * 4)
            )) &&
     (((type_2)var_13[var_14 * 4 + 2] & 1 & (*(type_7 *)(var_13 + var_14 * 4) ^ var_4)) ==
      0)) {
    var_4 = *(type_7 *)(var_15 + (ulong)((type_2)var_13[var_14 * 4 + 2] >> 1) * 2) + var_4
            & 0xffff;
    if (var_7 != 0) {
LAB_0015d679:
      var_4 = var_16(var_4,(type_5)(var_7 == 2));
    }
joined_r0x0015d68b:
    if (var_4 != 0) {
      if (0x7f < (int)var_4) goto LAB_0015d868;
      *(char *)&psVar14->pModule = (char)var_4;
      psVar14 = (type_4 *)((long)&psVar14->pModule + 1);
    }
  }
  else {
    if (var_7 != 0) goto LAB_0015d679;
LAB_0015d868:
    cVar9 = ((type_2)var_4 & 0x3f) + 0x80;
    var_6 = (type_2)((int)var_4 >> 6);
    if ((int)var_4 < 0x800) {
      *(char *)((long)&psVar14->pModule + 1) = cVar9;
      *(type_2 *)&psVar14->pModule = var_6 - 0x40;
      psVar14 = (type_4 *)((long)&psVar14->pModule + 2);
    }
    else if ((int)var_4 < 0x10000) {
      *(type_2 *)((long)&psVar14->pModule + 1) = (var_6 & 0x3f) + 0x80;
      *(char *)&psVar14->pModule = (char)((int)var_4 >> 0xc) + -0x20;
      *(char *)((long)&psVar14->pModule + 2) = cVar9;
      psVar14 = (type_4 *)((long)&psVar14->pModule + 3);
    }
    else {
LAB_0015d817:
      *(type_2 *)&psVar14->pModule = ((type_2)((int)var_4 >> 0x12) & 7) - 0x10;
      *(type_2 *)((long)&psVar14->pModule + 1) = ((type_2)((int)var_4 >> 0xc) & 0x3f) + 0x80;
      *(type_2 *)((long)&psVar14->pModule + 3) = ((type_2)var_4 & 0x3f) + 0x80;
      *(type_2 *)((long)&psVar14->pModule + 2) = ((type_2)((int)var_4 >> 6) & 0x3f) + 0x80;
      psVar14 = (type_4 *)((long)&psVar14->pModule + 4);
    }
  }
LAB_0015d585:
  var_7 = (int)var_5;
  var_10 = var_7;
  if (var_1 <= var_5) goto LAB_0015d76e;
  var_4 = (type_5)*var_5;
  var_17 = var_5 + 1;
  if (var_4 < 0xc0) {
    var_10 = var_3(p,var_4);
joined_r0x0015d5b2:
    var_5 = var_17;
    if (var_10 == 0) goto LAB_0015d760;
  }
  else {
    var_4 = (type_5)""[var_4 - 0xc0];
    if ((var_1 == var_17) || (var_6 = var_5[1], (var_6 & 0xc0) != 0x80)) {
      if (0x7f < var_4) goto LAB_0015d72b;
    }
    else {
      do {
        var_17 = var_17 + 1;
        var_4 = var_4 * 0x40 + (var_6 & 0x3f);
        if (var_1 == var_17) break;
        var_6 = *var_17;
      } while ((var_6 & 0xc0) == 0x80);
      if (((0x7f < var_4) && ((var_4 & 0xfffff800) != 0xd800)) && ((var_4 & 0xfffffffe) != 0xfffe))
      {
LAB_0015d72b:
        var_10 = var_3(p,var_4);
        var_5 = var_17;
        if (var_10 != 0) goto LAB_0015d5b8;
        if (0x31 < var_4 - 0x300) {
LAB_0015d760:
          var_10 = (int)var_17;
LAB_0015d76e:
          var_9 = pC[4].pTokenizer;
          *(int *)((long)&pC[2].pTokenizer + 4) = var_10 - (int)pC[1].pTokenizer;
          *paToken = (char *)var_9;
          *pnToken = (int)psVar14 - (int)pC[4].pTokenizer;
          *piStart = (int)var_2 - (int)pC[1].pTokenizer;
          *piEnd = var_7 - (int)pC[1].pTokenizer;
          var_7 = *(int *)&pC[3].pTokenizer;
          *(int *)&pC[3].pTokenizer = var_7 + 1;
          *piPos = var_7;
          return 0;
        }
        var_10 = var_18(var_4);
        goto joined_r0x0015d5b2;
      }
    }
    var_10 = var_3(p,0xfffd);
    if (var_10 == 0) goto LAB_0015d760;
    var_4 = 0xfffd;
    var_5 = var_17;
  }
LAB_0015d5b8:
  var_9 = pC[4].pTokenizer;
  goto LAB_0015d531;
}


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

undefined8
MASKED(long *param_1,long *param_2,int *param_3,int *param_4,int *param_5,int *param_6)

{
  byte *pbVar1;
  byte bVar2;
  long lVar3;
  long lVar4;
  byte *pbVar5;
  int iVar6;
  uint uVar7;
  int iVar8;
  long lVar9;
  byte *pbVar10;
  char cVar11;
  uint uVar12;
  int iVar13;
  char *pcVar14;
  byte *pbVar15;
  char *pcVar16;
  
  lVar3 = *param_1;
  pbVar1 = (byte *)(param_1[1] + (long)(int)param_1[2]);
  pbVar10 = (byte *)((long)*(int *)((long)param_1 + 0x14) + param_1[1]);
  do {
    pbVar5 = pbVar10;
    if (pbVar1 <= pbVar5) {
      return 0x65;
    }
    uVar7 = (uint)*pbVar5;
    pbVar10 = pbVar5 + 1;
    if (*pbVar5 < 0xc0) {
LAB_0015d452:
      iVar6 = FUN_00126290(lVar3,uVar7);
    }
    else {
      uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];
      if ((pbVar1 == pbVar10) || (bVar2 = pbVar5[1], (bVar2 & 0xc0) != 0x80)) {
        if (uVar7 < 0x80) goto LAB_0015d4fa;
        goto LAB_0015d452;
      }
      do {
        pbVar10 = pbVar10 + 1;
        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar10) break;
        bVar2 = *pbVar10;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))
      goto LAB_0015d452;
LAB_0015d4fa:
      uVar7 = 0xfffd;
      iVar6 = FUN_00126290(lVar3,0xfffd);
    }
  } while (iVar6 == 0);
  if (pbVar1 <= pbVar5) {
    return 0x65;
  }
  pcVar14 = (char *)param_1[4];
  pcVar16 = pcVar14;
LAB_0015d531:
  if ((long)((int)param_1[5] + -4) <= (long)pcVar16 - (long)pcVar14) {
    lVar9 = FUN_00138360(pcVar14,(long)((int)param_1[5] + 0x40));
    if (lVar9 == 0) {
      return 7;
    }
    *(int *)(param_1 + 5) = (int)param_1[5] + 0x40;
    lVar4 = param_1[4];
    param_1[4] = lVar9;
    pcVar16 = pcVar16 + (lVar9 - lVar4);
  }
  if (0x7f < (int)uVar7) {
    if ((int)uVar7 < 0x10000) {
      uVar12 = 0x3f1;
      lVar9 = -1;
      iVar13 = 0;
      iVar6 = 0xa2;
      iVar8 = 0xa2;
      do {
        iVar8 = iVar8 >> 1;
        if ((int)(uVar7 - uVar12) < 0) {
          iVar6 = iVar8 + -1;
          if (iVar6 < iVar13) goto LAB_0015d620;
        }
        else {
          iVar13 = iVar8 + 1;
          lVar9 = (long)iVar8;
          if (iVar6 < iVar13) goto LAB_0015d620;
        }
        iVar8 = iVar6 + iVar13;
        uVar12 = (uint)*(ushort *)(&DAT_001ef220 + (long)(iVar8 >> 1) * 4);
      } while( true );
    }
    if (uVar7 - 0x10400 < 0x28) {
      uVar7 = uVar7 + 0x28;
    }
    goto LAB_0015d817;
  }
  if (uVar7 - 0x41 < 0x1a) {
    uVar7 = uVar7 + 0x20;
    goto joined_r0x0015d68b;
  }
  if (uVar7 != 0) {
    *pcVar16 = (char)uVar7;
    pcVar16 = pcVar16 + 1;
  }
  goto LAB_0015d585;
LAB_0015d620:
  iVar6 = *(int *)(lVar3 + 8);
  if (((int)uVar7 <
       (int)((uint)(byte)(&UNK_001ef223)[lVar9 * 4] + (uint)*(ushort *)(&DAT_001ef220 + lVar9 * 4)))
     && (((byte)(&UNK_001ef222)[lVar9 * 4] & 1 & (*(ushort *)(&DAT_001ef220 + lVar9 * 4) ^ uVar7))
         == 0)) {
    uVar7 = *(ushort *)(&DAT_001ef180 + (ulong)((byte)(&UNK_001ef222)[lVar9 * 4] >> 1) * 2) + uVar7
            & 0xffff;
    if (iVar6 != 0) {
LAB_0015d679:
      uVar7 = FUN_00114260(uVar7,iVar6 == 2);
    }
joined_r0x0015d68b:
    if (uVar7 != 0) {
      if (0x7f < (int)uVar7) goto LAB_0015d868;
      *pcVar16 = (char)uVar7;
      pcVar16 = pcVar16 + 1;
    }
  }
  else {
    if (iVar6 != 0) goto LAB_0015d679;
LAB_0015d868:
    cVar11 = ((byte)uVar7 & 0x3f) + 0x80;
    bVar2 = (byte)((int)uVar7 >> 6);
    if ((int)uVar7 < 0x800) {
      pcVar16[1] = cVar11;
      *pcVar16 = bVar2 - 0x40;
      pcVar16 = pcVar16 + 2;
    }
    else if ((int)uVar7 < 0x10000) {
      pcVar16[1] = (bVar2 & 0x3f) + 0x80;
      *pcVar16 = (char)((int)uVar7 >> 0xc) + -0x20;
      pcVar16[2] = cVar11;
      pcVar16 = pcVar16 + 3;
    }
    else {
LAB_0015d817:
      *pcVar16 = ((byte)((int)uVar7 >> 0x12) & 7) - 0x10;
      pcVar16[1] = ((byte)((int)uVar7 >> 0xc) & 0x3f) + 0x80;
      pcVar16[3] = ((byte)uVar7 & 0x3f) + 0x80;
      pcVar16[2] = ((byte)((int)uVar7 >> 6) & 0x3f) + 0x80;
      pcVar16 = pcVar16 + 4;
    }
  }
LAB_0015d585:
  iVar6 = (int)pbVar10;
  iVar8 = iVar6;
  if (pbVar1 <= pbVar10) goto LAB_0015d76e;
  uVar7 = (uint)*pbVar10;
  pbVar15 = pbVar10 + 1;
  if (uVar7 < 0xc0) {
    iVar8 = FUN_00126290(lVar3,uVar7);
joined_r0x0015d5b2:
    pbVar10 = pbVar15;
    if (iVar8 == 0) goto LAB_0015d760;
  }
  else {
    uVar7 = (uint)(byte)(&DAT_001f5520)[uVar7 - 0xc0];
    if ((pbVar1 == pbVar15) || (bVar2 = pbVar10[1], (bVar2 & 0xc0) != 0x80)) {
      if (0x7f < uVar7) goto LAB_0015d72b;
    }
    else {
      do {
        pbVar15 = pbVar15 + 1;
        uVar7 = uVar7 * 0x40 + (bVar2 & 0x3f);
        if (pbVar1 == pbVar15) break;
        bVar2 = *pbVar15;
      } while ((bVar2 & 0xc0) == 0x80);
      if (((0x7f < uVar7) && ((uVar7 & 0xfffff800) != 0xd800)) && ((uVar7 & 0xfffffffe) != 0xfffe))
      {
LAB_0015d72b:
        iVar8 = FUN_00126290(lVar3,uVar7);
        pbVar10 = pbVar15;
        if (iVar8 != 0) goto LAB_0015d5b8;
        if (0x31 < uVar7 - 0x300) {
LAB_0015d760:
          iVar8 = (int)pbVar15;
LAB_0015d76e:
          *(int *)((long)param_1 + 0x14) = iVar8 - (int)param_1[1];
          *param_2 = param_1[4];
          *param_3 = (int)pcVar16 - (int)param_1[4];
          *param_4 = (int)pbVar5 - (int)param_1[1];
          *param_5 = iVar6 - (int)param_1[1];
          lVar3 = param_1[3];
          *(int *)(param_1 + 3) = (int)lVar3 + 1;
          *param_6 = (int)lVar3;
          return 0;
        }
        iVar8 = FUN_001262e0(uVar7);
        goto joined_r0x0015d5b2;
      }
    }
    iVar8 = FUN_00126290(lVar3,0xfffd);
    if (iVar8 == 0) goto LAB_0015d760;
    uVar7 = 0xfffd;
    pbVar10 = pbVar15;
  }
LAB_0015d5b8:
  pcVar14 = (char *)param_1[4];
  goto LAB_0015d531;
}

