
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void __regparm3 do_paint(Terminal *term,Context ctx,int may_optimise)

{
  int iVar1;
  int iVar2;
  wchar_t wVar3;
  termline *destline;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  void *ptr;
  termline *ptVar7;
  termchar *ptVar8;
  wchar_t *pwVar9;
  uint uVar10;
  ulong *puVar11;
  int iVar12;
  termchar *b;
  uint *puVar13;
  uint uVar14;
  uint uVar15;
  unicode_data *bchr;
  Context ctx_00;
  ulong *puVar16;
  int iVar17;
  wchar_t wVar18;
  int unaff_EDI;
  termline *ldata_1;
  int iVar19;
  int iVar20;
  int iVar21;
  bool bVar22;
  bool bVar23;
  ulong in_stack_ffffff74;
  int local_84;
  int local_80;
  termline *local_7c;
  int *local_78;
  wchar_t *local_6c;
  size_t local_60;
  uint local_58;
  termchar *local_54;
  uint local_4c;
  int local_40;
  termline *local_3c;
  int local_34;
  uint local_20;
  
  __x86_get_pc_thunk_di();
  local_6c = (wchar_t *)safemalloc(0x400,4);
  ptr = safemalloc(term->cols,0xc);
  iVar1 = term->rvideo;
  iVar2 = term->in_vbell;
  local_20 = term->cursor_on;
  if (local_20 != 0) {
    local_20 = 0x20000000;
    if (term->has_focus != 0) {
      if (term->cblinker == 0) {
        local_20 = 0x40000000;
        if (term->blink_cur != 0) {
          local_20 = 0;
        }
      }
      else {
        local_20 = 0x40000000;
      }
    }
    if (term->wrapnext != 0) {
      local_20 = local_20 | 0x10000000;
    }
  }
  iVar21 = (term->curs).y;
  ldata_1 = (termline *)(iVar21 - term->disptop);
  ptVar7 = lineptr(term,iVar21,0x139f,0);
  local_34 = (term->curs).x;
  ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1);
  if (ptVar8 == (termchar *)0x0) {
    ptVar8 = ptVar7->chars;
  }
  else {
    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];
  }
  if (0 < local_34) {
    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);
  }
  if (ptVar7->temporary != 0) {
    freeline(ptVar7);
  }
  ptVar7 = (termline *)term->dispcursy;
  if ((-1 < (int)ptVar7) &&
     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||
      (local_34 != iVar21)))) {
    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;
    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {
      iVar17 = term->cols;
    }
    else {
      iVar17 = term->cols;
      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;
    }
    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {
      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;
    }
    ptVar8->attr = ptVar8->attr | 0x3ffff;
    term->curstype = 0;
  }
  term->dispcursy = -1;
  term->dispcursx = -1;
  if (term->rows < 1) {
LAB_0003c0cc:
    safefree(ptr);
    safefree(local_6c);
    return;
  }
  local_60 = 0x400;
  local_3c = (termline *)0x0;
LAB_0003b700:
  iVar21 = (int)&local_3c->lattr + term->disptop;
  ptVar7 = lineptr(term,iVar21,0x13df,0);
  local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c);
  if (local_54 == (termchar *)0x0) {
    local_78 = (int *)0x0;
    local_54 = ptVar7->chars;
  }
  else {
    local_78 = term->post_bidi_cache[(int)local_3c].backward;
  }
  iVar17 = term->cols;
  local_7c = term->disptext[(int)local_3c];
  if (0 < iVar17) {
    local_84 = 0;
    iVar19 = 0;
    do {
      local_80 = local_84;
      if (local_78 != (int *)0x0) {
        local_80 = local_78[local_84];
      }
      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);
      uVar10 = *(uint *)((int)&local_54->attr + iVar19);
      if (term->ansi_colour == 0) {
        uVar10 = uVar10 & 0xfffc0000 | 0x20500;
      }
      if (term->xterm_256_colour == 0) {
        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {
          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;
        }
        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {
          uVar10 = uVar10 & 0xfffc01ff | 0x20400;
        }
      }
      uVar14 = wVar18 & 0xffffff00;
      if (uVar14 == 0xd900) {
        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];
      }
      else if (uVar14 == 0xda00) {
        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];
      }
      else if (uVar14 == 0xd800) {
        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];
      }
      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {
        uVar10 = uVar10 | 0x400000;
      }
      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;
      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {
        iVar17 = (term->selstart).y;
        if (term->seltype == ADDRTYPE_UNSPEC) {
          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {
            iVar17 = (term->selend).y;
            if (iVar21 < iVar17) goto LAB_0003b988;
            if (iVar21 == iVar17) {
              iVar17 = (term->selend).x;
              goto joined_r0x0003ba86;
            }
          }
        }
        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&
                (iVar21 <= (term->selend).y)) {
          iVar17 = (term->selend).x;
joined_r0x0003ba86:
          if (local_80 < iVar17) {
LAB_0003b988:
            uVar10 = uVar10 ^ 0x100000;
          }
        }
      }
      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {
        if ((term->has_focus != 0) && (term->tblinker != 0)) {
          wVar18 = term->ucsdata->unitab_line[0x20];
        }
        uVar10 = uVar10 & 0xffdfffff;
      }
      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);
      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {
        if ((wVar3 & 0x800000U) != 0) {
          uVar10 = uVar10 | 0x800000;
        }
      }
      else if ((uVar10 & 0x400000) == 0) {
        iVar17 = char_width(ctx_00,wVar18);
        if (iVar17 == 2) {
          local_7c = term->disptext[(int)local_3c];
          uVar10 = uVar10 | 0x800000;
        }
        else {
          local_7c = term->disptext[(int)local_3c];
        }
      }
      if ((local_34 == local_84) && (ldata_1 == local_3c)) {
        term->dispcursx = local_84;
        uVar10 = uVar10 | local_20;
        term->curstype = local_20;
        term->dispcursy = (int)local_3c;
      }
      local_84 = local_84 + 1;
      *(uint *)((int)ptr + iVar19 + 4) = uVar10;
      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;
      iVar17 = term->cols;
      *(wchar_t *)((int)ptr + iVar19) = wVar18;
      iVar19 = iVar19 + 0xc;
    } while (local_84 < iVar17);
    if (0 < iVar17) {
      ptVar8 = local_7c->chars;
      bVar4 = false;
      iVar19 = (int)ptr - (int)ptVar8;
      puVar11 = &ptVar8->attr;
      local_84 = 0;
      iVar21 = 0;
      do {
        while( true ) {
          iVar20 = iVar21;
          uVar10 = *puVar11;
          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);
          if ((int)uVar10 < 0) break;
          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&
             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {
            if (bVar4) goto LAB_0003bae8;
          }
          else {
            if ((!bVar4) && (local_84 < iVar20)) {
              puVar16 = &ptVar8[local_84].attr;
              do {
                *puVar16 = *puVar16 | 0x3ffff;
                puVar16 = puVar16 + 3;
              } while (puVar11 != puVar16);
              uVar10 = *puVar11;
            }
LAB_0003bae8:
            bVar4 = true;
            *puVar11 = uVar10 | 0x3ffff;
          }
          puVar11 = puVar11 + 3;
          iVar21 = iVar20 + 1;
          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;
        }
        local_84 = iVar20;
        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||
           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))
        goto LAB_0003bae8;
        puVar11 = puVar11 + 3;
        iVar21 = iVar20 + 1;
      } while (iVar17 != iVar20 + 1);
LAB_0003bb38:
      local_40 = 0;
      bVar4 = false;
      bVar23 = local_7c->lattr != ptVar7->lattr;
      local_58 = 0;
      local_4c = 0;
      iVar21 = 0;
      local_7c->lattr = ptVar7->lattr;
      local_80 = 0;
      bVar22 = bVar23;
      do {
        b = local_54 + local_80;
        puVar13 = (uint *)((int)ptr + local_80 * 0xc);
        uVar10 = *puVar13;
        uVar14 = puVar13[1];
        ptVar8 = local_7c->chars + local_80;
        bVar6 = true;
        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {
          bVar6 = bVar22;
        }
        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {
          uVar15 = uVar10 & 0xffffff00;
        }
        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;
        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {
          bchr = term->ucsdata;
          if (!bVar6 && bchr->dbcs_screenfont == 0) {
LAB_0003bd3e:
            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||
               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;
          }
          if (bVar22) goto LAB_0003bd5e;
          iVar17 = iVar21 * 4;
          iVar19 = iVar21 + 1;
LAB_0003bbca:
          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;
LAB_0003bbd6:
          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;
          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);
          bVar22 = iVar12 == 0;
          iVar20 = iVar21;
          bVar5 = true;
          if (iVar12 != 0) {
            bVar5 = bVar23;
          }
        }
        else {
          bchr = term->ucsdata;
          if (!bVar6 && bchr->dbcs_screenfont == 0) {
            bVar22 = true;
            goto LAB_0003bd3e;
          }
LAB_0003bd5e:
          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {
            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);
            if ((local_4c & 0x60000000) == 0) {
              bchr = term->ucsdata;
              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;
            }
            else {
              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);
              bchr = term->ucsdata;
              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;
            }
          }
          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))
          {
            iVar21 = bchr->dbcs_screenfont;
            local_58 = uVar10 & 0xffffff00;
          }
          else {
            iVar21 = bchr->dbcs_screenfont;
          }
          local_4c = uVar14;
          if (iVar21 == 0) {
            local_40 = local_80;
            iVar17 = 0;
            iVar19 = 1;
            iVar21 = 0;
            bVar23 = bVar6;
            goto LAB_0003bbca;
          }
          iVar17 = 0;
          iVar21 = 0;
          local_40 = local_80;
          iVar19 = 1;
          bVar4 = bVar23;
          bVar23 = bVar6;
          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;
LAB_0003bddd:
          bVar22 = true;
          iVar20 = iVar21;
          bVar5 = true;
        }
        iVar21 = iVar19;
        if ((int)local_60 <= iVar21) {
          local_60 = iVar20 + 0x100;
          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);
        }
        *(uint *)((int)local_6c + iVar17) = uVar10;
        iVar17 = b->cc_next;
        ptVar8 = b;
        if (iVar17 != 0) {
          do {
            while( true ) {
              iVar19 = iVar21;
              ptVar8 = ptVar8 + iVar17;
              wVar18 = ptVar8->chr;
              uVar15 = wVar18 & 0xffffff00;
              if (uVar15 == 0xd900) break;
              if (uVar15 != 0xda00) {
                if (uVar15 == 0xd800) {
                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];
                }
                goto LAB_0003bf4c;
              }
              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];
              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;
LAB_0003bf9e:
              local_60 = iVar19 + 0x100;
              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);
              local_6c[iVar19] = wVar18;
              iVar17 = ptVar8->cc_next;
              iVar21 = iVar19 + 1;
              if (iVar17 == 0) goto LAB_0003bfcc;
            }
            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];
LAB_0003bf4c:
            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;
LAB_0003bf53:
            local_6c[iVar19] = wVar18;
            iVar17 = ptVar8->cc_next;
            iVar21 = iVar19 + 1;
          } while (iVar17 != 0);
LAB_0003bfcc:
          iVar21 = iVar19 + 1;
          local_4c = local_4c | 0x80000000;
        }
        if (bVar22) {
          copy_termchar(term->disptext[(int)local_3c],local_80,b);
          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;
          ptVar8->chr = uVar10;
          uVar10 = uVar14 | 0x80000000;
          if (local_40 != local_80) {
            uVar10 = uVar14;
          }
          ptVar8->attr = uVar10;
        }
        iVar17 = local_80 + 1;
        if ((uVar14 & 0x400000) == 0) {
LAB_0003bc62:
          bVar23 = bVar5;
          if (term->cols <= iVar17) goto LAB_0003c09d;
        }
        else {
          if (term->cols <= iVar17) {
            iVar17 = local_80 + 2;
            goto LAB_0003bc62;
          }
          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {
                    /* WARNING: Subroutine does not return */
            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,
                          (char *)(unaff_EDI + 0x46d43));
          }
          destline = term->disptext[(int)local_3c];
          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);
          bVar23 = true;
          if (iVar19 != 0) {
            bVar23 = bVar5;
          }
          bVar5 = bVar23;
          copy_termchar(destline,iVar17,b + 1);
          iVar17 = local_80 + 2;
          bVar23 = bVar5;
          if (term->cols <= iVar17) goto LAB_0003c09d;
        }
        local_7c = term->disptext[(int)local_3c];
        local_80 = iVar17;
        bVar22 = bVar6;
      } while( true );
    }
  }
  local_7c->lattr = ptVar7->lattr;
  goto LAB_0003c0a8;
LAB_0003c09d:
  if ((bVar5) &&
     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),
     (local_4c & 0x60000000) != 0)) {
    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);
  }
LAB_0003c0a8:
  if (ptVar7->temporary != 0) {
    freeline(ptVar7);
  }
  local_3c = (termline *)((int)&local_3c->lattr + 1);
  if (term->rows <= (int)local_3c) goto LAB_0003c0cc;
  goto LAB_0003b700;
}



void __regparm3 FUN_0003b550(int param_1)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  short *psVar10;
  uint uVar11;
  int iVar12;
  uint *puVar13;
  uint *puVar14;
  uint uVar15;
  uint uVar16;
  undefined4 extraout_EDX;
  int iVar17;
  int iVar18;
  uint uVar19;
  int unaff_EDI;
  int iVar20;
  int iVar21;
  int iVar22;
  bool bVar23;
  bool bVar24;
  int local_84;
  int local_80;
  short *local_7c;
  int local_78;
  int local_6c;
  int local_60;
  uint local_58;
  int local_54;
  uint local_4c;
  int local_40;
  int local_3c;
  int local_34;
  uint local_20;
  
  FUN_00038693();
  local_6c = FUN_0002d1f0(0x400,4);
  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);
  iVar2 = *(int *)(param_1 + 0xa8);
  iVar3 = *(int *)(param_1 + 0x138);
  local_20 = *(uint *)(param_1 + 0xb0);
  if (local_20 != 0) {
    local_20 = 0x20000000;
    if (*(int *)(param_1 + 0x134) != 0) {
      if (*(int *)(param_1 + 0xbc) == 0) {
        local_20 = 0x40000000;
        if (*(int *)(param_1 + 0x1100) != 0) {
          local_20 = 0;
        }
      }
      else {
        local_20 = 0x40000000;
      }
    }
    if (*(int *)(param_1 + 0x8c) != 0) {
      local_20 = local_20 | 0x10000000;
    }
  }
  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);
  iVar8 = FUN_0003adf0(0);
  local_34 = *(int *)(param_1 + 0x70);
  iVar9 = FUN_00039860(iVar20);
  if (iVar9 == 0) {
    iVar9 = *(int *)(iVar8 + 0x14);
  }
  else {
    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);
  }
  if (0 < local_34) {
    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);
  }
  if (*(int *)(iVar8 + 0xc) != 0) {
    FUN_00039830();
  }
  iVar9 = *(int *)(param_1 + 0x20);
  if ((-1 < iVar9) &&
     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)
       ) || (local_34 != iVar8)))) {
    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);
    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {
      iVar9 = *(int *)(param_1 + 300);
    }
    else {
      iVar9 = *(int *)(param_1 + 300);
      piVar1[-2] = piVar1[-2] | 0x3ffff;
    }
    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {
      piVar1[4] = piVar1[4] | 0x3ffff;
    }
    piVar1[1] = piVar1[1] | 0x3ffff;
    *(undefined4 *)(param_1 + 0x24) = 0;
  }
  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;
  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;
  if (*(int *)(param_1 + 0x128) < 1) {
LAB_0003c0cc:
    FUN_0002da80(iVar7);
    FUN_0002da80(local_6c);
    return;
  }
  local_60 = 0x400;
  local_3c = 0;
LAB_0003b700:
  iVar9 = *(int *)(param_1 + 0x10) + local_3c;
  psVar10 = (short *)FUN_0003adf0(0);
  local_54 = FUN_00039860(local_3c);
  if (local_54 == 0) {
    local_78 = 0;
    local_54 = *(int *)(psVar10 + 10);
  }
  else {
    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);
  }
  iVar17 = *(int *)(param_1 + 300);
  iVar8 = local_3c * 4;
  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);
  if (0 < iVar17) {
    local_84 = 0;
    iVar21 = 0;
    do {
      local_80 = local_84;
      if (local_78 != 0) {
        local_80 = *(int *)(local_78 + local_84 * 4);
      }
      uVar15 = *(uint *)(local_54 + iVar21);
      uVar11 = *(uint *)(local_54 + 4 + iVar21);
      if (*(int *)(param_1 + 0x10d4) == 0) {
        uVar11 = uVar11 & 0xfffc0000 | 0x20500;
      }
      if (*(int *)(param_1 + 0x1170) == 0) {
        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {
          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;
        }
        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {
          uVar11 = uVar11 & 0xfffc01ff | 0x20400;
        }
      }
      uVar16 = uVar15 & 0xffffff00;
      if (uVar16 == 0xd900) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);
      }
      else if (uVar16 == 0xda00) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);
      }
      else if (uVar16 == 0xd800) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);
      }
      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {
        uVar11 = uVar11 | 0x400000;
      }
      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;
      if (*(int *)(param_1 + 0xe48) - 2U < 2) {
        iVar17 = *(int *)(param_1 + 0xe54);
        if (*(int *)(param_1 + 0xe4c) == 0) {
          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {
            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;
            if (iVar9 == *(int *)(param_1 + 0xe5c)) {
              iVar17 = *(int *)(param_1 + 0xe60);
              goto joined_r0x0003ba86;
            }
          }
        }
        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&
                (iVar9 <= *(int *)(param_1 + 0xe5c))) {
          iVar17 = *(int *)(param_1 + 0xe60);
joined_r0x0003ba86:
          if (local_80 < iVar17) {
LAB_0003b988:
            uVar11 = uVar11 ^ 0x100000;
          }
        }
      }
      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {
        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {
          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);
        }
        uVar11 = uVar11 & 0xffdfffff;
      }
      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&
         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))
      {
        if ((uVar16 & 0x800000) != 0) {
          uVar11 = uVar11 | 0x800000;
        }
      }
      else if ((uVar11 & 0x400000) == 0) {
        iVar17 = FUN_0005a120(extraout_EDX,uVar15);
        if (iVar17 == 2) {
          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
          uVar11 = uVar11 | 0x800000;
        }
        else {
          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
        }
      }
      if ((local_34 == local_84) && (iVar20 == local_3c)) {
        *(int *)(param_1 + 0x1c) = local_84;
        uVar11 = uVar11 | local_20;
        *(uint *)(param_1 + 0x24) = local_20;
        *(int *)(param_1 + 0x20) = local_3c;
      }
      local_84 = local_84 + 1;
      *(uint *)(iVar7 + 4 + iVar21) = uVar11;
      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;
      iVar17 = *(int *)(param_1 + 300);
      *(uint *)(iVar7 + iVar21) = uVar15;
      iVar21 = iVar21 + 0xc;
    } while (local_84 < iVar17);
    if (0 < iVar17) {
      iVar9 = *(int *)(local_7c + 10);
      bVar4 = false;
      iVar18 = iVar7 - iVar9;
      puVar13 = (uint *)(iVar9 + 4);
      local_84 = 0;
      iVar21 = 0;
      do {
        while( true ) {
          iVar22 = iVar21;
          uVar15 = *puVar13;
          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);
          if ((int)uVar15 < 0) break;
          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))
          {
            if (bVar4) goto LAB_0003bae8;
          }
          else {
            if ((!bVar4) && (local_84 < iVar22)) {
              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);
              do {
                *puVar14 = *puVar14 | 0x3ffff;
                puVar14 = puVar14 + 3;
              } while (puVar13 != puVar14);
              uVar15 = *puVar13;
            }
LAB_0003bae8:
            bVar4 = true;
            *puVar13 = uVar15 | 0x3ffff;
          }
          puVar13 = puVar13 + 3;
          iVar21 = iVar22 + 1;
          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;
        }
        local_84 = iVar22;
        if ((uVar11 != puVar13[-1]) ||
           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))
        goto LAB_0003bae8;
        puVar13 = puVar13 + 3;
        iVar21 = iVar22 + 1;
      } while (iVar17 != iVar22 + 1);
LAB_0003bb38:
      local_40 = 0;
      bVar4 = false;
      bVar24 = *local_7c != *psVar10;
      local_58 = 0;
      local_4c = 0;
      iVar9 = 0;
      *local_7c = *psVar10;
      local_80 = 0;
      bVar23 = bVar24;
      do {
        iVar17 = local_80 * 0xc;
        puVar13 = (uint *)(local_54 + iVar17);
        uVar15 = *(uint *)(iVar7 + iVar17);
        uVar11 = ((uint *)(iVar7 + iVar17))[1];
        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);
        bVar6 = true;
        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {
          bVar6 = bVar23;
        }
        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {
          uVar16 = uVar15 & 0xffffff00;
        }
        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;
        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {
          iVar21 = *(int *)(param_1 + 0x1090);
          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {
LAB_0003bd3e:
            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||
               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;
          }
          if (bVar23) goto LAB_0003bd5e;
          iVar21 = iVar9 * 4;
          iVar18 = iVar9 + 1;
LAB_0003bbca:
          if (uVar15 != *puVar14) goto LAB_0003bddd;
LAB_0003bbd6:
          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;
          iVar12 = FUN_00039090();
          bVar23 = iVar12 == 0;
          iVar22 = iVar9;
          bVar5 = true;
          if (iVar12 != 0) {
            bVar5 = bVar24;
          }
        }
        else {
          iVar21 = *(int *)(param_1 + 0x1090);
          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {
            bVar23 = true;
            goto LAB_0003bd3e;
          }
LAB_0003bd5e:
          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {
            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
            if ((local_4c & 0x60000000) == 0) {
              iVar21 = *(int *)(param_1 + 0x1090);
              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14
                                                  ));
            }
            else {
              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
              iVar21 = *(int *)(param_1 + 0x1090);
              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14
                                                  ));
            }
          }
          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))
          {
            iVar9 = *(int *)(iVar21 + 4);
            local_58 = uVar15 & 0xffffff00;
          }
          else {
            iVar9 = *(int *)(iVar21 + 4);
          }
          local_4c = uVar11;
          if (iVar9 == 0) {
            local_40 = local_80;
            iVar21 = 0;
            iVar18 = 1;
            iVar9 = 0;
            bVar24 = bVar6;
            goto LAB_0003bbca;
          }
          iVar21 = 0;
          iVar9 = 0;
          local_40 = local_80;
          iVar18 = 1;
          bVar4 = bVar24;
          bVar24 = bVar6;
          if (uVar15 == *puVar14) goto LAB_0003bbd6;
LAB_0003bddd:
          bVar23 = true;
          iVar22 = iVar9;
          bVar5 = true;
        }
        iVar9 = iVar18;
        if (local_60 <= iVar9) {
          local_60 = iVar22 + 0x100;
          local_6c = FUN_0002d5f0(local_6c,local_60,4);
        }
        *(uint *)(local_6c + iVar21) = uVar15;
        uVar16 = puVar13[2];
        if (uVar16 != 0) {
          do {
            while( true ) {
              iVar21 = iVar9;
              puVar13 = puVar13 + uVar16 * 3;
              uVar16 = *puVar13;
              uVar19 = uVar16 & 0xffffff00;
              if (uVar19 == 0xd900) break;
              if (uVar19 != 0xda00) {
                if (uVar19 == 0xd800) {
                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);
                }
                goto LAB_0003bf4c;
              }
              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);
              if (iVar21 + 1 < local_60) goto LAB_0003bf53;
LAB_0003bf9e:
              local_60 = iVar21 + 0x100;
              local_6c = FUN_0002d5f0(local_6c,local_60,4);
              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;
              uVar16 = puVar13[2];
              iVar9 = iVar21 + 1;
              if (uVar16 == 0) goto LAB_0003bfcc;
            }
            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);
LAB_0003bf4c:
            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;
LAB_0003bf53:
            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;
            uVar16 = puVar13[2];
            iVar9 = iVar21 + 1;
          } while (uVar16 != 0);
LAB_0003bfcc:
          iVar9 = iVar21 + 1;
          local_4c = local_4c | 0x80000000;
        }
        if (bVar23) {
          FUN_00039710();
          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));
          *puVar13 = uVar15;
          uVar15 = uVar11 | 0x80000000;
          if (local_40 != local_80) {
            uVar15 = uVar11;
          }
          puVar13[1] = uVar15;
        }
        iVar17 = local_80 + 1;
        if ((uVar11 & 0x400000) == 0) {
LAB_0003bc62:
          bVar24 = bVar5;
          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;
        }
        else {
          if (*(int *)(param_1 + 300) <= iVar17) {
            iVar17 = local_80 + 2;
            goto LAB_0003bc62;
          }
          if ((iVar20 == local_3c) && (local_34 == iVar17)) {
                    /* WARNING: Subroutine does not return */
            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,
                          (char *)(unaff_EDI + 0x46d43));
          }
          iVar17 = FUN_000390d0();
          bVar24 = true;
          if (iVar17 != 0) {
            bVar24 = bVar5;
          }
          bVar5 = bVar24;
          FUN_00039710();
          iVar17 = local_80 + 2;
          bVar24 = bVar5;
          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;
        }
        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
        local_80 = iVar17;
        bVar23 = bVar6;
      } while( true );
    }
  }
  *local_7c = *psVar10;
  goto LAB_0003c0a8;
LAB_0003c09d:
  if ((bVar5) &&
     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),
     (local_4c & 0x60000000) != 0)) {
    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
  }
LAB_0003c0a8:
  if (*(int *)(psVar10 + 6) != 0) {
    FUN_00039830();
  }
  local_3c = local_3c + 1;
  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;
  goto LAB_0003b700;
}


PUSH EBP
MOV EBP,EAX
PUSH EDI
CALL 0x00038693
ADD EDI,0x7524b
PUSH ESI
PUSH EBX
SUB ESP,0x84
MOV dword ptr [ESP + 0x6c],EDX
MOV dword ptr [ESP + 0x50],EDI
MOV EBX,EDI
PUSH 0x4
PUSH 0x400
CALL 0x0002d1f0
MOV dword ptr [ESP + 0x30],EAX
POP EAX
POP EDX
PUSH 0xc
PUSH dword ptr [EBP + 0x12c]
CALL 0x0002d1f0
MOV ECX,dword ptr [EBP + 0xa8]
MOV EBX,dword ptr [EBP + 0x138]
MOV dword ptr [ESP + 0x54],EAX
ADD ESP,0x10
TEST ECX,ECX
SETZ DL
TEST EBX,EBX
SETZ AL
CMP DL,AL
SETNZ AL
MOVZX EAX,AL
SHL EAX,0x14
MOV dword ptr [ESP + 0x5c],EAX
MOV EAX,dword ptr [EBP + 0xb0]
MOV dword ptr [ESP + 0x6c],EAX
TEST EAX,EAX
JZ 0x0003b5f2
MOV EAX,dword ptr [EBP + 0x134]
MOV dword ptr [ESP + 0x6c],0x20000000
TEST EAX,EAX
JNZ 0x0003c27f
MOV EDI,dword ptr [EBP + 0x8c]
TEST EDI,EDI
JZ 0x0003b5f2
OR dword ptr [ESP + 0x6c],0x10000000
MOV EDX,dword ptr [EBP + 0x6c]
SUB ESP,0xc
MOV ECX,0x139f
MOV EAX,EBP
MOV EDI,EDX
SUB EDI,dword ptr [EBP + 0x10]
MOV dword ptr [ESP + 0x74],EDI
PUSH 0x0
CALL 0x0003adf0
MOV ESI,dword ptr [EBP + 0x70]
MOV dword ptr [ESP],EDI
LEA ECX,[EAX + 0x14]
LEA EDX,[EAX + 0x8]
MOV EBX,EAX
MOV EAX,EBP
MOV dword ptr [ESP + 0x68],ESI
CALL 0x00039860
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0003c2bb
MOV EDX,dword ptr [EBP + 0x10cc]
SHL EDI,0x4
ADD EDX,EDI
MOV EDX,dword ptr [EDX + 0x8]
MOV EDI,dword ptr [EDX + ESI*0x4]
MOV dword ptr [ESP + 0x58],EDI
MOV EDI,dword ptr [ESP + 0x58]
TEST EDI,EDI
JLE 0x0003b666
LEA EDX,[EDI + EDI*0x2]
CMP dword ptr [EAX + EDX*0x4],0xdfff
SETZ AL
MOVZX EAX,AL
SUB EDI,EAX
MOV dword ptr [ESP + 0x58],EDI
MOV ESI,dword ptr [EBX + 0xc]
TEST ESI,ESI
JNZ 0x0003c2af
MOV EAX,dword ptr [EBP + 0x20]
TEST EAX,EAX
JS 0x0003b6cc
MOV EDX,dword ptr [EBP + 0x1c]
MOV EDI,dword ptr [ESP + 0x6c]
CMP dword ptr [EBP + 0x24],EDI
JNZ 0x0003b68e
CMP dword ptr [ESP + 0x68],EAX
JZ 0x0003c2f6
MOV ECX,dword ptr [EBP + 0x18]
MOV ECX,dword ptr [ECX + EAX*0x4]
LEA EAX,[EDX + EDX*0x2]
MOV ECX,dword ptr [ECX + 0x14]
LEA EAX,[ECX + EAX*0x4]
TEST EDX,EDX
JLE 0x0003b6ad
CMP dword ptr [EAX],0xdfff
JZ 0x0003c2dc
MOV EDI,dword ptr [EBP + 0x12c]
LEA ECX,[EDI + -0x1]
CMP ECX,EDX
JG 0x0003c296
OR dword ptr [EAX + 0x4],0x3ffff
MOV dword ptr [EBP + 0x24],0x0
MOV EBX,dword ptr [EBP + 0x128]
MOV dword ptr [EBP + 0x20],0xffffffff
MOV dword ptr [EBP + 0x1c],0xffffffff
TEST EBX,EBX
JLE 0x0003c0cc
MOV dword ptr [ESP + 0x2c],0x400
MOV dword ptr [ESP + 0x50],0x0
LEA ESI,[ESI]
NOP
MOV EDI,dword ptr [ESP + 0x50]
MOV EAX,dword ptr [EBP + 0x10]
SUB ESP,0xc
MOV ECX,0x13df
ADD EAX,EDI
MOV dword ptr [ESP + 0x28],EAX
MOV EDX,EAX
MOV EAX,EBP
PUSH 0x0
CALL 0x0003adf0
MOV dword ptr [ESP],EDI
MOV dword ptr [ESP + 0x70],EAX
LEA ECX,[EAX + 0x14]
LEA EDX,[EAX + 0x8]
MOV EAX,EBP
CALL 0x00039860
MOV dword ptr [ESP + 0x48],EAX
ADD ESP,0x10
TEST EAX,EAX
JZ 0x0003c258
MOV EAX,dword ptr [EBP + 0x10cc]
SHL EDI,0x4
ADD EAX,EDI
MOV EAX,dword ptr [EAX + 0xc]
MOV dword ptr [ESP + 0x14],EAX
MOV EDI,dword ptr [ESP + 0x50]
MOV ESI,dword ptr [EBP + 0x12c]
LEA EAX,[EDI*0x4 + 0x0]
MOV dword ptr [ESP + 0x30],EAX
MOV EAX,dword ptr [EBP + 0x18]
MOV ECX,dword ptr [EAX + EDI*0x4]
TEST ESI,ESI
JLE 0x0003c270
CMP dword ptr [ESP + 0x68],EDI
MOV dword ptr [ESP + 0x8],0x0
MOV EDX,ESI
SETZ byte ptr [ESP + 0x18]
XOR EDI,EDI
MOV dword ptr [ESP + 0x10],ECX
JMP 0x0003b846
MOV EAX,dword ptr [EBP + 0xc4]
TEST EAX,EAX
JZ 0x0003b7d8
TEST EDX,0x200000
JZ 0x0003b7d8
MOV EBX,dword ptr [EBP + 0x134]
TEST EBX,EBX
JZ 0x0003b7d2
MOV ECX,dword ptr [EBP + 0xc0]
TEST ECX,ECX
JZ 0x0003b7d2
MOV EAX,dword ptr [EBP + 0x1090]
MOV ESI,dword ptr [EAX + 0x490]
AND EDX,0xffdfffff
MOV EBX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EBX + 0x14]
ADD EAX,EDI
CMP dword ptr [EAX],ESI
JZ 0x0003b998
TEST EDX,0x400000
JZ 0x0003b9c0
MOV ECX,dword ptr [ESP + 0x8]
CMP dword ptr [ESP + 0x58],ECX
JNZ 0x0003b819
CMP byte ptr [ESP + 0x18],0x0
JZ 0x0003b819
MOV EAX,dword ptr [ESP + 0x6c]
MOV dword ptr [EBP + 0x1c],ECX
OR EDX,EAX
MOV dword ptr [EBP + 0x24],EAX
MOV EAX,dword ptr [ESP + 0x50]
MOV dword ptr [EBP + 0x20],EAX
MOV EAX,dword ptr [ESP + 0x44]
ADD dword ptr [ESP + 0x8],0x1
MOV dword ptr [EAX + EDI*0x1 + 0x4],EDX
MOV dword ptr [EAX + EDI*0x1 + 0x8],0x0
MOV EDX,dword ptr [EBP + 0x12c]
MOV dword ptr [EAX + EDI*0x1],ESI
MOV EAX,dword ptr [ESP + 0x8]
ADD EDI,0xc
CMP EDX,EAX
JLE 0x0003ba98
MOV EAX,dword ptr [ESP + 0x8]
MOV EBX,dword ptr [ESP + 0x14]
MOV dword ptr [ESP + 0xc],EAX
TEST EBX,EBX
JZ 0x0003b85d
MOV EAX,dword ptr [EBX + EAX*0x4]
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [ESP + 0x38]
MOV ECX,dword ptr [EBP + 0x10d4]
MOV ESI,dword ptr [EAX + EDI*0x1]
MOV EAX,dword ptr [EAX + EDI*0x1 + 0x4]
TEST ECX,ECX
JNZ 0x0003b87c
AND EAX,0xfffc0000
OR EAX,0x20500
MOV EBX,dword ptr [EBP + 0x1170]
TEST EBX,EBX
JNZ 0x0003b8ca
MOV EBX,EAX
MOV ECX,EAX
AND EBX,0x1ff
AND ECX,0xfffffe00
SUB EBX,0x10
OR CH,0x1
CMP EBX,0xf0
CMOVC EAX,ECX
MOV ECX,EAX
MOV EBX,EAX
SHR ECX,0x9
AND EBX,0xfffc01ff
AND ECX,0x1ff
OR EBX,0x20400
SUB ECX,0x10
CMP ECX,0xf0
CMOVC EAX,EBX
MOV ECX,ESI
XOR CL,CL
CMP ECX,0xd900
JZ 0x0003ba20
CMP ECX,0xda00
JZ 0x0003ba40
CMP ECX,0xd800
JZ 0x0003ba00
SUB EDX,0x1
CMP EDX,dword ptr [ESP + 0x8]
JLE 0x0003b910
MOV EDX,dword ptr [ESP + 0x38]
CMP dword ptr [EDX + EDI*0x1 + 0xc],0xdfff
JNZ 0x0003b910
OR EAX,0x400000
NOP
XOR EAX,dword ptr [ESP + 0x5c]
MOV EDX,EAX
MOV EAX,dword ptr [EBP + 0xe48]
SUB EAX,0x2
CMP EAX,0x1
JA 0x0003b7a0
MOV ECX,dword ptr [EBP + 0xe4c]
MOV EAX,dword ptr [EBP + 0xe54]
TEST ECX,ECX
JNZ 0x0003ba58
CMP dword ptr [ESP + 0x1c],EAX
JG 0x0003b960
JNZ 0x0003b7a0
MOV EAX,dword ptr [ESP + 0xc]
CMP dword ptr [EBP + 0xe58],EAX
JG 0x0003b7a0
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [ESP + 0x1c]
CMP EAX,dword ptr [EBP + 0xe5c]
JL 0x0003b988
JNZ 0x0003b7a0
MOV EAX,dword ptr [ESP + 0xc]
CMP EAX,dword ptr [EBP + 0xe60]
JGE 0x0003b7a0
LEA ESI,[ESI]
XOR EDX,0x100000
JMP 0x0003b7a0
MOV EAX,dword ptr [EAX + 0x4]
MOV ECX,EAX
AND ECX,0xf7fffff
CMP ECX,EDX
JNZ 0x0003b7e9
MOV ECX,EDX
OR ECX,0x800000
TEST EAX,0x800000
CMOVNZ EDX,ECX
JMP 0x0003b7f5
MOV dword ptr [ESP + 0xc],EDX
SUB ESP,0x8
PUSH ESI
PUSH dword ptr [ESP + 0x70]
MOV EBX,dword ptr [ESP + 0x58]
CALL 0x0005a120
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
CMP EAX,0x2
JZ 0x0003c170
MOV EAX,dword ptr [EBP + 0x18]
MOV EBX,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [EAX + EBX*0x1]
MOV dword ptr [ESP + 0x10],EAX
JMP 0x0003b7f5
MOV ECX,dword ptr [EBP + 0x1090]
MOV EBX,ESI
MOVZX ESI,BL
MOV ESI,dword ptr [ECX + ESI*0x4 + 0x410]
JMP 0x0003b8f2
MOV ECX,dword ptr [EBP + 0x1090]
MOV EBX,ESI
MOVZX ESI,BL
MOV ESI,dword ptr [ECX + ESI*0x4 + 0xc10]
JMP 0x0003b8f2
MOV ECX,dword ptr [EBP + 0x1090]
MOV EBX,ESI
MOVZX ESI,BL
MOV ESI,dword ptr [ECX + ESI*0x4 + 0x10]
JMP 0x0003b8f2
MOV EBX,dword ptr [ESP + 0x1c]
CMP EBX,EAX
JL 0x0003b7a0
MOV EAX,dword ptr [ESP + 0xc]
CMP EAX,dword ptr [EBP + 0xe58]
JL 0x0003b7a0
CMP EBX,dword ptr [EBP + 0xe5c]
JG 0x0003b7a0
CMP EAX,dword ptr [EBP + 0xe60]
JGE 0x0003b7a0
JMP 0x0003b988
MOV ESI,EDX
MOV ECX,dword ptr [ESP + 0x10]
TEST EDX,EDX
JLE 0x0003c270
MOV EDX,dword ptr [ECX + 0x14]
MOV EBX,dword ptr [ESP + 0x44]
MOV dword ptr [ESP + 0xc],ESI
XOR EDI,EDI
MOV dword ptr [ESP + 0x18],EBP
XOR ESI,ESI
SUB EBX,EDX
MOV dword ptr [ESP + 0x10],EDX
LEA EAX,[EDX + 0x4]
MOV dword ptr [ESP + 0x8],0x0
MOV EBP,EBX
MOV dword ptr [ESP + 0x14],ECX
JMP 0x0003bb01
CMP EBX,ECX
JZ 0x0003be58
TEST ESI,ESI
JZ 0x0003be20
OR EDX,0x3ffff
MOV ESI,0x1
MOV dword ptr [EAX],EDX
ADD EDI,0x1
ADD EAX,0xc
CMP dword ptr [ESP + 0xc],EDI
JZ 0x0003bb38
MOV EDX,dword ptr [EAX]
MOV ECX,dword ptr [EAX + -0x4]
MOV EBX,dword ptr [EBP + EAX*0x1 + -0x4]
TEST EDX,EDX
JNS 0x0003bad8
MOV dword ptr [ESP + 0x8],EDI
CMP EBX,ECX
JNZ 0x0003bae8
MOV ECX,EDX
XOR ESI,ESI
AND ECX,0xfffffff
CMP dword ptr [EBP + EAX*0x1],ECX
JNZ 0x0003bae8
ADD EDI,0x1
ADD EAX,0xc
CMP dword ptr [ESP + 0xc],EDI
JNZ 0x0003bb01
LEA ESI,[ESI]
MOV ECX,dword ptr [ESP + 0x14]
MOV EAX,dword ptr [ESP + 0x60]
XOR EBX,EBX
MOV dword ptr [ESP + 0x4c],0x0
MOV EBP,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x54],0x0
MOVZX EAX,word ptr [EAX]
CMP word ptr [ECX],AX
MOV dword ptr [ESP + 0x34],0x0
SETNZ BL
MOV dword ptr [ESP + 0x40],0x0
XOR EDI,EDI
MOV dword ptr [ESP + 0x1c],EBX
MOV word ptr [ECX],AX
MOV dword ptr [ESP + 0x18],EBX
MOV dword ptr [ESP + 0xc],0x0
JMP 0x0003bc78
MOV EDX,dword ptr [ESP + 0xc]
TEST EDX,EDX
JLE 0x0003bba3
MOV EDX,dword ptr [ECX + -0x4]
TEST EDX,EDX
JNZ 0x0003bd2a
MOV ECX,dword ptr [EBP + 0x1090]
MOV EDX,dword ptr [ESP + 0x1c]
OR EDX,dword ptr [ECX + 0x4]
JZ 0x0003bd3e
TEST EBX,EBX
JNZ 0x0003bd5e
LEA ESI,[EDI*0x4 + 0x0]
MOV EBX,EDI
ADD EDI,0x1
MOV EDX,dword ptr [ESP + 0x8]
CMP EDX,dword ptr [EAX]
JNZ 0x0003bddd
MOV EDX,dword ptr [ESP + 0x14]
XOR EDX,dword ptr [EAX + 0x4]
AND EDX,0xfffffff
JNZ 0x0003bddd
MOV EDX,dword ptr [ESP + 0x10]
CALL 0x00039090
XOR ECX,ECX
CMP EAX,0x1
SETC CL
TEST EAX,EAX
MOV EAX,0x1
CMOVNZ EAX,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x28],ECX
MOV dword ptr [ESP + 0x18],EAX
CMP dword ptr [ESP + 0x2c],EDI
JLE 0x0003bdf7
MOV EAX,dword ptr [ESP + 0x20]
MOV EDX,dword ptr [ESP + 0x8]
MOV dword ptr [EAX + ESI*0x1],EDX
MOV EAX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EAX + 0x8]
TEST EAX,EAX
JNZ 0x0003bf20
MOV ECX,dword ptr [ESP + 0x28]
TEST ECX,ECX
JNZ 0x0003bed0
MOV EDX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [EBP + 0x12c]
LEA EBX,[EDX + 0x1]
TEST dword ptr [ESP + 0x14],0x400000
JZ 0x0003bc62
CMP EBX,EAX
JL 0x0003c030
ADD EDX,0x2
MOV EBX,EDX
CMP EBX,EAX
JGE 0x0003c09d
MOV EAX,dword ptr [EBP + 0x18]
MOV EDX,dword ptr [ESP + 0x30]
MOV dword ptr [ESP + 0xc],EBX
MOV ECX,dword ptr [EAX + EDX*0x1]
MOV EAX,dword ptr [ESP + 0xc]
LEA EAX,[EAX + EAX*0x2]
LEA EBX,[EAX*0x4 + 0x0]
MOV EAX,dword ptr [ESP + 0x38]
MOV dword ptr [ESP + 0x3c],EBX
ADD EAX,EBX
MOV dword ptr [ESP + 0x10],EAX
MOV EAX,dword ptr [ESP + 0x44]
ADD EAX,EBX
MOV ESI,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [ECX + 0x14]
MOV ECX,EDX
MOV dword ptr [ESP + 0x8],ESI
ADD EAX,EBX
MOV dword ptr [ESP + 0x14],EDX
MOV EBX,dword ptr [EAX + 0x4]
XOR ECX,EBX
MOV dword ptr [ESP + 0x28],EBX
MOV EBX,dword ptr [EBP + 0x106c]
AND ECX,0x400000
MOV ECX,0x1
CMOVZ ECX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0x24],EBX
MOV dword ptr [ESP + 0x1c],ECX
MOV ECX,ESI
AND ESI,0xfffffc00
CMP ESI,0xd800
JZ 0x0003be80
AND ECX,0xfffffe00
MOV EBX,ECX
XOR ECX,ECX
CMP EBX,0xf000
JZ 0x0003be80
MOV EBX,0x1
CMP ECX,dword ptr [ESP + 0x34]
JNZ 0x0003bd1b
XOR EBX,EBX
MOV ECX,dword ptr [ESP + 0x14]
XOR ECX,dword ptr [ESP + 0x40]
TEST dword ptr [ESP + 0x24],ECX
SETNZ BL
MOV ECX,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [ECX + 0x8]
TEST EDX,EDX
JZ 0x0003bb90
MOV ECX,dword ptr [EBP + 0x1090]
MOV EBX,dword ptr [ESP + 0x1c]
OR EBX,dword ptr [ECX + 0x4]
JNZ 0x0003bd5e
MOV EBX,0x1
MOV EDX,dword ptr [ESP + 0x8]
CMP EDX,dword ptr [EAX]
JZ 0x0003c0f8
TEST byte ptr [ESP + 0x18],0x1
JNZ 0x0003bbb6
CMP EDI,0x1
JNZ 0x0003bbb6
TEST EDI,EDI
JZ 0x0003bd73
MOV EDX,dword ptr [ESP + 0x54]
OR EDX,dword ptr [ESP + 0x18]
AND EDX,0x1
JNZ 0x0003c118
CMP ESI,0xd800
JZ 0x0003be90
MOV EDX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x34],0x0
AND EDX,0xfffffe00
CMP EDX,0xf000
JZ 0x0003be90
MOV EBX,dword ptr [ECX + 0x4]
TEST EBX,EBX
JZ 0x0003bea9
MOV EDI,dword ptr [ESP + 0x18]
XOR ESI,ESI
XOR EBX,EBX
MOV EDX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x54],EDI
MOV EDI,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0x4c],EDI
MOV EDI,dword ptr [ESP + 0x14]
MOV dword ptr [ESP + 0x40],EDI
MOV EDI,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0x18],EDI
MOV EDI,0x1
CMP EDX,dword ptr [EAX]
JZ 0x0003bbd6
MOV dword ptr [ESP + 0x28],0x1
MOV dword ptr [ESP + 0x18],0x1
CMP dword ptr [ESP + 0x2c],EDI
JG 0x0003bc18
LEA EAX,[EBX + 0x100]
SUB ESP,0x4
MOV dword ptr [ESP + 0x30],EAX
PUSH 0x4
PUSH EAX
PUSH dword ptr [ESP + 0x2c]
MOV EBX,dword ptr [ESP + 0x58]
CALL 0x0002d5f0
MOV dword ptr [ESP + 0x30],EAX
ADD ESP,0x10
JMP 0x0003bc18
CMP dword ptr [ESP + 0x8],EDI
JGE 0x0003bae8
MOV ESI,dword ptr [ESP + 0x8]
LEA EDX,[ESI + ESI*0x2]
MOV ESI,dword ptr [ESP + 0x10]
LEA EDX,[ESI + EDX*0x4 + 0x4]
LEA ESI,[ESI]
OR dword ptr [EDX],0x3ffff
ADD EDX,0xc
CMP EAX,EDX
JNZ 0x0003be40
MOV EDX,dword ptr [EAX]
JMP 0x0003bae8
MOV ECX,EDX
AND ECX,0xfffffff
CMP ECX,dword ptr [EBP + EAX*0x1]
JNZ 0x0003bae0
TEST ESI,ESI
JZ 0x0003baf5
JMP 0x0003bae8
MOV ECX,dword ptr [ESP + 0x8]
XOR CL,CL
JMP 0x0003bcff
MOV EDI,dword ptr [ESP + 0x8]
MOV EBX,dword ptr [ECX + 0x4]
AND EDI,0xffffff00
MOV dword ptr [ESP + 0x34],EDI
TEST EBX,EBX
JNZ 0x0003bda8
MOV EDI,dword ptr [ESP + 0xc]
XOR ESI,ESI
MOV dword ptr [ESP + 0x4c],EDI
MOV EDI,dword ptr [ESP + 0x14]
MOV dword ptr [ESP + 0x40],EDI
MOV EDI,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0x18],EDI
MOV EDI,0x1
JMP 0x0003bbca
MOV ESI,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [EBP + 0x18]
MOV EDX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EAX + ESI*0x1]
CALL 0x00039710
MOV EAX,dword ptr [EBP + 0x18]
MOV EBX,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [ESP + 0x3c]
MOV EAX,dword ptr [EAX + ESI*0x1]
MOV ESI,dword ptr [ESP + 0xc]
ADD EDX,dword ptr [EAX + 0x14]
MOV EAX,dword ptr [ESP + 0x8]
MOV dword ptr [EDX],EAX
MOV EAX,EBX
OR EAX,0x80000000
CMP dword ptr [ESP + 0x4c],ESI
CMOVNZ EAX,EBX
MOV dword ptr [EDX + 0x4],EAX
JMP 0x0003bc3e
MOV EDX,dword ptr [ESP + 0x10]
MOV ESI,EAX
MOV EBX,EDI
MOV EAX,dword ptr [ESP + 0x20]
MOV dword ptr [ESP + 0x24],EBP
MOV EDI,EDX
MOV EDX,dword ptr [ESP + 0x2c]
JMP 0x0003bf60
CMP EBP,0xd800
JZ 0x0003bff0
LEA EBP,[EBX + 0x1]
CMP EBP,EDX
JGE 0x0003bf9e
MOV dword ptr [EAX + EBP*0x4 + -0x4],ESI
MOV ESI,dword ptr [EDI + 0x8]
MOV EBX,EBP
TEST ESI,ESI
JZ 0x0003bfcc
LEA ESI,[ESI + ESI*0x2]
LEA EDI,[EDI + ESI*0x4]
MOV ESI,dword ptr [EDI]
MOV EBP,ESI
AND EBP,0xffffff00
CMP EBP,0xd900
JZ 0x0003c010
CMP EBP,0xda00
JNZ 0x0003bf40
MOV ECX,dword ptr [ESP + 0x24]
MOV EBP,dword ptr [ECX + 0x1090]
MOV ECX,ESI
MOVZX ESI,CL
MOV ESI,dword ptr [EBP + ESI*0x4 + 0x10]
LEA EBP,[EBX + 0x1]
CMP EBP,EDX
JL 0x0003bf53
SUB ESP,0x4
LEA EDX,[EBX + 0x100]
PUSH 0x4
PUSH EDX
MOV dword ptr [ESP + 0x2c],EDX
PUSH EAX
MOV EBX,dword ptr [ESP + 0x58]
CALL 0x0002d5f0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x20]
MOV EBX,EBP
MOV dword ptr [EAX + EBP*0x4 + -0x4],ESI
MOV ESI,dword ptr [EDI + 0x8]
TEST ESI,ESI
JNZ 0x0003bf60
MOV EDI,EBP
MOV dword ptr [ESP + 0x20],EAX
MOV EBP,dword ptr [ESP + 0x24]
MOV dword ptr [ESP + 0x2c],EDX
OR dword ptr [ESP + 0x40],0x80000000
JMP 0x0003bc32
MOV ECX,dword ptr [ESP + 0x24]
MOV EBP,dword ptr [ECX + 0x1090]
MOV ECX,ESI
MOVZX ESI,CL
MOV ESI,dword ptr [EBP + ESI*0x4 + 0x410]
JMP 0x0003bf4c
MOV ECX,dword ptr [ESP + 0x24]
MOV EBP,dword ptr [ECX + 0x1090]
MOV ECX,ESI
MOVZX ESI,CL
MOV ESI,dword ptr [EBP + ESI*0x4 + 0xc10]
JMP 0x0003bf4c
MOV ECX,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [ESP + 0x50]
ADD ECX,0xc
CMP dword ptr [ESP + 0x68],EDX
JNZ 0x0003c04b
CMP dword ptr [ESP + 0x58],EBX
JZ 0x0003c305
MOV EAX,dword ptr [EBP + 0x18]
MOV ESI,dword ptr [ESP + 0x30]
MOV dword ptr [ESP + 0x8],ECX
MOV EDX,dword ptr [ESP + 0x3c]
MOV ESI,dword ptr [EAX + ESI*0x1]
MOV EAX,dword ptr [ESI + 0x14]
LEA EAX,[EAX + EDX*0x1 + 0xc]
MOV EDX,ECX
CALL 0x000390d0
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,EBX
TEST EAX,EAX
MOV EAX,0x1
CMOVNZ EAX,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,ESI
CALL 0x00039710
MOV EBX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [EBP + 0x12c]
ADD EBX,0x2
CMP EBX,EAX
JL 0x0003bc6a
TEST byte ptr [ESP + 0x18],0x1
JNZ 0x0003c1e7
MOV EAX,dword ptr [ESP + 0x60]
MOV EDX,dword ptr [EAX + 0xc]
TEST EDX,EDX
JNZ 0x0003c1dd
ADD dword ptr [ESP + 0x50],0x1
MOV EAX,dword ptr [ESP + 0x50]
CMP EAX,dword ptr [EBP + 0x128]
JL 0x0003b700
SUB ESP,0xc
PUSH dword ptr [ESP + 0x50]
MOV EDI,dword ptr [ESP + 0x58]
MOV EBX,EDI
CALL 0x0002da80
POP EAX
PUSH dword ptr [ESP + 0x2c]
CALL 0x0002da80
ADD ESP,0x8c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,dword ptr [ESP + 0x28]
AND EDX,0xfffffff
CMP dword ptr [ESP + 0x14],EDX
JNZ 0x0003bd4a
JMP 0x0003bd5e
SUB ESP,0x4
MOV EAX,dword ptr [ESP + 0x64]
MOVZX EAX,word ptr [EAX]
PUSH EAX
PUSH dword ptr [ESP + 0x48]
PUSH EDI
PUSH dword ptr [ESP + 0x30]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x80]
MOV EBX,dword ptr [ESP + 0x68]
CALL 0x0005aed0
ADD ESP,0x20
TEST dword ptr [ESP + 0x40],0x60000000
JNZ 0x0003c190
MOV EDI,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [EBP + 0x18]
MOV ECX,dword ptr [EBP + 0x1090]
MOV EAX,dword ptr [EAX + EDI*0x1]
MOV EDI,dword ptr [ESP + 0x3c]
ADD EDI,dword ptr [EAX + 0x14]
MOV EAX,EDI
JMP 0x0003bd73
MOV EAX,dword ptr [EBP + 0x18]
MOV ECX,dword ptr [ESP + 0x30]
OR EDX,0x800000
MOV EAX,dword ptr [EAX + ECX*0x1]
MOV dword ptr [ESP + 0x10],EAX
JMP 0x0003b7f5
SUB ESP,0x4
MOV EAX,dword ptr [ESP + 0x64]
MOVZX EAX,word ptr [EAX]
PUSH EAX
PUSH dword ptr [ESP + 0x48]
PUSH EDI
PUSH dword ptr [ESP + 0x30]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x80]
MOV EBX,dword ptr [ESP + 0x68]
CALL 0x0005afa0
MOV EDI,dword ptr [ESP + 0x50]
MOV EAX,dword ptr [EBP + 0x18]
MOV ECX,dword ptr [EBP + 0x1090]
MOV EAX,dword ptr [EAX + EDI*0x1]
MOV EDI,dword ptr [ESP + 0x5c]
ADD ESP,0x20
ADD EDI,dword ptr [EAX + 0x14]
MOV EAX,EDI
JMP 0x0003bd73
CALL 0x00039830
JMP 0x0003c0b7
SUB ESP,0x4
MOV EAX,dword ptr [ESP + 0x64]
MOVZX EAX,word ptr [EAX]
PUSH EAX
MOV ESI,dword ptr [ESP + 0x48]
PUSH ESI
PUSH EDI
PUSH dword ptr [ESP + 0x30]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x80]
MOV EBX,dword ptr [ESP + 0x68]
CALL 0x0005aed0
MOV EAX,ESI
ADD ESP,0x20
TEST EAX,0x60000000
JZ 0x0003c0a8
SUB ESP,0x4
MOV EAX,dword ptr [ESP + 0x64]
MOVZX EAX,word ptr [EAX]
PUSH EAX
PUSH dword ptr [ESP + 0x48]
PUSH EDI
PUSH dword ptr [ESP + 0x30]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x64]
PUSH dword ptr [ESP + 0x80]
MOV EBX,dword ptr [ESP + 0x68]
CALL 0x0005afa0
ADD ESP,0x20
JMP 0x0003c0a8
MOV EAX,dword ptr [ESP + 0x60]
MOV dword ptr [ESP + 0x14],0x0
MOV EAX,dword ptr [EAX + 0x14]
MOV dword ptr [ESP + 0x38],EAX
JMP 0x0003b755
MOV EAX,dword ptr [ESP + 0x60]
MOVZX EAX,word ptr [EAX]
MOV word ptr [ECX],AX
JMP 0x0003c0a8
MOV EDI,dword ptr [EBP + 0xbc]
TEST EDI,EDI
JZ 0x0003c2c3
MOV dword ptr [ESP + 0x6c],0x40000000
JMP 0x0003b5e0
CMP dword ptr [EAX + 0xc],0xdfff
JNZ 0x0003b6be
OR dword ptr [EAX + 0x10],0x3ffff
JMP 0x0003b6be
MOV EAX,EBX
CALL 0x00039830
JMP 0x0003b671
MOV EAX,dword ptr [EBX + 0x14]
JMP 0x0003b648
MOV EAX,dword ptr [EBP + 0x1100]
TEST EAX,EAX
MOV EAX,0x40000000
CMOVNZ EAX,EDI
MOV dword ptr [ESP + 0x6c],EAX
JMP 0x0003b5e0
MOV EDI,dword ptr [EBP + 0x12c]
OR dword ptr [EAX + -0x8],0x3ffff
LEA ECX,[EDI + -0x1]
CMP ECX,EDX
JLE 0x0003b6be
JMP 0x0003c296
CMP dword ptr [ESP + 0x58],EDX
JNZ 0x0003b68e
JMP 0x0003b6cc
MOV EBX,dword ptr [ESP + 0x48]
LEA EAX,[EBX + 0xfffd1af8]
PUSH EAX
LEA EAX,[EBX + 0xfffd0f15]
PUSH 0x14f6
PUSH EAX
LEA EAX,[EBX + 0xfffd1234]
PUSH EAX
CALL 0x0001af20
(translation_unit "void __regparm3 FUN_0003b550(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}\n\n" (function_definition "void __regparm3 FUN_0003b550(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0003b550(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "short *psVar10;" (sized_type_specifier "short" short) (pointer_declarator "*psVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "uint uVar19;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "bool bVar23;" primitive_type identifier ;) (declaration "bool bVar24;" primitive_type identifier ;) (declaration "int local_84;" primitive_type identifier ;) (declaration "int local_80;" primitive_type identifier ;) (declaration "short *local_7c;" (sized_type_specifier "short" short) (pointer_declarator "*local_7c" * identifier) ;) (declaration "int local_78;" primitive_type identifier ;) (declaration "int local_6c;" primitive_type identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "int local_54;" primitive_type identifier ;) (declaration "uint local_4c;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "int local_3c;" primitive_type identifier ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "FUN_00038693();" (call_expression "FUN_00038693()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_6c = FUN_0002d1f0(0x400,4);" (assignment_expression "local_6c = FUN_0002d1f0(0x400,4)" identifier = (call_expression "FUN_0002d1f0(0x400,4)" identifier (argument_list "(0x400,4)" ( number_literal , number_literal )))) ;) (expression_statement "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);" (assignment_expression "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" identifier = (call_expression "FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" identifier (argument_list "(*(undefined4 *)(param_1 + 300),0xc)" ( (pointer_expression "*(undefined4 *)(param_1 + 300)" * (cast_expression "(undefined4 *)(param_1 + 300)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) , number_literal )))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0xa8);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xa8)" identifier = (pointer_expression "*(int *)(param_1 + 0xa8)" * (cast_expression "(int *)(param_1 + 0xa8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa8)" ( (binary_expression "param_1 + 0xa8" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x138);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x138)" identifier = (pointer_expression "*(int *)(param_1 + 0x138)" * (cast_expression "(int *)(param_1 + 0x138)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x138)" ( (binary_expression "param_1 + 0x138" identifier + number_literal) ))))) ;) (expression_statement "local_20 = *(uint *)(param_1 + 0xb0);" (assignment_expression "local_20 = *(uint *)(param_1 + 0xb0)" identifier = (pointer_expression "*(uint *)(param_1 + 0xb0)" * (cast_expression "(uint *)(param_1 + 0xb0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb0)" ( (binary_expression "param_1 + 0xb0" identifier + number_literal) ))))) ;) (if_statement "if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" if (parenthesized_expression "(local_20 != 0)" ( (binary_expression "local_20 != 0" identifier != number_literal) )) (compound_statement "{\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" { (expression_statement "local_20 = 0x20000000;" (assignment_expression "local_20 = 0x20000000" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" ( (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" * (cast_expression "(int *)(param_1 + 0x134)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x134)" ( (binary_expression "param_1 + 0x134" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" { (if_statement "if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0xbc) == 0)" ( (binary_expression "*(int *)(param_1 + 0xbc) == 0" (pointer_expression "*(int *)(param_1 + 0xbc)" * (cast_expression "(int *)(param_1 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xbc)" ( (binary_expression "param_1 + 0xbc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }" if (parenthesized_expression "(*(int *)(param_1 + 0x1100) != 0)" ( (binary_expression "*(int *)(param_1 + 0x1100) != 0" (pointer_expression "*(int *)(param_1 + 0x1100)" * (cast_expression "(int *)(param_1 + 0x1100)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1100)" ( (binary_expression "param_1 + 0x1100" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          local_20 = 0;\n        }" { (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n        local_20 = 0x40000000;\n      }" else (compound_statement "{\n        local_20 = 0x40000000;\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) }))) })) (if_statement "if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x8c) != 0)" ( (binary_expression "*(int *)(param_1 + 0x8c) != 0" (pointer_expression "*(int *)(param_1 + 0x8c)" * (cast_expression "(int *)(param_1 + 0x8c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x8c)" ( (binary_expression "param_1 + 0x8c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      local_20 = local_20 | 0x10000000;\n    }" { (expression_statement "local_20 = local_20 | 0x10000000;" (assignment_expression "local_20 = local_20 | 0x10000000" identifier = (binary_expression "local_20 | 0x10000000" identifier | number_literal)) ;) })) })) (expression_statement "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);" (assignment_expression "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" identifier = (binary_expression "*(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))))) ;) (expression_statement "iVar8 = FUN_0003adf0(0);" (assignment_expression "iVar8 = FUN_0003adf0(0)" identifier = (call_expression "FUN_0003adf0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "local_34 = *(int *)(param_1 + 0x70);" (assignment_expression "local_34 = *(int *)(param_1 + 0x70)" identifier = (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = FUN_00039860(iVar20);" (assignment_expression "iVar9 = FUN_00039860(iVar20)" identifier = (call_expression "FUN_00039860(iVar20)" identifier (argument_list "(iVar20)" ( identifier )))) ;) (if_statement "if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }" { (expression_statement "iVar9 = *(int *)(iVar8 + 0x14);" (assignment_expression "iVar9 = *(int *)(iVar8 + 0x14)" identifier = (pointer_expression "*(int *)(iVar8 + 0x14)" * (cast_expression "(int *)(iVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0x14)" ( (binary_expression "iVar8 + 0x14" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" else (compound_statement "{\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" { (expression_statement "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);" (assignment_expression "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4" (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" ( (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8" (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" * (cast_expression "(int *)(param_1 + 0x10cc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10cc)" ( (binary_expression "param_1 + 0x10cc" identifier + number_literal) )))) + (binary_expression "iVar20 * 0x10" identifier * number_literal)) + number_literal) )))) + (binary_expression "local_34 * 4" identifier * number_literal)) ))))) ;) }))) (if_statement "if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" if (parenthesized_expression "(0 < local_34)" ( (binary_expression "0 < local_34" number_literal < identifier) )) (compound_statement "{\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" { (expression_statement "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);" (assignment_expression "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" identifier = (binary_expression "local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" identifier - (call_expression "(uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" ( (binary_expression "*(int *)(iVar9 + local_34 * 0xc) == 0xdfff" (pointer_expression "*(int *)(iVar9 + local_34 * 0xc)" * (cast_expression "(int *)(iVar9 + local_34 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + local_34 * 0xc)" ( (binary_expression "iVar9 + local_34 * 0xc" identifier + (binary_expression "local_34 * 0xc" identifier * number_literal)) )))) == number_literal) ))))) ;) })) (if_statement "if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }" if (parenthesized_expression "(*(int *)(iVar8 + 0xc) != 0)" ( (binary_expression "*(int *)(iVar8 + 0xc) != 0" (pointer_expression "*(int *)(iVar8 + 0xc)" * (cast_expression "(int *)(iVar8 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0xc)" ( (binary_expression "iVar8 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00039830();\n  }" { (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar9 = *(int *)(param_1 + 0x20);" (assignment_expression "iVar9 = *(int *)(param_1 + 0x20)" identifier = (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" if (parenthesized_expression "((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))))" ( (binary_expression "(-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" (parenthesized_expression "(-1 < iVar9)" ( (binary_expression "-1 < iVar9" number_literal < identifier) )) && (parenthesized_expression "(((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" ( (parenthesized_expression "((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))" ( (binary_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)" (parenthesized_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       )" ( (comma_expression "iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (assignment_expression "iVar8 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) , (binary_expression "*(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (binary_expression "*(uint *)(param_1 + 0x24) != local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) != identifier) || (parenthesized_expression "(iVar20 != iVar9)" ( (binary_expression "iVar20 != iVar9" identifier != identifier) )))) )) || (parenthesized_expression "(local_34 != iVar8)" ( (binary_expression "local_34 != iVar8" identifier != identifier) ))) )) ))) )) (compound_statement "{\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" { (expression_statement "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" ( (binary_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc" (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar9 * 4)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar9 * 4" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + (binary_expression "iVar9 * 4" identifier * number_literal)) )))) + number_literal) )))) + (binary_expression "iVar8 * 0xc" identifier * number_literal)) )))) ;) (if_statement "if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" if (parenthesized_expression "((iVar8 < 1) || (*piVar1 != 0xdfff))" ( (binary_expression "(iVar8 < 1) || (*piVar1 != 0xdfff)" (parenthesized_expression "(iVar8 < 1)" ( (binary_expression "iVar8 < 1" identifier < number_literal) )) || (parenthesized_expression "(*piVar1 != 0xdfff)" ( (binary_expression "*piVar1 != 0xdfff" (pointer_expression "*piVar1" * identifier) != number_literal) ))) )) (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n    }" { (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" else (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" { (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "piVar1[-2] = piVar1[-2] | 0x3ffff;" (assignment_expression "piVar1[-2] = piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" identifier [ number_literal ]) = (binary_expression "piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" identifier [ number_literal ]) | number_literal)) ;) }))) (if_statement "if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" if (parenthesized_expression "((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff))" ( (binary_expression "(iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)" (parenthesized_expression "(iVar8 < iVar9 + -1)" ( (binary_expression "iVar8 < iVar9 + -1" identifier < (binary_expression "iVar9 + -1" identifier + number_literal)) )) && (parenthesized_expression "(piVar1[3] == 0xdfff)" ( (binary_expression "piVar1[3] == 0xdfff" (subscript_expression "piVar1[3]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" { (expression_statement "piVar1[4] = piVar1[4] | 0x3ffff;" (assignment_expression "piVar1[4] = piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" identifier [ number_literal ]) = (binary_expression "piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" identifier [ number_literal ]) | number_literal)) ;) })) (expression_statement "piVar1[1] = piVar1[1] | 0x3ffff;" (assignment_expression "piVar1[1] = piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" identifier [ number_literal ]) = (binary_expression "piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" identifier [ number_literal ]) | number_literal)) ;) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x20) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x20) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x20)" * (cast_expression "(undefined4 *)(param_1 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" * (cast_expression "(undefined4 *)(param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x128) < 1)" ( (binary_expression "*(int *)(param_1 + 0x128) < 1" (pointer_expression "*(int *)(param_1 + 0x128)" * (cast_expression "(int *)(param_1 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x128)" ( (binary_expression "param_1 + 0x128" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" { (labeled_statement "LAB_0003c0cc:\n    FUN_0002da80(iVar7);" statement_identifier : (expression_statement "FUN_0002da80(iVar7);" (call_expression "FUN_0002da80(iVar7)" identifier (argument_list "(iVar7)" ( identifier ))) ;)) (expression_statement "FUN_0002da80(local_6c);" (call_expression "FUN_0002da80(local_6c)" identifier (argument_list "(local_6c)" ( identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "local_60 = 0x400;" (assignment_expression "local_60 = 0x400" identifier = number_literal) ;) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" identifier = number_literal) ;) (labeled_statement "LAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;" statement_identifier : (expression_statement "iVar9 = *(int *)(param_1 + 0x10) + local_3c;" (assignment_expression "iVar9 = *(int *)(param_1 + 0x10) + local_3c" identifier = (binary_expression "*(int *)(param_1 + 0x10) + local_3c" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + identifier)) ;)) (expression_statement "psVar10 = (short *)FUN_0003adf0(0);" (assignment_expression "psVar10 = (short *)FUN_0003adf0(0)" identifier = (cast_expression "(short *)FUN_0003adf0(0)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003adf0(0)" identifier (argument_list "(0)" ( number_literal ))))) ;) (expression_statement "local_54 = FUN_00039860(local_3c);" (assignment_expression "local_54 = FUN_00039860(local_3c)" identifier = (call_expression "FUN_00039860(local_3c)" identifier (argument_list "(local_3c)" ( identifier )))) ;) (if_statement "if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" if (parenthesized_expression "(local_54 == 0)" ( (binary_expression "local_54 == 0" identifier == number_literal) )) (compound_statement "{\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }" { (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" identifier = number_literal) ;) (expression_statement "local_54 = *(int *)(psVar10 + 10);" (assignment_expression "local_54 = *(int *)(psVar10 + 10)" identifier = (pointer_expression "*(int *)(psVar10 + 10)" * (cast_expression "(int *)(psVar10 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar10 + 10)" ( (binary_expression "psVar10 + 10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" else (compound_statement "{\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" { (expression_statement "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);" (assignment_expression "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" * (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" ( (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc" (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" * (cast_expression "(int *)(param_1 + 0x10cc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10cc)" ( (binary_expression "param_1 + 0x10cc" identifier + number_literal) )))) + (binary_expression "local_3c * 0x10" identifier * number_literal)) + number_literal) ))))) ;) }))) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "iVar8 = local_3c * 4;" (assignment_expression "iVar8 = local_3c * 4" identifier = (binary_expression "local_3c * 4" identifier * number_literal)) ;) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + local_3c * 4)" ( (binary_expression "*(int *)(param_1 + 0x18) + local_3c * 4" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + (binary_expression "local_3c * 4" identifier * number_literal)) ))))) ;) (if_statement "if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" { (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);" do (compound_statement "{\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    }" { (expression_statement "local_80 = local_84;" (assignment_expression "local_80 = local_84" identifier = identifier) ;) (if_statement "if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" if (parenthesized_expression "(local_78 != 0)" ( (binary_expression "local_78 != 0" identifier != number_literal) )) (compound_statement "{\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" { (expression_statement "local_80 = *(int *)(local_78 + local_84 * 4);" (assignment_expression "local_80 = *(int *)(local_78 + local_84 * 4)" identifier = (pointer_expression "*(int *)(local_78 + local_84 * 4)" * (cast_expression "(int *)(local_78 + local_84 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_78 + local_84 * 4)" ( (binary_expression "local_78 + local_84 * 4" identifier + (binary_expression "local_84 * 4" identifier * number_literal)) ))))) ;) })) (expression_statement "uVar15 = *(uint *)(local_54 + iVar21);" (assignment_expression "uVar15 = *(uint *)(local_54 + iVar21)" identifier = (pointer_expression "*(uint *)(local_54 + iVar21)" * (cast_expression "(uint *)(local_54 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + iVar21)" ( (binary_expression "local_54 + iVar21" identifier + identifier) ))))) ;) (expression_statement "uVar11 = *(uint *)(local_54 + 4 + iVar21);" (assignment_expression "uVar11 = *(uint *)(local_54 + 4 + iVar21)" identifier = (pointer_expression "*(uint *)(local_54 + 4 + iVar21)" * (cast_expression "(uint *)(local_54 + 4 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + 4 + iVar21)" ( (binary_expression "local_54 + 4 + iVar21" (binary_expression "local_54 + 4" identifier + number_literal) + identifier) ))))) ;) (if_statement "if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x10d4) == 0)" ( (binary_expression "*(int *)(param_1 + 0x10d4) == 0" (pointer_expression "*(int *)(param_1 + 0x10d4)" * (cast_expression "(int *)(param_1 + 0x10d4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10d4)" ( (binary_expression "param_1 + 0x10d4" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" { (expression_statement "uVar11 = uVar11 & 0xfffc0000 | 0x20500;" (assignment_expression "uVar11 = uVar11 & 0xfffc0000 | 0x20500" identifier = (binary_expression "uVar11 & 0xfffc0000 | 0x20500" (binary_expression "uVar11 & 0xfffc0000" identifier & number_literal) | number_literal)) ;) })) (if_statement "if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x1170) == 0)" ( (binary_expression "*(int *)(param_1 + 0x1170) == 0" (pointer_expression "*(int *)(param_1 + 0x1170)" * (cast_expression "(int *)(param_1 + 0x1170)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1170)" ( (binary_expression "param_1 + 0x1170" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" { (if_statement "if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" if (parenthesized_expression "((uVar11 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar11 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 & 0x1ff)" ( (binary_expression "uVar11 & 0x1ff" identifier & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" { (expression_statement "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;" (assignment_expression "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" identifier = (binary_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" (call_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint3)(uVar11 >> 8) & 0xfffffe | 1)" ( (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe | 1" (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe" (call_expression "(uint3)(uVar11 >> 8)" (parenthesized_expression "(uint3)" ( identifier )) (argument_list "(uVar11 >> 8)" ( (binary_expression "uVar11 >> 8" identifier >> number_literal) ))) & number_literal) | number_literal) ))) << number_literal)) ;) })) (if_statement "if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" if (parenthesized_expression "((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 >> 9 & 0x1ff)" ( (binary_expression "uVar11 >> 9 & 0x1ff" (binary_expression "uVar11 >> 9" identifier >> number_literal) & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" { (expression_statement "uVar11 = uVar11 & 0xfffc01ff | 0x20400;" (assignment_expression "uVar11 = uVar11 & 0xfffc01ff | 0x20400" identifier = (binary_expression "uVar11 & 0xfffc01ff | 0x20400" (binary_expression "uVar11 & 0xfffc01ff" identifier & number_literal) | number_literal)) ;) })) })) (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xd900)" ( (binary_expression "uVar16 == 0xd900" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" else (if_statement "if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xda00)" ( (binary_expression "uVar16 == 0xda00" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" else (if_statement "if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xd800)" ( (binary_expression "uVar16 == 0xd800" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })))))) (if_statement "if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }" if (parenthesized_expression "((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff))" ( (binary_expression "(local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" (parenthesized_expression "(local_84 < iVar17 + -1)" ( (binary_expression "local_84 < iVar17 + -1" identifier < (binary_expression "iVar17 + -1" identifier + number_literal)) )) && (parenthesized_expression "(*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" ( (binary_expression "*(int *)(local_54 + 0xc + iVar21) == 0xdfff" (pointer_expression "*(int *)(local_54 + 0xc + iVar21)" * (cast_expression "(int *)(local_54 + 0xc + iVar21)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + 0xc + iVar21)" ( (binary_expression "local_54 + 0xc + iVar21" (binary_expression "local_54 + 0xc" identifier + number_literal) + identifier) )))) == number_literal) ))) )) (compound_statement "{\n        uVar11 = uVar11 | 0x400000;\n      }" { (expression_statement "uVar11 = uVar11 | 0x400000;" (assignment_expression "uVar11 = uVar11 | 0x400000" identifier = (binary_expression "uVar11 | 0x400000" identifier | number_literal)) ;) })) (expression_statement "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;" (assignment_expression "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" identifier = (binary_expression "uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" identifier ^ (binary_expression "(uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" (call_expression "(uint)((iVar2 == 0) != (iVar3 == 0))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((iVar2 == 0) != (iVar3 == 0))" ( (binary_expression "(iVar2 == 0) != (iVar3 == 0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) != (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) ))) ))) << number_literal))) ;) (if_statement "if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0xe48) - 2U < 2)" ( (binary_expression "*(int *)(param_1 + 0xe48) - 2U < 2" (binary_expression "*(int *)(param_1 + 0xe48) - 2U" (pointer_expression "*(int *)(param_1 + 0xe48)" * (cast_expression "(int *)(param_1 + 0xe48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe48)" ( (binary_expression "param_1 + 0xe48" identifier + number_literal) )))) - number_literal) < number_literal) )) (compound_statement "{\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe54);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe54)" identifier = (pointer_expression "*(int *)(param_1 + 0xe54)" * (cast_expression "(int *)(param_1 + 0xe54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe54)" ( (binary_expression "param_1 + 0xe54" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(*(int *)(param_1 + 0xe4c) == 0)" ( (binary_expression "*(int *)(param_1 + 0xe4c) == 0" (pointer_expression "*(int *)(param_1 + 0xe4c)" * (cast_expression "(int *)(param_1 + 0xe4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe4c)" ( (binary_expression "param_1 + 0xe4c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }" { (if_statement "if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" if (parenthesized_expression "((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))))" ( (binary_expression "(iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" (parenthesized_expression "(iVar17 < iVar9)" ( (binary_expression "iVar17 < iVar9" identifier < identifier) )) || (parenthesized_expression "((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" ( (parenthesized_expression "(iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))" ( (binary_expression "iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)" (binary_expression "iVar9 == iVar17" identifier == identifier) && (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" ( (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" * (cast_expression "(int *)(param_1 + 0xe58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe58)" ( (binary_expression "param_1 + 0xe58" identifier + number_literal) )))) <= identifier) ))) )) ))) )) (compound_statement "{\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" { (if_statement "if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;" if (parenthesized_expression "(iVar9 < *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 < *(int *)(param_1 + 0xe5c)" identifier < (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) )) (goto_statement "goto LAB_0003b988;" goto statement_identifier ;)) (if_statement "if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" if (parenthesized_expression "(iVar9 == *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 == *(int *)(param_1 + 0xe5c)" identifier == (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) )) (compound_statement "{\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" identifier = (pointer_expression "*(int *)(param_1 + 0xe60)" * (cast_expression "(int *)(param_1 + 0xe60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe60)" ( (binary_expression "param_1 + 0xe60" identifier + number_literal) ))))) ;) (goto_statement "goto joined_r0x0003ba86;" goto statement_identifier ;) })) })) }) (else_clause "else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" else (if_statement "if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c)))" ( (binary_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))" (parenthesized_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80))" ( (binary_expression "(iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)" (parenthesized_expression "(iVar17 <= iVar9)" ( (binary_expression "iVar17 <= iVar9" identifier <= identifier) )) && (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" ( (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" * (cast_expression "(int *)(param_1 + 0xe58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe58)" ( (binary_expression "param_1 + 0xe58" identifier + number_literal) )))) <= identifier) ))) )) && (parenthesized_expression "(iVar9 <= *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 <= *(int *)(param_1 + 0xe5c)" identifier <= (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) ))) )) (compound_statement "{\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" identifier = (pointer_expression "*(int *)(param_1 + 0xe60)" * (cast_expression "(int *)(param_1 + 0xe60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe60)" ( (binary_expression "param_1 + 0xe60" identifier + number_literal) ))))) ;) (labeled_statement "joined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" statement_identifier : (if_statement "if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" if (parenthesized_expression "(local_80 < iVar17)" ( (binary_expression "local_80 < iVar17" identifier < identifier) )) (compound_statement "{\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" { (labeled_statement "LAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;" statement_identifier : (expression_statement "uVar11 = uVar11 ^ 0x100000;" (assignment_expression "uVar11 = uVar11 ^ 0x100000" identifier = (binary_expression "uVar11 ^ 0x100000" identifier ^ number_literal)) ;)) }))) })))) })) (if_statement "if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" if (parenthesized_expression "((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0))" ( (binary_expression "(*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0xc4) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc4) != 0" (pointer_expression "*(int *)(param_1 + 0xc4)" * (cast_expression "(int *)(param_1 + 0xc4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc4)" ( (binary_expression "param_1 + 0xc4" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((uVar11 & 0x200000) != 0)" ( (binary_expression "(uVar11 & 0x200000) != 0" (parenthesized_expression "(uVar11 & 0x200000)" ( (binary_expression "uVar11 & 0x200000" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" { (if_statement "if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" if (parenthesized_expression "((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0))" ( (binary_expression "(*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" ( (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" * (cast_expression "(int *)(param_1 + 0x134)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x134)" ( (binary_expression "param_1 + 0x134" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0xc0) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc0) != 0" (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x490)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x490" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) ))))) ;) })) (expression_statement "uVar11 = uVar11 & 0xffdfffff;" (assignment_expression "uVar11 = uVar11 & 0xffdfffff" identifier = (binary_expression "uVar11 & 0xffdfffff" identifier & number_literal)) ;) })) (if_statement "if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" if (parenthesized_expression "((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))" ( (binary_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" (parenthesized_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15)" ( (binary_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15" (pointer_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21)" * (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" ( (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) )))) == identifier) )) && (parenthesized_expression "(uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" ( (comma_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11" (assignment_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" identifier = (subscript_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" (parenthesized_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))" ( (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" ( (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) ))) )) [ number_literal ])) , (binary_expression "(uVar16 & 0xf7fffff) == uVar11" (parenthesized_expression "(uVar16 & 0xf7fffff)" ( (binary_expression "uVar16 & 0xf7fffff" identifier & number_literal) )) == identifier)) ))) )) (compound_statement "{\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }" { (if_statement "if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }" if (parenthesized_expression "((uVar16 & 0x800000) != 0)" ( (binary_expression "(uVar16 & 0x800000) != 0" (parenthesized_expression "(uVar16 & 0x800000)" ( (binary_expression "uVar16 & 0x800000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar11 = uVar11 | 0x800000;\n        }" { (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" identifier = (binary_expression "uVar11 | 0x800000" identifier | number_literal)) ;) })) }) (else_clause "else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" else (if_statement "if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" if (parenthesized_expression "((uVar11 & 0x400000) == 0)" ( (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" ( (binary_expression "uVar11 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" { (expression_statement "iVar17 = FUN_0005a120(extraout_EDX,uVar15);" (assignment_expression "iVar17 = FUN_0005a120(extraout_EDX,uVar15)" identifier = (call_expression "FUN_0005a120(extraout_EDX,uVar15)" identifier (argument_list "(extraout_EDX,uVar15)" ( identifier , identifier )))) ;) (if_statement "if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" if (parenthesized_expression "(iVar17 == 2)" ( (binary_expression "iVar17 == 2" identifier == number_literal) )) (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }" { (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" identifier = (binary_expression "uVar11 | 0x800000" identifier | number_literal)) ;) }) (else_clause "else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" else (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" { (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) }))) })))) (if_statement "if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" if (parenthesized_expression "((local_34 == local_84) && (iVar20 == local_3c))" ( (binary_expression "(local_34 == local_84) && (iVar20 == local_3c)" (parenthesized_expression "(local_34 == local_84)" ( (binary_expression "local_34 == local_84" identifier == identifier) )) && (parenthesized_expression "(iVar20 == local_3c)" ( (binary_expression "iVar20 == local_3c" identifier == identifier) ))) )) (compound_statement "{\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" { (expression_statement "*(int *)(param_1 + 0x1c) = local_84;" (assignment_expression "*(int *)(param_1 + 0x1c) = local_84" (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar11 = uVar11 | local_20;" (assignment_expression "uVar11 = uVar11 | local_20" identifier = (binary_expression "uVar11 | local_20" identifier | identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x24) = local_20;" (assignment_expression "*(uint *)(param_1 + 0x24) = local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x20) = local_3c;" (assignment_expression "*(int *)(param_1 + 0x20) = local_3c" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "local_84 = local_84 + 1;" (assignment_expression "local_84 = local_84 + 1" identifier = (binary_expression "local_84 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(iVar7 + 4 + iVar21) = uVar11;" (assignment_expression "*(uint *)(iVar7 + 4 + iVar21) = uVar11" (pointer_expression "*(uint *)(iVar7 + 4 + iVar21)" * (cast_expression "(uint *)(iVar7 + 4 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4 + iVar21)" ( (binary_expression "iVar7 + 4 + iVar21" (binary_expression "iVar7 + 4" identifier + number_literal) + identifier) )))) = identifier) ;) (expression_statement "*(undefined4 *)(iVar7 + 8 + iVar21) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 8 + iVar21) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 8 + iVar21)" * (cast_expression "(undefined4 *)(iVar7 + 8 + iVar21)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 8 + iVar21)" ( (binary_expression "iVar7 + 8 + iVar21" (binary_expression "iVar7 + 8" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(iVar7 + iVar21) = uVar15;" (assignment_expression "*(uint *)(iVar7 + iVar21) = uVar15" (pointer_expression "*(uint *)(iVar7 + iVar21)" * (cast_expression "(uint *)(iVar7 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar21)" ( (binary_expression "iVar7 + iVar21" identifier + identifier) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + 0xc;" (assignment_expression "iVar21 = iVar21 + 0xc" identifier = (binary_expression "iVar21 + 0xc" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_84 < iVar17)" ( (binary_expression "local_84 < iVar17" identifier < identifier) )) ;) (if_statement "if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" { (expression_statement "iVar9 = *(int *)(local_7c + 10);" (assignment_expression "iVar9 = *(int *)(local_7c + 10)" identifier = (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) ))))) ;) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "iVar18 = iVar7 - iVar9;" (assignment_expression "iVar18 = iVar7 - iVar9" identifier = (binary_expression "iVar7 - iVar9" identifier - identifier)) ;) (expression_statement "puVar13 = (uint *)(iVar9 + 4);" (assignment_expression "puVar13 = (uint *)(iVar9 + 4)" identifier = (cast_expression "(uint *)(iVar9 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4)" ( (binary_expression "iVar9 + 4" identifier + number_literal) )))) ;) (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (do_statement "do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);" do (compound_statement "{\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      }" { (while_statement "while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" { (expression_statement "iVar22 = iVar21;" (assignment_expression "iVar22 = iVar21" identifier = identifier) ;) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);" (assignment_expression "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13)" identifier = (pointer_expression "*(uint *)(iVar18 + -4 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + -4 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + -4 + (int)puVar13)" ( (binary_expression "iVar18 + -4 + (int)puVar13" (binary_expression "iVar18 + -4" identifier + number_literal) + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (if_statement "if ((int)uVar15 < 0) break;" if (parenthesized_expression "((int)uVar15 < 0)" ( (binary_expression "(int)uVar15 < 0" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" if (parenthesized_expression "((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))" ( (binary_expression "(uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" (parenthesized_expression "(uVar11 == puVar13[-1])" ( (binary_expression "uVar11 == puVar13[-1]" identifier == (subscript_expression "puVar13[-1]" identifier [ number_literal ])) )) && (parenthesized_expression "((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" ( (binary_expression "(uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)" (parenthesized_expression "(uVar15 & 0xfffffff)" ( (binary_expression "uVar15 & 0xfffffff" identifier & number_literal) )) == (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + (int)puVar13)" ( (binary_expression "iVar18 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ))) )) (compound_statement "{\n            if (bVar4) goto LAB_0003bae8;\n          }" { (if_statement "if (bVar4) goto LAB_0003bae8;" if (parenthesized_expression "(bVar4)" ( identifier )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) }) (else_clause "else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" else (compound_statement "{\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" { (if_statement "if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" if (parenthesized_expression "((!bVar4) && (local_84 < iVar22))" ( (binary_expression "(!bVar4) && (local_84 < iVar22)" (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) && (parenthesized_expression "(local_84 < iVar22)" ( (binary_expression "local_84 < iVar22" identifier < identifier) ))) )) (compound_statement "{\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" { (expression_statement "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);" (assignment_expression "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc)" identifier = (cast_expression "(uint *)(iVar9 + 4 + local_84 * 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4 + local_84 * 0xc)" ( (binary_expression "iVar9 + 4 + local_84 * 0xc" (binary_expression "iVar9 + 4" identifier + number_literal) + (binary_expression "local_84 * 0xc" identifier * number_literal)) )))) ;) (do_statement "do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);" do (compound_statement "{\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              }" { (expression_statement "*puVar14 = *puVar14 | 0x3ffff;" (assignment_expression "*puVar14 = *puVar14 | 0x3ffff" (pointer_expression "*puVar14" * identifier) = (binary_expression "*puVar14 | 0x3ffff" (pointer_expression "*puVar14" * identifier) | number_literal)) ;) (expression_statement "puVar14 = puVar14 + 3;" (assignment_expression "puVar14 = puVar14 + 3" identifier = (binary_expression "puVar14 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar13 != puVar14)" ( (binary_expression "puVar13 != puVar14" identifier != identifier) )) ;) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) })) (labeled_statement "LAB_0003bae8:\n            bVar4 = true;" statement_identifier : (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;)) (expression_statement "*puVar13 = uVar15 | 0x3ffff;" (assignment_expression "*puVar13 = uVar15 | 0x3ffff" (pointer_expression "*puVar13" * identifier) = (binary_expression "uVar15 | 0x3ffff" identifier | number_literal)) ;) }))) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" identifier = (binary_expression "puVar13 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (if_statement "if (iVar17 == iVar22 + 1) goto LAB_0003bb38;" if (parenthesized_expression "(iVar17 == iVar22 + 1)" ( (binary_expression "iVar17 == iVar22 + 1" identifier == (binary_expression "iVar22 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bb38;" goto statement_identifier ;)) })) (expression_statement "local_84 = iVar22;" (assignment_expression "local_84 = iVar22" identifier = identifier) ;) (if_statement "if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;" if (parenthesized_expression "((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))" ( (binary_expression "(uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" (parenthesized_expression "(uVar11 != puVar13[-1])" ( (binary_expression "uVar11 != puVar13[-1]" identifier != (subscript_expression "puVar13[-1]" identifier [ number_literal ])) )) || (parenthesized_expression "(bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" ( (comma_expression "bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (assignment_expression "bVar4 = false" identifier = false) , (binary_expression "*(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + (int)puVar13)" ( (binary_expression "iVar18 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (parenthesized_expression "(uVar15 & 0xfffffff)" ( (binary_expression "uVar15 & 0xfffffff" identifier & number_literal) )))) ))) )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" identifier = (binary_expression "puVar13 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar17 != iVar22 + 1)" ( (binary_expression "iVar17 != iVar22 + 1" identifier != (binary_expression "iVar22 + 1" identifier + number_literal)) )) ;) (labeled_statement "LAB_0003bb38:\n      local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "bVar24 = *local_7c != *psVar10;" (assignment_expression "bVar24 = *local_7c != *psVar10" identifier = (binary_expression "*local_7c != *psVar10" (pointer_expression "*local_7c" * identifier) != (pointer_expression "*psVar10" * identifier))) ;) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" * identifier) = (pointer_expression "*psVar10" * identifier)) ;) (expression_statement "local_80 = 0;" (assignment_expression "local_80 = 0" identifier = number_literal) ;) (expression_statement "bVar23 = bVar24;" (assignment_expression "bVar23 = bVar24" identifier = identifier) ;) (do_statement "do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );" do (compound_statement "{\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      }" { (expression_statement "iVar17 = local_80 * 0xc;" (assignment_expression "iVar17 = local_80 * 0xc" identifier = (binary_expression "local_80 * 0xc" identifier * number_literal)) ;) (expression_statement "puVar13 = (uint *)(local_54 + iVar17);" (assignment_expression "puVar13 = (uint *)(local_54 + iVar17)" identifier = (cast_expression "(uint *)(local_54 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + iVar17)" ( (binary_expression "local_54 + iVar17" identifier + identifier) )))) ;) (expression_statement "uVar15 = *(uint *)(iVar7 + iVar17);" (assignment_expression "uVar15 = *(uint *)(iVar7 + iVar17)" identifier = (pointer_expression "*(uint *)(iVar7 + iVar17)" * (cast_expression "(uint *)(iVar7 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar17)" ( (binary_expression "iVar7 + iVar17" identifier + identifier) ))))) ;) (expression_statement "uVar11 = ((uint *)(iVar7 + iVar17))[1];" (assignment_expression "uVar11 = ((uint *)(iVar7 + iVar17))[1]" identifier = (subscript_expression "((uint *)(iVar7 + iVar17))[1]" (parenthesized_expression "((uint *)(iVar7 + iVar17))" ( (cast_expression "(uint *)(iVar7 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar17)" ( (binary_expression "iVar7 + iVar17" identifier + identifier) ))) )) [ number_literal ])) ;) (expression_statement "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);" (assignment_expression "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17)" identifier = (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar17)" ( (binary_expression "*(int *)(local_7c + 10) + iVar17" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) )))) ;) (expression_statement "bVar6 = true;" (assignment_expression "bVar6 = true" identifier = true) ;) (if_statement "if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }" if (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0x400000) == 0)" ( (binary_expression "((uVar11 ^ puVar14[1]) & 0x400000) == 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0x400000)" ( (binary_expression "(uVar11 ^ puVar14[1]) & 0x400000" (parenthesized_expression "(uVar11 ^ puVar14[1])" ( (binary_expression "uVar11 ^ puVar14[1]" identifier ^ (subscript_expression "puVar14[1]" identifier [ number_literal ])) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar6 = bVar23;\n        }" { (expression_statement "bVar6 = bVar23;" (assignment_expression "bVar6 = bVar23" identifier = identifier) ;) })) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }" if (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" ( (binary_expression "uVar15 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" ( (comma_expression "uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "uVar16 = 0" identifier = number_literal) , (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" ( (binary_expression "uVar15 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n          uVar16 = uVar15 & 0xffffff00;\n        }" { (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) })) (expression_statement "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;" (assignment_expression "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" identifier = (binary_expression "uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (binary_expression "uVar16 != local_58" identifier != identifier) || (binary_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c))" ( (binary_expression "*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)" (pointer_expression "*(uint *)(param_1 + 0x106c)" * (cast_expression "(uint *)(param_1 + 0x106c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x106c)" ( (binary_expression "param_1 + 0x106c" identifier + number_literal) )))) & (parenthesized_expression "(uVar11 ^ local_4c)" ( (binary_expression "uVar11 ^ local_4c" identifier ^ identifier) ))) )) != number_literal))) ;) (if_statement "if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" if (parenthesized_expression "((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0))))" ( (binary_expression "(puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))" (parenthesized_expression "(puVar13[2] == 0)" ( (binary_expression "puVar13[2] == 0" (subscript_expression "puVar13[2]" identifier [ number_literal ]) == number_literal) )) && (parenthesized_expression "((local_80 < 1 || (puVar13[-1] == 0)))" ( (parenthesized_expression "(local_80 < 1 || (puVar13[-1] == 0))" ( (binary_expression "local_80 < 1 || (puVar13[-1] == 0)" (binary_expression "local_80 < 1" identifier < number_literal) || (parenthesized_expression "(puVar13[-1] == 0)" ( (binary_expression "puVar13[-1] == 0" (subscript_expression "puVar13[-1]" identifier [ number_literal ]) == number_literal) ))) )) ))) )) (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" if (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" ( (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" { (labeled_statement "LAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" statement_identifier : (if_statement "if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" if (parenthesized_expression "(((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1))))" ( (binary_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))" (parenthesized_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff)))" ( (binary_expression "(uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))" (parenthesized_expression "(uVar15 == *puVar14)" ( (binary_expression "uVar15 == *puVar14" identifier == (pointer_expression "*puVar14" * identifier)) )) && (parenthesized_expression "(uVar11 == (puVar14[1] & 0xfffffff))" ( (binary_expression "uVar11 == (puVar14[1] & 0xfffffff)" identifier == (parenthesized_expression "(puVar14[1] & 0xfffffff)" ( (binary_expression "puVar14[1] & 0xfffffff" (subscript_expression "puVar14[1]" identifier [ number_literal ]) & number_literal) ))) ))) )) || (parenthesized_expression "((!bVar24 && (iVar9 == 1)))" ( (parenthesized_expression "(!bVar24 && (iVar9 == 1))" ( (binary_expression "!bVar24 && (iVar9 == 1)" (unary_expression "!bVar24" ! identifier) && (parenthesized_expression "(iVar9 == 1)" ( (binary_expression "iVar9 == 1" identifier == number_literal) ))) )) ))) )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;))) })) (if_statement "if (bVar23) goto LAB_0003bd5e;" if (parenthesized_expression "(bVar23)" ( identifier )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;)) (expression_statement "iVar21 = iVar9 * 4;" (assignment_expression "iVar21 = iVar9 * 4" identifier = (binary_expression "iVar9 * 4" identifier * number_literal)) ;) (expression_statement "iVar18 = iVar9 + 1;" (assignment_expression "iVar18 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;" statement_identifier : (if_statement "if (uVar15 != *puVar14) goto LAB_0003bddd;" if (parenthesized_expression "(uVar15 != *puVar14)" ( (binary_expression "uVar15 != *puVar14" identifier != (pointer_expression "*puVar14" * identifier)) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (labeled_statement "LAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" statement_identifier : (if_statement "if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" if (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0xfffffff) != 0)" ( (binary_expression "((uVar11 ^ puVar14[1]) & 0xfffffff) != 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0xfffffff)" ( (binary_expression "(uVar11 ^ puVar14[1]) & 0xfffffff" (parenthesized_expression "(uVar11 ^ puVar14[1])" ( (binary_expression "uVar11 ^ puVar14[1]" identifier ^ (subscript_expression "puVar14[1]" identifier [ number_literal ])) )) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (expression_statement "iVar12 = FUN_00039090();" (assignment_expression "iVar12 = FUN_00039090()" identifier = (call_expression "FUN_00039090()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar23 = iVar12 == 0;" (assignment_expression "bVar23 = iVar12 == 0" identifier = (binary_expression "iVar12 == 0" identifier == number_literal)) ;) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }" if (parenthesized_expression "(iVar12 != 0)" ( (binary_expression "iVar12 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar5 = bVar24;\n          }" { (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" identifier = identifier) ;) })) }) (else_clause "else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" else (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" if (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" ( (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" { (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" identifier = true) ;) (goto_statement "goto LAB_0003bd3e;" goto statement_identifier ;) })) (labeled_statement "LAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" statement_identifier : (if_statement "if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" if (parenthesized_expression "((iVar9 != 0) && ((bool)(bVar4 | bVar24)))" ( (binary_expression "(iVar9 != 0) && ((bool)(bVar4 | bVar24))" (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "((bool)(bVar4 | bVar24))" ( (cast_expression "(bool)(bVar4 | bVar24)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar4 | bVar24)" ( (binary_expression "bVar4 | bVar24" identifier | identifier) ))) ))) )) (compound_statement "{\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" { (expression_statement "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) (if_statement "if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" if (parenthesized_expression "((local_4c & 0x60000000) == 0)" ( (binary_expression "(local_4c & 0x60000000) == 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) }) (else_clause "else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" else (compound_statement "{\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" { (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) }))) }))) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" if (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" ( (binary_expression "uVar15 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" ( (comma_expression "local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "local_58 = 0" identifier = number_literal) , (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" ( (binary_expression "uVar15 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }" { (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" identifier = (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_58 = uVar15 & 0xffffff00;" (assignment_expression "local_58 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" else (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n          }" { (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" identifier = (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) ))))) ;) }))) (expression_statement "local_4c = uVar11;" (assignment_expression "local_4c = uVar11" identifier = identifier) ;) (if_statement "if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" { (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" identifier = identifier) ;) (goto_statement "goto LAB_0003bbca;" goto statement_identifier ;) })) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" identifier = number_literal) ;) (expression_statement "bVar4 = bVar24;" (assignment_expression "bVar4 = bVar24" identifier = identifier) ;) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" identifier = identifier) ;) (if_statement "if (uVar15 == *puVar14) goto LAB_0003bbd6;" if (parenthesized_expression "(uVar15 == *puVar14)" ( (binary_expression "uVar15 == *puVar14" identifier == (pointer_expression "*puVar14" * identifier)) )) (goto_statement "goto LAB_0003bbd6;" goto statement_identifier ;)) (labeled_statement "LAB_0003bddd:\n          bVar23 = true;" statement_identifier : (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" identifier = true) ;)) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) }))) (expression_statement "iVar9 = iVar18;" (assignment_expression "iVar9 = iVar18" identifier = identifier) ;) (if_statement "if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" if (parenthesized_expression "(local_60 <= iVar9)" ( (binary_expression "local_60 <= iVar9" identifier <= identifier) )) (compound_statement "{\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" { (expression_statement "local_60 = iVar22 + 0x100;" (assignment_expression "local_60 = iVar22 + 0x100" identifier = (binary_expression "iVar22 + 0x100" identifier + number_literal)) ;) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" identifier = (call_expression "FUN_0002d5f0(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal )))) ;) })) (expression_statement "*(uint *)(local_6c + iVar21) = uVar15;" (assignment_expression "*(uint *)(local_6c + iVar21) = uVar15" (pointer_expression "*(uint *)(local_6c + iVar21)" * (cast_expression "(uint *)(local_6c + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + iVar21)" ( (binary_expression "local_6c + iVar21" identifier + identifier) )))) = identifier) ;) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" if (parenthesized_expression "(uVar16 != 0)" ( (binary_expression "uVar16 != 0" identifier != number_literal) )) (compound_statement "{\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" { (do_statement "do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);" do (compound_statement "{\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          }" { (while_statement "while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" { (expression_statement "iVar21 = iVar9;" (assignment_expression "iVar21 = iVar9" identifier = identifier) ;) (expression_statement "puVar13 = puVar13 + uVar16 * 3;" (assignment_expression "puVar13 = puVar13 + uVar16 * 3" identifier = (binary_expression "puVar13 + uVar16 * 3" identifier + (binary_expression "uVar16 * 3" identifier * number_literal))) ;) (expression_statement "uVar16 = *puVar13;" (assignment_expression "uVar16 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "uVar19 = uVar16 & 0xffffff00;" (assignment_expression "uVar19 = uVar16 & 0xffffff00" identifier = (binary_expression "uVar16 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar19 == 0xd900) break;" if (parenthesized_expression "(uVar19 == 0xd900)" ( (binary_expression "uVar19 == 0xd900" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" if (parenthesized_expression "(uVar19 != 0xda00)" ( (binary_expression "uVar19 != 0xda00" identifier != number_literal) )) (compound_statement "{\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" { (if_statement "if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" if (parenthesized_expression "(uVar19 == 0xd800)" ( (binary_expression "uVar19 == 0xd800" identifier == number_literal) )) (compound_statement "{\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" { (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })) (goto_statement "goto LAB_0003bf4c;" goto statement_identifier ;) })) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (if_statement "if (iVar21 + 1 < local_60) goto LAB_0003bf53;" if (parenthesized_expression "(iVar21 + 1 < local_60)" ( (binary_expression "iVar21 + 1 < local_60" (binary_expression "iVar21 + 1" identifier + number_literal) < identifier) )) (goto_statement "goto LAB_0003bf53;" goto statement_identifier ;)) (labeled_statement "LAB_0003bf9e:\n              local_60 = iVar21 + 0x100;" statement_identifier : (expression_statement "local_60 = iVar21 + 0x100;" (assignment_expression "local_60 = iVar21 + 0x100" identifier = (binary_expression "iVar21 + 0x100" identifier + number_literal)) ;)) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" identifier = (call_expression "FUN_0002d5f0(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal )))) ;) (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" * (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" ( (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" identifier + number_literal) + (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" ( (binary_expression "iVar21 + 1" identifier + number_literal) )) * number_literal)) )))) = identifier) ;) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) (if_statement "if (uVar16 == 0) goto LAB_0003bfcc;" if (parenthesized_expression "(uVar16 == 0)" ( (binary_expression "uVar16 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0003bfcc;" goto statement_identifier ;)) })) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (labeled_statement "LAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" statement_identifier : (if_statement "if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" if (parenthesized_expression "(local_60 <= iVar21 + 1)" ( (binary_expression "local_60 <= iVar21 + 1" identifier <= (binary_expression "iVar21 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bf9e;" goto statement_identifier ;))) (labeled_statement "LAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" statement_identifier : (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" * (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" ( (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" identifier + number_literal) + (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" ( (binary_expression "iVar21 + 1" identifier + number_literal) )) * number_literal)) )))) = identifier) ;)) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar16 != 0)" ( (binary_expression "uVar16 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_0003bfcc:\n          iVar9 = iVar21 + 1;" statement_identifier : (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;)) (expression_statement "local_4c = local_4c | 0x80000000;" (assignment_expression "local_4c = local_4c | 0x80000000" identifier = (binary_expression "local_4c | 0x80000000" identifier | number_literal)) ;) })) (if_statement "if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" if (parenthesized_expression "(bVar23)" ( identifier )) (compound_statement "{\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" { (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));" (assignment_expression "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) (expression_statement "*puVar13 = uVar15;" (assignment_expression "*puVar13 = uVar15" (pointer_expression "*puVar13" * identifier) = identifier) ;) (expression_statement "uVar15 = uVar11 | 0x80000000;" (assignment_expression "uVar15 = uVar11 | 0x80000000" identifier = (binary_expression "uVar11 | 0x80000000" identifier | number_literal)) ;) (if_statement "if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }" if (parenthesized_expression "(local_40 != local_80)" ( (binary_expression "local_40 != local_80" identifier != identifier) )) (compound_statement "{\n            uVar15 = uVar11;\n          }" { (expression_statement "uVar15 = uVar11;" (assignment_expression "uVar15 = uVar11" identifier = identifier) ;) })) (expression_statement "puVar13[1] = uVar15;" (assignment_expression "puVar13[1] = uVar15" (subscript_expression "puVar13[1]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "iVar17 = local_80 + 1;" (assignment_expression "iVar17 = local_80 + 1" identifier = (binary_expression "local_80 + 1" identifier + number_literal)) ;) (if_statement "if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" if (parenthesized_expression "((uVar11 & 0x400000) == 0)" ( (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" ( (binary_expression "uVar11 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" { (labeled_statement "LAB_0003bc62:\n          bVar24 = bVar5;" statement_identifier : (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;)) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }) (else_clause "else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" else (compound_statement "{\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" { (if_statement "if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" { (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (goto_statement "goto LAB_0003bc62;" goto statement_identifier ;) })) (if_statement "if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" if (parenthesized_expression "((iVar20 == local_3c) && (local_34 == iVar17))" ( (binary_expression "(iVar20 == local_3c) && (local_34 == iVar17)" (parenthesized_expression "(iVar20 == local_3c)" ( (binary_expression "iVar20 == local_3c" identifier == identifier) )) && (parenthesized_expression "(local_34 == iVar17)" ( (binary_expression "local_34 == iVar17" identifier == identifier) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" { comment (expression_statement "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));" (call_expression "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" identifier (argument_list "(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" ( (binary_expression "&UNK_0004647f + unaff_EDI" (pointer_expression "&UNK_0004647f" & identifier) + identifier) , (cast_expression "(char *)(unaff_EDI + 0x46160)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46160)" ( (binary_expression "unaff_EDI + 0x46160" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x46d43)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d43)" ( (binary_expression "unaff_EDI + 0x46d43" identifier + number_literal) ))) ))) ;) })) (expression_statement "iVar17 = FUN_000390d0();" (assignment_expression "iVar17 = FUN_000390d0()" identifier = (call_expression "FUN_000390d0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar24 = true;" (assignment_expression "bVar24 = true" identifier = true) ;) (if_statement "if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }" if (parenthesized_expression "(iVar17 != 0)" ( (binary_expression "iVar17 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar24 = bVar5;\n          }" { (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;) })) (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" identifier = identifier) ;) (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }))) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "local_80 = iVar17;" (assignment_expression "local_80 = iVar17" identifier = identifier) ;) (expression_statement "bVar23 = bVar6;" (assignment_expression "bVar23 = bVar6" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" * identifier) = (pointer_expression "*psVar10" * identifier)) ;) (goto_statement "goto LAB_0003c0a8;" goto statement_identifier ;) (labeled_statement "LAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" statement_identifier : (if_statement "if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" if (parenthesized_expression "((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0))" ( (binary_expression "(bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" (parenthesized_expression "(bVar5)" ( identifier )) && (parenthesized_expression "(FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" ( (comma_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) , (binary_expression "(local_4c & 0x60000000) != 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" { (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) }))) (labeled_statement "LAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" statement_identifier : (if_statement "if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" if (parenthesized_expression "(*(int *)(psVar10 + 6) != 0)" ( (binary_expression "*(int *)(psVar10 + 6) != 0" (pointer_expression "*(int *)(psVar10 + 6)" * (cast_expression "(int *)(psVar10 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar10 + 6)" ( (binary_expression "psVar10 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00039830();\n  }" { (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" identifier (argument_list "()" ( ))) ;) }))) (expression_statement "local_3c = local_3c + 1;" (assignment_expression "local_3c = local_3c + 1" identifier = (binary_expression "local_3c + 1" identifier + number_literal)) ;) (if_statement "if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;" if (parenthesized_expression "(*(int *)(param_1 + 0x128) <= local_3c)" ( (binary_expression "*(int *)(param_1 + 0x128) <= local_3c" (pointer_expression "*(int *)(param_1 + 0x128)" * (cast_expression "(int *)(param_1 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x128)" ( (binary_expression "param_1 + 0x128" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c0cc;" goto statement_identifier ;)) (goto_statement "goto LAB_0003b700;" goto statement_identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid __regparm3 do_paint(Terminal *term,Context ctx,int may_optimise)\n\n{\n  int iVar1;\n  int iVar2;\n  wchar_t wVar3;\n  termline *destline;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  void *ptr;\n  termline *ptVar7;\n  termchar *ptVar8;\n  wchar_t *pwVar9;\n  uint uVar10;\n  ulong *puVar11;\n  int iVar12;\n  termchar *b;\n  uint *puVar13;\n  uint uVar14;\n  uint uVar15;\n  unicode_data *bchr;\n  Context ctx_00;\n  ulong *puVar16;\n  int iVar17;\n  wchar_t wVar18;\n  int unaff_EDI;\n  termline *ldata_1;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  bool bVar22;\n  bool bVar23;\n  ulong in_stack_ffffff74;\n  int local_84;\n  int local_80;\n  termline *local_7c;\n  int *local_78;\n  wchar_t *local_6c;\n  size_t local_60;\n  uint local_58;\n  termchar *local_54;\n  uint local_4c;\n  int local_40;\n  termline *local_3c;\n  int local_34;\n  uint local_20;\n  \n  __x86_get_pc_thunk_di();\n  local_6c = (wchar_t *)safemalloc(0x400,4);\n  ptr = safemalloc(term->cols,0xc);\n  iVar1 = term->rvideo;\n  iVar2 = term->in_vbell;\n  local_20 = term->cursor_on;\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar21 = (term->curs).y;\n  ldata_1 = (termline *)(iVar21 - term->disptop);\n  ptVar7 = lineptr(term,iVar21,0x139f,0);\n  local_34 = (term->curs).x;\n  ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1);\n  if (ptVar8 == (termchar *)0x0) {\n    ptVar8 = ptVar7->chars;\n  }\n  else {\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);\n  }\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  ptVar7 = (termline *)term->dispcursy;\n  if ((-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))) {\n    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;\n    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }\n    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }\n    ptVar8->attr = ptVar8->attr | 0x3ffff;\n    term->curstype = 0;\n  }\n  term->dispcursy = -1;\n  term->dispcursx = -1;\n  if (term->rows < 1) {\nLAB_0003c0cc:\n    safefree(ptr);\n    safefree(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = (termline *)0x0;\nLAB_0003b700:\n  iVar21 = (int)&local_3c->lattr + term->disptop;\n  ptVar7 = lineptr(term,iVar21,0x13df,0);\n  local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c);\n  if (local_54 == (termchar *)0x0) {\n    local_78 = (int *)0x0;\n    local_54 = ptVar7->chars;\n  }\n  else {\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }\n  iVar17 = term->cols;\n  local_7c = term->disptext[(int)local_3c];\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar19 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }\n  }\n  local_7c->lattr = ptVar7->lattr;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)) {\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }\nLAB_0003c0a8:\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  local_3c = (termline *)((int)&local_3c->lattr + 1);\n  if (term->rows <= (int)local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}\n\n" comment (function_definition "void __regparm3 do_paint(Terminal *term,Context ctx,int may_optimise)\n\n{\n  int iVar1;\n  int iVar2;\n  wchar_t wVar3;\n  termline *destline;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  void *ptr;\n  termline *ptVar7;\n  termchar *ptVar8;\n  wchar_t *pwVar9;\n  uint uVar10;\n  ulong *puVar11;\n  int iVar12;\n  termchar *b;\n  uint *puVar13;\n  uint uVar14;\n  uint uVar15;\n  unicode_data *bchr;\n  Context ctx_00;\n  ulong *puVar16;\n  int iVar17;\n  wchar_t wVar18;\n  int unaff_EDI;\n  termline *ldata_1;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  bool bVar22;\n  bool bVar23;\n  ulong in_stack_ffffff74;\n  int local_84;\n  int local_80;\n  termline *local_7c;\n  int *local_78;\n  wchar_t *local_6c;\n  size_t local_60;\n  uint local_58;\n  termchar *local_54;\n  uint local_4c;\n  int local_40;\n  termline *local_3c;\n  int local_34;\n  uint local_20;\n  \n  __x86_get_pc_thunk_di();\n  local_6c = (wchar_t *)safemalloc(0x400,4);\n  ptr = safemalloc(term->cols,0xc);\n  iVar1 = term->rvideo;\n  iVar2 = term->in_vbell;\n  local_20 = term->cursor_on;\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar21 = (term->curs).y;\n  ldata_1 = (termline *)(iVar21 - term->disptop);\n  ptVar7 = lineptr(term,iVar21,0x139f,0);\n  local_34 = (term->curs).x;\n  ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1);\n  if (ptVar8 == (termchar *)0x0) {\n    ptVar8 = ptVar7->chars;\n  }\n  else {\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);\n  }\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  ptVar7 = (termline *)term->dispcursy;\n  if ((-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))) {\n    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;\n    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }\n    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }\n    ptVar8->attr = ptVar8->attr | 0x3ffff;\n    term->curstype = 0;\n  }\n  term->dispcursy = -1;\n  term->dispcursx = -1;\n  if (term->rows < 1) {\nLAB_0003c0cc:\n    safefree(ptr);\n    safefree(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = (termline *)0x0;\nLAB_0003b700:\n  iVar21 = (int)&local_3c->lattr + term->disptop;\n  ptVar7 = lineptr(term,iVar21,0x13df,0);\n  local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c);\n  if (local_54 == (termchar *)0x0) {\n    local_78 = (int *)0x0;\n    local_54 = ptVar7->chars;\n  }\n  else {\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }\n  iVar17 = term->cols;\n  local_7c = term->disptext[(int)local_3c];\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar19 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }\n  }\n  local_7c->lattr = ptVar7->lattr;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)) {\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }\nLAB_0003c0a8:\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  local_3c = (termline *)((int)&local_3c->lattr + 1);\n  if (term->rows <= (int)local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "do_paint(Terminal *term,Context ctx,int may_optimise)" identifier (parameter_list "(Terminal *term,Context ctx,int may_optimise)" ( (parameter_declaration "Terminal *term" type_identifier (pointer_declarator "*term" * identifier)) , (parameter_declaration "Context ctx" type_identifier identifier) , (parameter_declaration "int may_optimise" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  wchar_t wVar3;\n  termline *destline;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  void *ptr;\n  termline *ptVar7;\n  termchar *ptVar8;\n  wchar_t *pwVar9;\n  uint uVar10;\n  ulong *puVar11;\n  int iVar12;\n  termchar *b;\n  uint *puVar13;\n  uint uVar14;\n  uint uVar15;\n  unicode_data *bchr;\n  Context ctx_00;\n  ulong *puVar16;\n  int iVar17;\n  wchar_t wVar18;\n  int unaff_EDI;\n  termline *ldata_1;\n  int iVar19;\n  int iVar20;\n  int iVar21;\n  bool bVar22;\n  bool bVar23;\n  ulong in_stack_ffffff74;\n  int local_84;\n  int local_80;\n  termline *local_7c;\n  int *local_78;\n  wchar_t *local_6c;\n  size_t local_60;\n  uint local_58;\n  termchar *local_54;\n  uint local_4c;\n  int local_40;\n  termline *local_3c;\n  int local_34;\n  uint local_20;\n  \n  __x86_get_pc_thunk_di();\n  local_6c = (wchar_t *)safemalloc(0x400,4);\n  ptr = safemalloc(term->cols,0xc);\n  iVar1 = term->rvideo;\n  iVar2 = term->in_vbell;\n  local_20 = term->cursor_on;\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar21 = (term->curs).y;\n  ldata_1 = (termline *)(iVar21 - term->disptop);\n  ptVar7 = lineptr(term,iVar21,0x139f,0);\n  local_34 = (term->curs).x;\n  ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1);\n  if (ptVar8 == (termchar *)0x0) {\n    ptVar8 = ptVar7->chars;\n  }\n  else {\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);\n  }\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  ptVar7 = (termline *)term->dispcursy;\n  if ((-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))) {\n    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;\n    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }\n    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }\n    ptVar8->attr = ptVar8->attr | 0x3ffff;\n    term->curstype = 0;\n  }\n  term->dispcursy = -1;\n  term->dispcursx = -1;\n  if (term->rows < 1) {\nLAB_0003c0cc:\n    safefree(ptr);\n    safefree(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = (termline *)0x0;\nLAB_0003b700:\n  iVar21 = (int)&local_3c->lattr + term->disptop;\n  ptVar7 = lineptr(term,iVar21,0x13df,0);\n  local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c);\n  if (local_54 == (termchar *)0x0) {\n    local_78 = (int *)0x0;\n    local_54 = ptVar7->chars;\n  }\n  else {\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }\n  iVar17 = term->cols;\n  local_7c = term->disptext[(int)local_3c];\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar19 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }\n  }\n  local_7c->lattr = ptVar7->lattr;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)) {\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }\nLAB_0003c0a8:\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }\n  local_3c = (termline *)((int)&local_3c->lattr + 1);\n  if (term->rows <= (int)local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "wchar_t wVar3;" type_identifier identifier ;) (declaration "termline *destline;" type_identifier (pointer_declarator "*destline" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "void *ptr;" primitive_type (pointer_declarator "*ptr" * identifier) ;) (declaration "termline *ptVar7;" type_identifier (pointer_declarator "*ptVar7" * identifier) ;) (declaration "termchar *ptVar8;" type_identifier (pointer_declarator "*ptVar8" * identifier) ;) (declaration "wchar_t *pwVar9;" type_identifier (pointer_declarator "*pwVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "ulong *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "termchar *b;" type_identifier (pointer_declarator "*b" * identifier) ;) (declaration "uint *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "unicode_data *bchr;" type_identifier (pointer_declarator "*bchr" * identifier) ;) (declaration "Context ctx_00;" type_identifier identifier ;) (declaration "ulong *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "wchar_t wVar18;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "termline *ldata_1;" type_identifier (pointer_declarator "*ldata_1" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "bool bVar22;" primitive_type identifier ;) (declaration "bool bVar23;" primitive_type identifier ;) (declaration "ulong in_stack_ffffff74;" type_identifier identifier ;) (declaration "int local_84;" primitive_type identifier ;) (declaration "int local_80;" primitive_type identifier ;) (declaration "termline *local_7c;" type_identifier (pointer_declarator "*local_7c" * identifier) ;) (declaration "int *local_78;" primitive_type (pointer_declarator "*local_78" * identifier) ;) (declaration "wchar_t *local_6c;" type_identifier (pointer_declarator "*local_6c" * identifier) ;) (declaration "size_t local_60;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "termchar *local_54;" type_identifier (pointer_declarator "*local_54" * identifier) ;) (declaration "uint local_4c;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "termline *local_3c;" type_identifier (pointer_declarator "*local_3c" * identifier) ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "__x86_get_pc_thunk_di();" (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_6c = (wchar_t *)safemalloc(0x400,4);" (assignment_expression "local_6c = (wchar_t *)safemalloc(0x400,4)" identifier = (cast_expression "(wchar_t *)safemalloc(0x400,4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc(0x400,4)" identifier (argument_list "(0x400,4)" ( number_literal , number_literal ))))) ;) (expression_statement "ptr = safemalloc(term->cols,0xc);" (assignment_expression "ptr = safemalloc(term->cols,0xc)" identifier = (call_expression "safemalloc(term->cols,0xc)" identifier (argument_list "(term->cols,0xc)" ( (field_expression "term->cols" identifier -> field_identifier) , number_literal )))) ;) (expression_statement "iVar1 = term->rvideo;" (assignment_expression "iVar1 = term->rvideo" identifier = (field_expression "term->rvideo" identifier -> field_identifier)) ;) (expression_statement "iVar2 = term->in_vbell;" (assignment_expression "iVar2 = term->in_vbell" identifier = (field_expression "term->in_vbell" identifier -> field_identifier)) ;) (expression_statement "local_20 = term->cursor_on;" (assignment_expression "local_20 = term->cursor_on" identifier = (field_expression "term->cursor_on" identifier -> field_identifier)) ;) (if_statement "if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" if (parenthesized_expression "(local_20 != 0)" ( (binary_expression "local_20 != 0" identifier != number_literal) )) (compound_statement "{\n    local_20 = 0x20000000;\n    if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" { (expression_statement "local_20 = 0x20000000;" (assignment_expression "local_20 = 0x20000000" identifier = number_literal) ;) (if_statement "if (term->has_focus != 0) {\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" if (parenthesized_expression "(term->has_focus != 0)" ( (binary_expression "term->has_focus != 0" (field_expression "term->has_focus" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" { (if_statement "if (term->cblinker == 0) {\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }" if (parenthesized_expression "(term->cblinker == 0)" ( (binary_expression "term->cblinker == 0" (field_expression "term->cblinker" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n        local_20 = 0x40000000;\n        if (term->blink_cur != 0) {\n          local_20 = 0;\n        }\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) (if_statement "if (term->blink_cur != 0) {\n          local_20 = 0;\n        }" if (parenthesized_expression "(term->blink_cur != 0)" ( (binary_expression "term->blink_cur != 0" (field_expression "term->blink_cur" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n          local_20 = 0;\n        }" { (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n        local_20 = 0x40000000;\n      }" else (compound_statement "{\n        local_20 = 0x40000000;\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) }))) })) (if_statement "if (term->wrapnext != 0) {\n      local_20 = local_20 | 0x10000000;\n    }" if (parenthesized_expression "(term->wrapnext != 0)" ( (binary_expression "term->wrapnext != 0" (field_expression "term->wrapnext" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      local_20 = local_20 | 0x10000000;\n    }" { (expression_statement "local_20 = local_20 | 0x10000000;" (assignment_expression "local_20 = local_20 | 0x10000000" identifier = (binary_expression "local_20 | 0x10000000" identifier | number_literal)) ;) })) })) (expression_statement "iVar21 = (term->curs).y;" (assignment_expression "iVar21 = (term->curs).y" identifier = (field_expression "(term->curs).y" (parenthesized_expression "(term->curs)" ( (field_expression "term->curs" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "ldata_1 = (termline *)(iVar21 - term->disptop);" (assignment_expression "ldata_1 = (termline *)(iVar21 - term->disptop)" identifier = (cast_expression "(termline *)(iVar21 - term->disptop)" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 - term->disptop)" ( (binary_expression "iVar21 - term->disptop" identifier - (field_expression "term->disptop" identifier -> field_identifier)) )))) ;) (expression_statement "ptVar7 = lineptr(term,iVar21,0x139f,0);" (assignment_expression "ptVar7 = lineptr(term,iVar21,0x139f,0)" identifier = (call_expression "lineptr(term,iVar21,0x139f,0)" identifier (argument_list "(term,iVar21,0x139f,0)" ( identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "local_34 = (term->curs).x;" (assignment_expression "local_34 = (term->curs).x" identifier = (field_expression "(term->curs).x" (parenthesized_expression "(term->curs)" ( (field_expression "term->curs" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1);" (assignment_expression "ptVar8 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1)" identifier = (call_expression "term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1)" identifier (argument_list "(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,ldata_1)" ( identifier , (cast_expression "(termline *)&ptVar7->size" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&ptVar7->size" & (field_expression "ptVar7->size" identifier -> field_identifier))) , (cast_expression "(int)&ptVar7->chars" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar7->chars" & (field_expression "ptVar7->chars" identifier -> field_identifier))) , identifier )))) ;) (if_statement "if (ptVar8 == (termchar *)0x0) {\n    ptVar8 = ptVar7->chars;\n  }\n  else {\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }" if (parenthesized_expression "(ptVar8 == (termchar *)0x0)" ( (binary_expression "ptVar8 == (termchar *)0x0" identifier == (cast_expression "(termchar *)0x0" ( (type_descriptor "termchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    ptVar8 = ptVar7->chars;\n  }" { (expression_statement "ptVar8 = ptVar7->chars;" (assignment_expression "ptVar8 = ptVar7->chars" identifier = (field_expression "ptVar7->chars" identifier -> field_identifier)) ;) }) (else_clause "else {\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }" else (compound_statement "{\n    local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];\n  }" { (expression_statement "local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34];" (assignment_expression "local_34 = term->post_bidi_cache[(int)ldata_1].forward[local_34]" identifier = (subscript_expression "term->post_bidi_cache[(int)ldata_1].forward[local_34]" (field_expression "term->post_bidi_cache[(int)ldata_1].forward" (subscript_expression "term->post_bidi_cache[(int)ldata_1]" (field_expression "term->post_bidi_cache" identifier -> field_identifier) [ (cast_expression "(int)ldata_1" ( (type_descriptor "int" primitive_type) ) identifier) ]) . field_identifier) [ identifier ])) ;) }))) (if_statement "if (0 < local_34) {\n    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);\n  }" if (parenthesized_expression "(0 < local_34)" ( (binary_expression "0 < local_34" number_literal < identifier) )) (compound_statement "{\n    local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);\n  }" { (expression_statement "local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff);" (assignment_expression "local_34 = local_34 - (uint)(ptVar8[local_34].chr == 0xdfff)" identifier = (binary_expression "local_34 - (uint)(ptVar8[local_34].chr == 0xdfff)" identifier - (call_expression "(uint)(ptVar8[local_34].chr == 0xdfff)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(ptVar8[local_34].chr == 0xdfff)" ( (binary_expression "ptVar8[local_34].chr == 0xdfff" (field_expression "ptVar8[local_34].chr" (subscript_expression "ptVar8[local_34]" identifier [ identifier ]) . field_identifier) == number_literal) ))))) ;) })) (if_statement "if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }" if (parenthesized_expression "(ptVar7->temporary != 0)" ( (binary_expression "ptVar7->temporary != 0" (field_expression "ptVar7->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    freeline(ptVar7);\n  }" { (expression_statement "freeline(ptVar7);" (call_expression "freeline(ptVar7)" identifier (argument_list "(ptVar7)" ( identifier ))) ;) })) (expression_statement "ptVar7 = (termline *)term->dispcursy;" (assignment_expression "ptVar7 = (termline *)term->dispcursy" identifier = (cast_expression "(termline *)term->dispcursy" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "term->dispcursy" identifier -> field_identifier))) ;) (if_statement "if ((-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))) {\n    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;\n    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }\n    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }\n    ptVar8->attr = ptVar8->attr | 0x3ffff;\n    term->curstype = 0;\n  }" if (parenthesized_expression "((-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21))))" ( (binary_expression "(-1 < (int)ptVar7) &&\n     (((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))" (parenthesized_expression "(-1 < (int)ptVar7)" ( (binary_expression "-1 < (int)ptVar7" number_literal < (cast_expression "(int)ptVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)))" ( (parenthesized_expression "((iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21))" ( (binary_expression "(iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)) ||\n      (local_34 != iVar21)" (parenthesized_expression "(iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7))" ( (comma_expression "iVar21 = term->dispcursx, term->curstype != local_20 || (ldata_1 != ptVar7)" (assignment_expression "iVar21 = term->dispcursx" identifier = (field_expression "term->dispcursx" identifier -> field_identifier)) , (binary_expression "term->curstype != local_20 || (ldata_1 != ptVar7)" (binary_expression "term->curstype != local_20" (field_expression "term->curstype" identifier -> field_identifier) != identifier) || (parenthesized_expression "(ldata_1 != ptVar7)" ( (binary_expression "ldata_1 != ptVar7" identifier != identifier) )))) )) || (parenthesized_expression "(local_34 != iVar21)" ( (binary_expression "local_34 != iVar21" identifier != identifier) ))) )) ))) )) (compound_statement "{\n    ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;\n    if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }\n    if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }\n    ptVar8->attr = ptVar8->attr | 0x3ffff;\n    term->curstype = 0;\n  }" { (expression_statement "ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21;" (assignment_expression "ptVar8 = term->disptext[(int)ptVar7]->chars + iVar21" identifier = (binary_expression "term->disptext[(int)ptVar7]->chars + iVar21" (field_expression "term->disptext[(int)ptVar7]->chars" (subscript_expression "term->disptext[(int)ptVar7]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)ptVar7" ( (type_descriptor "int" primitive_type) ) identifier) ]) -> field_identifier) + identifier)) ;) (if_statement "if ((iVar21 < 1) || (ptVar8->chr != 0xdfff)) {\n      iVar17 = term->cols;\n    }\n    else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }" if (parenthesized_expression "((iVar21 < 1) || (ptVar8->chr != 0xdfff))" ( (binary_expression "(iVar21 < 1) || (ptVar8->chr != 0xdfff)" (parenthesized_expression "(iVar21 < 1)" ( (binary_expression "iVar21 < 1" identifier < number_literal) )) || (parenthesized_expression "(ptVar8->chr != 0xdfff)" ( (binary_expression "ptVar8->chr != 0xdfff" (field_expression "ptVar8->chr" identifier -> field_identifier) != number_literal) ))) )) (compound_statement "{\n      iVar17 = term->cols;\n    }" { (expression_statement "iVar17 = term->cols;" (assignment_expression "iVar17 = term->cols" identifier = (field_expression "term->cols" identifier -> field_identifier)) ;) }) (else_clause "else {\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }" else (compound_statement "{\n      iVar17 = term->cols;\n      ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;\n    }" { (expression_statement "iVar17 = term->cols;" (assignment_expression "iVar17 = term->cols" identifier = (field_expression "term->cols" identifier -> field_identifier)) ;) (expression_statement "ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff;" (assignment_expression "ptVar8[-1].attr = ptVar8[-1].attr | 0x3ffff" (field_expression "ptVar8[-1].attr" (subscript_expression "ptVar8[-1]" identifier [ number_literal ]) . field_identifier) = (binary_expression "ptVar8[-1].attr | 0x3ffff" (field_expression "ptVar8[-1].attr" (subscript_expression "ptVar8[-1]" identifier [ number_literal ]) . field_identifier) | number_literal)) ;) }))) (if_statement "if ((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)) {\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }" if (parenthesized_expression "((iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff))" ( (binary_expression "(iVar21 < iVar17 + -1) && (ptVar8[1].chr == 0xdfff)" (parenthesized_expression "(iVar21 < iVar17 + -1)" ( (binary_expression "iVar21 < iVar17 + -1" identifier < (binary_expression "iVar17 + -1" identifier + number_literal)) )) && (parenthesized_expression "(ptVar8[1].chr == 0xdfff)" ( (binary_expression "ptVar8[1].chr == 0xdfff" (field_expression "ptVar8[1].chr" (subscript_expression "ptVar8[1]" identifier [ number_literal ]) . field_identifier) == number_literal) ))) )) (compound_statement "{\n      ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;\n    }" { (expression_statement "ptVar8[1].attr = ptVar8[1].attr | 0x3ffff;" (assignment_expression "ptVar8[1].attr = ptVar8[1].attr | 0x3ffff" (field_expression "ptVar8[1].attr" (subscript_expression "ptVar8[1]" identifier [ number_literal ]) . field_identifier) = (binary_expression "ptVar8[1].attr | 0x3ffff" (field_expression "ptVar8[1].attr" (subscript_expression "ptVar8[1]" identifier [ number_literal ]) . field_identifier) | number_literal)) ;) })) (expression_statement "ptVar8->attr = ptVar8->attr | 0x3ffff;" (assignment_expression "ptVar8->attr = ptVar8->attr | 0x3ffff" (field_expression "ptVar8->attr" identifier -> field_identifier) = (binary_expression "ptVar8->attr | 0x3ffff" (field_expression "ptVar8->attr" identifier -> field_identifier) | number_literal)) ;) (expression_statement "term->curstype = 0;" (assignment_expression "term->curstype = 0" (field_expression "term->curstype" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "term->dispcursy = -1;" (assignment_expression "term->dispcursy = -1" (field_expression "term->dispcursy" identifier -> field_identifier) = number_literal) ;) (expression_statement "term->dispcursx = -1;" (assignment_expression "term->dispcursx = -1" (field_expression "term->dispcursx" identifier -> field_identifier) = number_literal) ;) (if_statement "if (term->rows < 1) {\nLAB_0003c0cc:\n    safefree(ptr);\n    safefree(local_6c);\n    return;\n  }" if (parenthesized_expression "(term->rows < 1)" ( (binary_expression "term->rows < 1" (field_expression "term->rows" identifier -> field_identifier) < number_literal) )) (compound_statement "{\nLAB_0003c0cc:\n    safefree(ptr);\n    safefree(local_6c);\n    return;\n  }" { (labeled_statement "LAB_0003c0cc:\n    safefree(ptr);" statement_identifier : (expression_statement "safefree(ptr);" (call_expression "safefree(ptr)" identifier (argument_list "(ptr)" ( identifier ))) ;)) (expression_statement "safefree(local_6c);" (call_expression "safefree(local_6c)" identifier (argument_list "(local_6c)" ( identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "local_60 = 0x400;" (assignment_expression "local_60 = 0x400" identifier = number_literal) ;) (expression_statement "local_3c = (termline *)0x0;" (assignment_expression "local_3c = (termline *)0x0" identifier = (cast_expression "(termline *)0x0" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (labeled_statement "LAB_0003b700:\n  iVar21 = (int)&local_3c->lattr + term->disptop;" statement_identifier : (expression_statement "iVar21 = (int)&local_3c->lattr + term->disptop;" (assignment_expression "iVar21 = (int)&local_3c->lattr + term->disptop" identifier = (binary_expression "(int)&local_3c->lattr + term->disptop" (cast_expression "(int)&local_3c->lattr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_3c->lattr" & (field_expression "local_3c->lattr" identifier -> field_identifier))) + (field_expression "term->disptop" identifier -> field_identifier))) ;)) (expression_statement "ptVar7 = lineptr(term,iVar21,0x13df,0);" (assignment_expression "ptVar7 = lineptr(term,iVar21,0x13df,0)" identifier = (call_expression "lineptr(term,iVar21,0x13df,0)" identifier (argument_list "(term,iVar21,0x13df,0)" ( identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c);" (assignment_expression "local_54 = term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c)" identifier = (call_expression "term_bidi_line(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c)" identifier (argument_list "(term,(termline *)&ptVar7->size,(int)&ptVar7->chars,local_3c)" ( identifier , (cast_expression "(termline *)&ptVar7->size" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&ptVar7->size" & (field_expression "ptVar7->size" identifier -> field_identifier))) , (cast_expression "(int)&ptVar7->chars" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar7->chars" & (field_expression "ptVar7->chars" identifier -> field_identifier))) , identifier )))) ;) (if_statement "if (local_54 == (termchar *)0x0) {\n    local_78 = (int *)0x0;\n    local_54 = ptVar7->chars;\n  }\n  else {\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }" if (parenthesized_expression "(local_54 == (termchar *)0x0)" ( (binary_expression "local_54 == (termchar *)0x0" identifier == (cast_expression "(termchar *)0x0" ( (type_descriptor "termchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_78 = (int *)0x0;\n    local_54 = ptVar7->chars;\n  }" { (expression_statement "local_78 = (int *)0x0;" (assignment_expression "local_78 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_54 = ptVar7->chars;" (assignment_expression "local_54 = ptVar7->chars" identifier = (field_expression "ptVar7->chars" identifier -> field_identifier)) ;) }) (else_clause "else {\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }" else (compound_statement "{\n    local_78 = term->post_bidi_cache[(int)local_3c].backward;\n  }" { (expression_statement "local_78 = term->post_bidi_cache[(int)local_3c].backward;" (assignment_expression "local_78 = term->post_bidi_cache[(int)local_3c].backward" identifier = (field_expression "term->post_bidi_cache[(int)local_3c].backward" (subscript_expression "term->post_bidi_cache[(int)local_3c]" (field_expression "term->post_bidi_cache" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ]) . field_identifier)) ;) }))) (expression_statement "iVar17 = term->cols;" (assignment_expression "iVar17 = term->cols" identifier = (field_expression "term->cols" identifier -> field_identifier)) ;) (expression_statement "local_7c = term->disptext[(int)local_3c];" (assignment_expression "local_7c = term->disptext[(int)local_3c]" identifier = (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (if_statement "if (0 < iVar17) {\n    local_84 = 0;\n    iVar19 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n    local_84 = 0;\n    iVar19 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }\n  }" { (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    } while (local_84 < iVar17);" do (compound_statement "{\n      local_80 = local_84;\n      if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }\n      wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);\n      uVar10 = *(uint *)((int)&local_54->attr + iVar19);\n      if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }\n      if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar14 = wVar18 & 0xffffff00;\n      if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }\n      uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;\n      if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }\n      if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }\n      pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);\n      if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }\n      if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)((int)ptr + iVar19 + 4) = uVar10;\n      *(undefined4 *)((int)ptr + iVar19 + 8) = 0;\n      iVar17 = term->cols;\n      *(wchar_t *)((int)ptr + iVar19) = wVar18;\n      iVar19 = iVar19 + 0xc;\n    }" { (expression_statement "local_80 = local_84;" (assignment_expression "local_80 = local_84" identifier = identifier) ;) (if_statement "if (local_78 != (int *)0x0) {\n        local_80 = local_78[local_84];\n      }" if (parenthesized_expression "(local_78 != (int *)0x0)" ( (binary_expression "local_78 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        local_80 = local_78[local_84];\n      }" { (expression_statement "local_80 = local_78[local_84];" (assignment_expression "local_80 = local_78[local_84]" identifier = (subscript_expression "local_78[local_84]" identifier [ identifier ])) ;) })) (expression_statement "wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19);" (assignment_expression "wVar18 = *(wchar_t *)((int)&local_54->chr + iVar19)" identifier = (pointer_expression "*(wchar_t *)((int)&local_54->chr + iVar19)" * (cast_expression "(wchar_t *)((int)&local_54->chr + iVar19)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_54->chr + iVar19)" ( (binary_expression "(int)&local_54->chr + iVar19" (cast_expression "(int)&local_54->chr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_54->chr" & (field_expression "local_54->chr" identifier -> field_identifier))) + identifier) ))))) ;) (expression_statement "uVar10 = *(uint *)((int)&local_54->attr + iVar19);" (assignment_expression "uVar10 = *(uint *)((int)&local_54->attr + iVar19)" identifier = (pointer_expression "*(uint *)((int)&local_54->attr + iVar19)" * (cast_expression "(uint *)((int)&local_54->attr + iVar19)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_54->attr + iVar19)" ( (binary_expression "(int)&local_54->attr + iVar19" (cast_expression "(int)&local_54->attr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_54->attr" & (field_expression "local_54->attr" identifier -> field_identifier))) + identifier) ))))) ;) (if_statement "if (term->ansi_colour == 0) {\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }" if (parenthesized_expression "(term->ansi_colour == 0)" ( (binary_expression "term->ansi_colour == 0" (field_expression "term->ansi_colour" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n        uVar10 = uVar10 & 0xfffc0000 | 0x20500;\n      }" { (expression_statement "uVar10 = uVar10 & 0xfffc0000 | 0x20500;" (assignment_expression "uVar10 = uVar10 & 0xfffc0000 | 0x20500" identifier = (binary_expression "uVar10 & 0xfffc0000 | 0x20500" (binary_expression "uVar10 & 0xfffc0000" identifier & number_literal) | number_literal)) ;) })) (if_statement "if (term->xterm_256_colour == 0) {\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }" if (parenthesized_expression "(term->xterm_256_colour == 0)" ( (binary_expression "term->xterm_256_colour == 0" (field_expression "term->xterm_256_colour" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n        if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }\n      }" { (if_statement "if ((uVar10 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }" if (parenthesized_expression "((uVar10 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar10 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar10 & 0x1ff) - 0x10" (parenthesized_expression "(uVar10 & 0x1ff)" ( (binary_expression "uVar10 & 0x1ff" identifier & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;\n        }" { (expression_statement "uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8;" (assignment_expression "uVar10 = (uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8" identifier = (binary_expression "(uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1) << 8" (call_expression "(uint)((uint3)(uVar10 >> 8) & 0xfffffe | 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint3)(uVar10 >> 8) & 0xfffffe | 1)" ( (binary_expression "(uint3)(uVar10 >> 8) & 0xfffffe | 1" (binary_expression "(uint3)(uVar10 >> 8) & 0xfffffe" (call_expression "(uint3)(uVar10 >> 8)" (parenthesized_expression "(uint3)" ( identifier )) (argument_list "(uVar10 >> 8)" ( (binary_expression "uVar10 >> 8" identifier >> number_literal) ))) & number_literal) | number_literal) ))) << number_literal)) ;) })) (if_statement "if ((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }" if (parenthesized_expression "((uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar10 >> 9 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar10 >> 9 & 0x1ff) - 0x10" (parenthesized_expression "(uVar10 >> 9 & 0x1ff)" ( (binary_expression "uVar10 >> 9 & 0x1ff" (binary_expression "uVar10 >> 9" identifier >> number_literal) & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar10 = uVar10 & 0xfffc01ff | 0x20400;\n        }" { (expression_statement "uVar10 = uVar10 & 0xfffc01ff | 0x20400;" (assignment_expression "uVar10 = uVar10 & 0xfffc01ff | 0x20400" identifier = (binary_expression "uVar10 & 0xfffc01ff | 0x20400" (binary_expression "uVar10 & 0xfffc01ff" identifier & number_literal) | number_literal)) ;) })) })) (expression_statement "uVar14 = wVar18 & 0xffffff00;" (assignment_expression "uVar14 = wVar18 & 0xffffff00" identifier = (binary_expression "wVar18 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar14 == 0xd900) {\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" if (parenthesized_expression "(uVar14 == 0xd900)" ( (binary_expression "uVar14 == 0xd900" identifier == number_literal) )) (compound_statement "{\n        wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\n      }" { (expression_statement "wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_xterm[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_xterm" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) }) (else_clause "else if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" else (if_statement "if (uVar14 == 0xda00) {\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }\n      else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" if (parenthesized_expression "(uVar14 == 0xda00)" ( (binary_expression "uVar14 == 0xda00" identifier == number_literal) )) (compound_statement "{\n        wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n      }" { (expression_statement "wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_scoacs[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_scoacs" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) }) (else_clause "else if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" else (if_statement "if (uVar14 == 0xd800) {\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" if (parenthesized_expression "(uVar14 == 0xd800)" ( (binary_expression "uVar14 == 0xd800" identifier == number_literal) )) (compound_statement "{\n        wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n      }" { (expression_statement "wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_line[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_line" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) })))))) (if_statement "if ((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)) {\n        uVar10 = uVar10 | 0x400000;\n      }" if (parenthesized_expression "((local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff))" ( (binary_expression "(local_84 < iVar17 + -1) && (*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)" (parenthesized_expression "(local_84 < iVar17 + -1)" ( (binary_expression "local_84 < iVar17 + -1" identifier < (binary_expression "iVar17 + -1" identifier + number_literal)) )) && (parenthesized_expression "(*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff)" ( (binary_expression "*(int *)((int)&local_54[1].chr + iVar19) == 0xdfff" (pointer_expression "*(int *)((int)&local_54[1].chr + iVar19)" * (cast_expression "(int *)((int)&local_54[1].chr + iVar19)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_54[1].chr + iVar19)" ( (binary_expression "(int)&local_54[1].chr + iVar19" (cast_expression "(int)&local_54[1].chr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_54[1].chr" & (field_expression "local_54[1].chr" (subscript_expression "local_54[1]" identifier [ number_literal ]) . field_identifier))) + identifier) )))) == number_literal) ))) )) (compound_statement "{\n        uVar10 = uVar10 | 0x400000;\n      }" { (expression_statement "uVar10 = uVar10 | 0x400000;" (assignment_expression "uVar10 = uVar10 | 0x400000" identifier = (binary_expression "uVar10 | 0x400000" identifier | number_literal)) ;) })) (expression_statement "uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14;" (assignment_expression "uVar10 = uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14" identifier = (binary_expression "uVar10 ^ (uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14" identifier ^ (binary_expression "(uint)((iVar1 == 0) != (iVar2 == 0)) << 0x14" (call_expression "(uint)((iVar1 == 0) != (iVar2 == 0))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((iVar1 == 0) != (iVar2 == 0))" ( (binary_expression "(iVar1 == 0) != (iVar2 == 0)" (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) != (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))) ))) << number_literal))) ;) (if_statement "if ((uint)(term->selstate + GDK_BLANK_CURSOR) < 2) {\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }" if (parenthesized_expression "((uint)(term->selstate + GDK_BLANK_CURSOR) < 2)" ( (binary_expression "(uint)(term->selstate + GDK_BLANK_CURSOR) < 2" (call_expression "(uint)(term->selstate + GDK_BLANK_CURSOR)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(term->selstate + GDK_BLANK_CURSOR)" ( (binary_expression "term->selstate + GDK_BLANK_CURSOR" (field_expression "term->selstate" identifier -> field_identifier) + identifier) ))) < number_literal) )) (compound_statement "{\n        iVar17 = (term->selstart).y;\n        if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }\n      }" { (expression_statement "iVar17 = (term->selstart).y;" (assignment_expression "iVar17 = (term->selstart).y" identifier = (field_expression "(term->selstart).y" (parenthesized_expression "(term->selstart)" ( (field_expression "term->selstart" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (term->seltype == ADDRTYPE_UNSPEC) {\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(term->seltype == ADDRTYPE_UNSPEC)" ( (binary_expression "term->seltype == ADDRTYPE_UNSPEC" (field_expression "term->seltype" identifier -> field_identifier) == identifier) )) (compound_statement "{\n          if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }\n        }" { (if_statement "if ((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))) {\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }" if (parenthesized_expression "((iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80))))" ( (binary_expression "(iVar17 < iVar21) || ((iVar21 == iVar17 && ((term->selstart).x <= local_80)))" (parenthesized_expression "(iVar17 < iVar21)" ( (binary_expression "iVar17 < iVar21" identifier < identifier) )) || (parenthesized_expression "((iVar21 == iVar17 && ((term->selstart).x <= local_80)))" ( (parenthesized_expression "(iVar21 == iVar17 && ((term->selstart).x <= local_80))" ( (binary_expression "iVar21 == iVar17 && ((term->selstart).x <= local_80)" (binary_expression "iVar21 == iVar17" identifier == identifier) && (parenthesized_expression "((term->selstart).x <= local_80)" ( (binary_expression "(term->selstart).x <= local_80" (field_expression "(term->selstart).x" (parenthesized_expression "(term->selstart)" ( (field_expression "term->selstart" identifier -> field_identifier) )) . field_identifier) <= identifier) ))) )) ))) )) (compound_statement "{\n            iVar17 = (term->selend).y;\n            if (iVar21 < iVar17) goto LAB_0003b988;\n            if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }\n          }" { (expression_statement "iVar17 = (term->selend).y;" (assignment_expression "iVar17 = (term->selend).y" identifier = (field_expression "(term->selend).y" (parenthesized_expression "(term->selend)" ( (field_expression "term->selend" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (iVar21 < iVar17) goto LAB_0003b988;" if (parenthesized_expression "(iVar21 < iVar17)" ( (binary_expression "iVar21 < iVar17" identifier < identifier) )) (goto_statement "goto LAB_0003b988;" goto statement_identifier ;)) (if_statement "if (iVar21 == iVar17) {\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }" if (parenthesized_expression "(iVar21 == iVar17)" ( (binary_expression "iVar21 == iVar17" identifier == identifier) )) (compound_statement "{\n              iVar17 = (term->selend).x;\n              goto joined_r0x0003ba86;\n            }" { (expression_statement "iVar17 = (term->selend).x;" (assignment_expression "iVar17 = (term->selend).x" identifier = (field_expression "(term->selend).x" (parenthesized_expression "(term->selend)" ( (field_expression "term->selend" identifier -> field_identifier) )) . field_identifier)) ;) (goto_statement "goto joined_r0x0003ba86;" goto statement_identifier ;) })) })) }) (else_clause "else if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }" else (if_statement "if (((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)) {\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y))" ( (binary_expression "((iVar17 <= iVar21) && ((term->selstart).x <= local_80)) &&\n                (iVar21 <= (term->selend).y)" (parenthesized_expression "((iVar17 <= iVar21) && ((term->selstart).x <= local_80))" ( (binary_expression "(iVar17 <= iVar21) && ((term->selstart).x <= local_80)" (parenthesized_expression "(iVar17 <= iVar21)" ( (binary_expression "iVar17 <= iVar21" identifier <= identifier) )) && (parenthesized_expression "((term->selstart).x <= local_80)" ( (binary_expression "(term->selstart).x <= local_80" (field_expression "(term->selstart).x" (parenthesized_expression "(term->selstart)" ( (field_expression "term->selstart" identifier -> field_identifier) )) . field_identifier) <= identifier) ))) )) && (parenthesized_expression "(iVar21 <= (term->selend).y)" ( (binary_expression "iVar21 <= (term->selend).y" identifier <= (field_expression "(term->selend).y" (parenthesized_expression "(term->selend)" ( (field_expression "term->selend" identifier -> field_identifier) )) . field_identifier)) ))) )) (compound_statement "{\n          iVar17 = (term->selend).x;\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }\n        }" { (expression_statement "iVar17 = (term->selend).x;" (assignment_expression "iVar17 = (term->selend).x" identifier = (field_expression "(term->selend).x" (parenthesized_expression "(term->selend)" ( (field_expression "term->selend" identifier -> field_identifier) )) . field_identifier)) ;) (labeled_statement "joined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }" statement_identifier : (if_statement "if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }" if (parenthesized_expression "(local_80 < iVar17)" ( (binary_expression "local_80 < iVar17" identifier < identifier) )) (compound_statement "{\nLAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;\n          }" { (labeled_statement "LAB_0003b988:\n            uVar10 = uVar10 ^ 0x100000;" statement_identifier : (expression_statement "uVar10 = uVar10 ^ 0x100000;" (assignment_expression "uVar10 = uVar10 ^ 0x100000" identifier = (binary_expression "uVar10 ^ 0x100000" identifier ^ number_literal)) ;)) }))) })))) })) (if_statement "if ((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)) {\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }" if (parenthesized_expression "((term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0))" ( (binary_expression "(term->blink_is_real != 0) && ((uVar10 & 0x200000) != 0)" (parenthesized_expression "(term->blink_is_real != 0)" ( (binary_expression "term->blink_is_real != 0" (field_expression "term->blink_is_real" identifier -> field_identifier) != number_literal) )) && (parenthesized_expression "((uVar10 & 0x200000) != 0)" ( (binary_expression "(uVar10 & 0x200000) != 0" (parenthesized_expression "(uVar10 & 0x200000)" ( (binary_expression "uVar10 & 0x200000" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }\n        uVar10 = uVar10 & 0xffdfffff;\n      }" { (if_statement "if ((term->has_focus != 0) && (term->tblinker != 0)) {\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }" if (parenthesized_expression "((term->has_focus != 0) && (term->tblinker != 0))" ( (binary_expression "(term->has_focus != 0) && (term->tblinker != 0)" (parenthesized_expression "(term->has_focus != 0)" ( (binary_expression "term->has_focus != 0" (field_expression "term->has_focus" identifier -> field_identifier) != number_literal) )) && (parenthesized_expression "(term->tblinker != 0)" ( (binary_expression "term->tblinker != 0" (field_expression "term->tblinker" identifier -> field_identifier) != number_literal) ))) )) (compound_statement "{\n          wVar18 = term->ucsdata->unitab_line[0x20];\n        }" { (expression_statement "wVar18 = term->ucsdata->unitab_line[0x20];" (assignment_expression "wVar18 = term->ucsdata->unitab_line[0x20]" identifier = (subscript_expression "term->ucsdata->unitab_line[0x20]" (field_expression "term->ucsdata->unitab_line" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ number_literal ])) ;) })) (expression_statement "uVar10 = uVar10 & 0xffdfffff;" (assignment_expression "uVar10 = uVar10 & 0xffdfffff" identifier = (binary_expression "uVar10 & 0xffdfffff" identifier & number_literal)) ;) })) (expression_statement "pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19);" (assignment_expression "pwVar9 = (wchar_t *)((int)&local_7c->chars->chr + iVar19)" identifier = (cast_expression "(wchar_t *)((int)&local_7c->chars->chr + iVar19)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_7c->chars->chr + iVar19)" ( (binary_expression "(int)&local_7c->chars->chr + iVar19" (cast_expression "(int)&local_7c->chars->chr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_7c->chars->chr" & (field_expression "local_7c->chars->chr" (field_expression "local_7c->chars" identifier -> field_identifier) -> field_identifier))) + identifier) )))) ;) (if_statement "if ((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)) {\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }\n      else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }" if (parenthesized_expression "((*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10))" ( (binary_expression "(*pwVar9 == wVar18) && (wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)" (parenthesized_expression "(*pwVar9 == wVar18)" ( (binary_expression "*pwVar9 == wVar18" (pointer_expression "*pwVar9" * identifier) == identifier) )) && (parenthesized_expression "(wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10)" ( (comma_expression "wVar3 = pwVar9[1], (wVar3 & 0xf7fffffU) == uVar10" (assignment_expression "wVar3 = pwVar9[1]" identifier = (subscript_expression "pwVar9[1]" identifier [ number_literal ])) , (binary_expression "(wVar3 & 0xf7fffffU) == uVar10" (parenthesized_expression "(wVar3 & 0xf7fffffU)" ( (binary_expression "wVar3 & 0xf7fffffU" identifier & number_literal) )) == identifier)) ))) )) (compound_statement "{\n        if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }\n      }" { (if_statement "if ((wVar3 & 0x800000U) != 0) {\n          uVar10 = uVar10 | 0x800000;\n        }" if (parenthesized_expression "((wVar3 & 0x800000U) != 0)" ( (binary_expression "(wVar3 & 0x800000U) != 0" (parenthesized_expression "(wVar3 & 0x800000U)" ( (binary_expression "wVar3 & 0x800000U" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar10 = uVar10 | 0x800000;\n        }" { (expression_statement "uVar10 = uVar10 | 0x800000;" (assignment_expression "uVar10 = uVar10 | 0x800000" identifier = (binary_expression "uVar10 | 0x800000" identifier | number_literal)) ;) })) }) (else_clause "else if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }" else (if_statement "if ((uVar10 & 0x400000) == 0) {\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }" if (parenthesized_expression "((uVar10 & 0x400000) == 0)" ( (binary_expression "(uVar10 & 0x400000) == 0" (parenthesized_expression "(uVar10 & 0x400000)" ( (binary_expression "uVar10 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar17 = char_width(ctx_00,wVar18);\n        if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }\n      }" { (expression_statement "iVar17 = char_width(ctx_00,wVar18);" (assignment_expression "iVar17 = char_width(ctx_00,wVar18)" identifier = (call_expression "char_width(ctx_00,wVar18)" identifier (argument_list "(ctx_00,wVar18)" ( identifier , identifier )))) ;) (if_statement "if (iVar17 == 2) {\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }\n        else {\n          local_7c = term->disptext[(int)local_3c];\n        }" if (parenthesized_expression "(iVar17 == 2)" ( (binary_expression "iVar17 == 2" identifier == number_literal) )) (compound_statement "{\n          local_7c = term->disptext[(int)local_3c];\n          uVar10 = uVar10 | 0x800000;\n        }" { (expression_statement "local_7c = term->disptext[(int)local_3c];" (assignment_expression "local_7c = term->disptext[(int)local_3c]" identifier = (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "uVar10 = uVar10 | 0x800000;" (assignment_expression "uVar10 = uVar10 | 0x800000" identifier = (binary_expression "uVar10 | 0x800000" identifier | number_literal)) ;) }) (else_clause "else {\n          local_7c = term->disptext[(int)local_3c];\n        }" else (compound_statement "{\n          local_7c = term->disptext[(int)local_3c];\n        }" { (expression_statement "local_7c = term->disptext[(int)local_3c];" (assignment_expression "local_7c = term->disptext[(int)local_3c]" identifier = (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) }))) })))) (if_statement "if ((local_34 == local_84) && (ldata_1 == local_3c)) {\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }" if (parenthesized_expression "((local_34 == local_84) && (ldata_1 == local_3c))" ( (binary_expression "(local_34 == local_84) && (ldata_1 == local_3c)" (parenthesized_expression "(local_34 == local_84)" ( (binary_expression "local_34 == local_84" identifier == identifier) )) && (parenthesized_expression "(ldata_1 == local_3c)" ( (binary_expression "ldata_1 == local_3c" identifier == identifier) ))) )) (compound_statement "{\n        term->dispcursx = local_84;\n        uVar10 = uVar10 | local_20;\n        term->curstype = local_20;\n        term->dispcursy = (int)local_3c;\n      }" { (expression_statement "term->dispcursx = local_84;" (assignment_expression "term->dispcursx = local_84" (field_expression "term->dispcursx" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar10 = uVar10 | local_20;" (assignment_expression "uVar10 = uVar10 | local_20" identifier = (binary_expression "uVar10 | local_20" identifier | identifier)) ;) (expression_statement "term->curstype = local_20;" (assignment_expression "term->curstype = local_20" (field_expression "term->curstype" identifier -> field_identifier) = identifier) ;) (expression_statement "term->dispcursy = (int)local_3c;" (assignment_expression "term->dispcursy = (int)local_3c" (field_expression "term->dispcursy" identifier -> field_identifier) = (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (expression_statement "local_84 = local_84 + 1;" (assignment_expression "local_84 = local_84 + 1" identifier = (binary_expression "local_84 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((int)ptr + iVar19 + 4) = uVar10;" (assignment_expression "*(uint *)((int)ptr + iVar19 + 4) = uVar10" (pointer_expression "*(uint *)((int)ptr + iVar19 + 4)" * (cast_expression "(uint *)((int)ptr + iVar19 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)ptr + iVar19 + 4)" ( (binary_expression "(int)ptr + iVar19 + 4" (binary_expression "(int)ptr + iVar19" (cast_expression "(int)ptr" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)((int)ptr + iVar19 + 8) = 0;" (assignment_expression "*(undefined4 *)((int)ptr + iVar19 + 8) = 0" (pointer_expression "*(undefined4 *)((int)ptr + iVar19 + 8)" * (cast_expression "(undefined4 *)((int)ptr + iVar19 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)ptr + iVar19 + 8)" ( (binary_expression "(int)ptr + iVar19 + 8" (binary_expression "(int)ptr + iVar19" (cast_expression "(int)ptr" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) + number_literal) )))) = number_literal) ;) (expression_statement "iVar17 = term->cols;" (assignment_expression "iVar17 = term->cols" identifier = (field_expression "term->cols" identifier -> field_identifier)) ;) (expression_statement "*(wchar_t *)((int)ptr + iVar19) = wVar18;" (assignment_expression "*(wchar_t *)((int)ptr + iVar19) = wVar18" (pointer_expression "*(wchar_t *)((int)ptr + iVar19)" * (cast_expression "(wchar_t *)((int)ptr + iVar19)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)ptr + iVar19)" ( (binary_expression "(int)ptr + iVar19" (cast_expression "(int)ptr" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) = identifier) ;) (expression_statement "iVar19 = iVar19 + 0xc;" (assignment_expression "iVar19 = iVar19 + 0xc" identifier = (binary_expression "iVar19 + 0xc" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_84 < iVar17)" ( (binary_expression "local_84 < iVar17" identifier < identifier) )) ;) (if_statement "if (0 < iVar17) {\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n      ptVar8 = local_7c->chars;\n      bVar4 = false;\n      iVar19 = (int)ptr - (int)ptVar8;\n      puVar11 = &ptVar8->attr;\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar23 = local_7c->lattr != ptVar7->lattr;\n      local_58 = 0;\n      local_4c = 0;\n      iVar21 = 0;\n      local_7c->lattr = ptVar7->lattr;\n      local_80 = 0;\n      bVar22 = bVar23;\n      do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );\n    }" { (expression_statement "ptVar8 = local_7c->chars;" (assignment_expression "ptVar8 = local_7c->chars" identifier = (field_expression "local_7c->chars" identifier -> field_identifier)) ;) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "iVar19 = (int)ptr - (int)ptVar8;" (assignment_expression "iVar19 = (int)ptr - (int)ptVar8" identifier = (binary_expression "(int)ptr - (int)ptVar8" (cast_expression "(int)ptr" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)ptVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "puVar11 = &ptVar8->attr;" (assignment_expression "puVar11 = &ptVar8->attr" identifier = (pointer_expression "&ptVar8->attr" & (field_expression "ptVar8->attr" identifier -> field_identifier))) ;) (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (do_statement "do {\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      } while (iVar17 != iVar20 + 1);" do (compound_statement "{\n        while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar20;\n        if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar11 = puVar11 + 3;\n        iVar21 = iVar20 + 1;\n      }" { (while_statement "while( true ) {\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar20 = iVar21;\n          uVar10 = *puVar11;\n          uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);\n          if ((int)uVar10 < 0) break;\n          if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }\n          puVar11 = puVar11 + 3;\n          iVar21 = iVar20 + 1;\n          if (iVar17 == iVar20 + 1) goto LAB_0003bb38;\n        }" { (expression_statement "iVar20 = iVar21;" (assignment_expression "iVar20 = iVar21" identifier = identifier) ;) (expression_statement "uVar10 = *puVar11;" (assignment_expression "uVar10 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11);" (assignment_expression "uVar14 = *(uint *)(iVar19 + -4 + (int)puVar11)" identifier = (pointer_expression "*(uint *)(iVar19 + -4 + (int)puVar11)" * (cast_expression "(uint *)(iVar19 + -4 + (int)puVar11)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + -4 + (int)puVar11)" ( (binary_expression "iVar19 + -4 + (int)puVar11" (binary_expression "iVar19 + -4" identifier + number_literal) + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (if_statement "if ((int)uVar10 < 0) break;" if (parenthesized_expression "((int)uVar10 < 0)" ( (binary_expression "(int)uVar10 < 0" (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))) {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }" if (parenthesized_expression "((uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11)))" ( (binary_expression "(uVar14 == ((termchar *)(puVar11 + -1))->chr) &&\n             ((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))" (parenthesized_expression "(uVar14 == ((termchar *)(puVar11 + -1))->chr)" ( (binary_expression "uVar14 == ((termchar *)(puVar11 + -1))->chr" identifier == (field_expression "((termchar *)(puVar11 + -1))->chr" (parenthesized_expression "((termchar *)(puVar11 + -1))" ( (cast_expression "(termchar *)(puVar11 + -1)" ( (type_descriptor "termchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + -1)" ( (binary_expression "puVar11 + -1" identifier + number_literal) ))) )) -> field_identifier)) )) && (parenthesized_expression "((uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11))" ( (binary_expression "(uVar10 & 0xfffffff) == *(uint *)(iVar19 + (int)puVar11)" (parenthesized_expression "(uVar10 & 0xfffffff)" ( (binary_expression "uVar10 & 0xfffffff" identifier & number_literal) )) == (pointer_expression "*(uint *)(iVar19 + (int)puVar11)" * (cast_expression "(uint *)(iVar19 + (int)puVar11)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + (int)puVar11)" ( (binary_expression "iVar19 + (int)puVar11" identifier + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ))) )) (compound_statement "{\n            if (bVar4) goto LAB_0003bae8;\n          }" { (if_statement "if (bVar4) goto LAB_0003bae8;" if (parenthesized_expression "(bVar4)" ( identifier )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) }) (else_clause "else {\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }" else (compound_statement "{\n            if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar11 = uVar10 | 0x3ffff;\n          }" { (if_statement "if ((!bVar4) && (local_84 < iVar20)) {\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }" if (parenthesized_expression "((!bVar4) && (local_84 < iVar20))" ( (binary_expression "(!bVar4) && (local_84 < iVar20)" (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) && (parenthesized_expression "(local_84 < iVar20)" ( (binary_expression "local_84 < iVar20" identifier < identifier) ))) )) (compound_statement "{\n              puVar16 = &ptVar8[local_84].attr;\n              do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);\n              uVar10 = *puVar11;\n            }" { (expression_statement "puVar16 = &ptVar8[local_84].attr;" (assignment_expression "puVar16 = &ptVar8[local_84].attr" identifier = (pointer_expression "&ptVar8[local_84].attr" & (field_expression "ptVar8[local_84].attr" (subscript_expression "ptVar8[local_84]" identifier [ identifier ]) . field_identifier))) ;) (do_statement "do {\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              } while (puVar11 != puVar16);" do (compound_statement "{\n                *puVar16 = *puVar16 | 0x3ffff;\n                puVar16 = puVar16 + 3;\n              }" { (expression_statement "*puVar16 = *puVar16 | 0x3ffff;" (assignment_expression "*puVar16 = *puVar16 | 0x3ffff" (pointer_expression "*puVar16" * identifier) = (binary_expression "*puVar16 | 0x3ffff" (pointer_expression "*puVar16" * identifier) | number_literal)) ;) (expression_statement "puVar16 = puVar16 + 3;" (assignment_expression "puVar16 = puVar16 + 3" identifier = (binary_expression "puVar16 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar11 != puVar16)" ( (binary_expression "puVar11 != puVar16" identifier != identifier) )) ;) (expression_statement "uVar10 = *puVar11;" (assignment_expression "uVar10 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) })) (labeled_statement "LAB_0003bae8:\n            bVar4 = true;" statement_identifier : (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;)) (expression_statement "*puVar11 = uVar10 | 0x3ffff;" (assignment_expression "*puVar11 = uVar10 | 0x3ffff" (pointer_expression "*puVar11" * identifier) = (binary_expression "uVar10 | 0x3ffff" identifier | number_literal)) ;) }))) (expression_statement "puVar11 = puVar11 + 3;" (assignment_expression "puVar11 = puVar11 + 3" identifier = (binary_expression "puVar11 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar20 + 1;" (assignment_expression "iVar21 = iVar20 + 1" identifier = (binary_expression "iVar20 + 1" identifier + number_literal)) ;) (if_statement "if (iVar17 == iVar20 + 1) goto LAB_0003bb38;" if (parenthesized_expression "(iVar17 == iVar20 + 1)" ( (binary_expression "iVar17 == iVar20 + 1" identifier == (binary_expression "iVar20 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bb38;" goto statement_identifier ;)) })) (expression_statement "local_84 = iVar20;" (assignment_expression "local_84 = iVar20" identifier = identifier) ;) (if_statement "if ((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))\n        goto LAB_0003bae8;" if (parenthesized_expression "((uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)))" ( (binary_expression "(uVar14 != ((termchar *)(puVar11 + -1))->chr) ||\n           (bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff))" (parenthesized_expression "(uVar14 != ((termchar *)(puVar11 + -1))->chr)" ( (binary_expression "uVar14 != ((termchar *)(puVar11 + -1))->chr" identifier != (field_expression "((termchar *)(puVar11 + -1))->chr" (parenthesized_expression "((termchar *)(puVar11 + -1))" ( (cast_expression "(termchar *)(puVar11 + -1)" ( (type_descriptor "termchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + -1)" ( (binary_expression "puVar11 + -1" identifier + number_literal) ))) )) -> field_identifier)) )) || (parenthesized_expression "(bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff))" ( (comma_expression "bVar4 = false, *(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)" (assignment_expression "bVar4 = false" identifier = false) , (binary_expression "*(uint *)(iVar19 + (int)puVar11) != (uVar10 & 0xfffffff)" (pointer_expression "*(uint *)(iVar19 + (int)puVar11)" * (cast_expression "(uint *)(iVar19 + (int)puVar11)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + (int)puVar11)" ( (binary_expression "iVar19 + (int)puVar11" identifier + (cast_expression "(int)puVar11" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (parenthesized_expression "(uVar10 & 0xfffffff)" ( (binary_expression "uVar10 & 0xfffffff" identifier & number_literal) )))) ))) )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) (expression_statement "puVar11 = puVar11 + 3;" (assignment_expression "puVar11 = puVar11 + 3" identifier = (binary_expression "puVar11 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar20 + 1;" (assignment_expression "iVar21 = iVar20 + 1" identifier = (binary_expression "iVar20 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar17 != iVar20 + 1)" ( (binary_expression "iVar17 != iVar20 + 1" identifier != (binary_expression "iVar20 + 1" identifier + number_literal)) )) ;) (labeled_statement "LAB_0003bb38:\n      local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "bVar23 = local_7c->lattr != ptVar7->lattr;" (assignment_expression "bVar23 = local_7c->lattr != ptVar7->lattr" identifier = (binary_expression "local_7c->lattr != ptVar7->lattr" (field_expression "local_7c->lattr" identifier -> field_identifier) != (field_expression "ptVar7->lattr" identifier -> field_identifier))) ;) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "local_7c->lattr = ptVar7->lattr;" (assignment_expression "local_7c->lattr = ptVar7->lattr" (field_expression "local_7c->lattr" identifier -> field_identifier) = (field_expression "ptVar7->lattr" identifier -> field_identifier)) ;) (expression_statement "local_80 = 0;" (assignment_expression "local_80 = 0" identifier = number_literal) ;) (expression_statement "bVar22 = bVar23;" (assignment_expression "bVar22 = bVar23" identifier = identifier) ;) (do_statement "do {\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      } while( true );" do (compound_statement "{\n        b = local_54 + local_80;\n        puVar13 = (uint *)((int)ptr + local_80 * 0xc);\n        uVar10 = *puVar13;\n        uVar14 = puVar13[1];\n        ptVar8 = local_7c->chars + local_80;\n        bVar6 = true;\n        if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }\n        if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }\n        bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;\n        if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }\n        iVar21 = iVar19;\n        if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }\n        *(uint *)((int)local_6c + iVar17) = uVar10;\n        iVar17 = b->cc_next;\n        ptVar8 = b;\n        if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = term->disptext[(int)local_3c];\n        local_80 = iVar17;\n        bVar22 = bVar6;\n      }" { (expression_statement "b = local_54 + local_80;" (assignment_expression "b = local_54 + local_80" identifier = (binary_expression "local_54 + local_80" identifier + identifier)) ;) (expression_statement "puVar13 = (uint *)((int)ptr + local_80 * 0xc);" (assignment_expression "puVar13 = (uint *)((int)ptr + local_80 * 0xc)" identifier = (cast_expression "(uint *)((int)ptr + local_80 * 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)ptr + local_80 * 0xc)" ( (binary_expression "(int)ptr + local_80 * 0xc" (cast_expression "(int)ptr" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "local_80 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = *puVar13;" (assignment_expression "uVar10 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "uVar14 = puVar13[1];" (assignment_expression "uVar14 = puVar13[1]" identifier = (subscript_expression "puVar13[1]" identifier [ number_literal ])) ;) (expression_statement "ptVar8 = local_7c->chars + local_80;" (assignment_expression "ptVar8 = local_7c->chars + local_80" identifier = (binary_expression "local_7c->chars + local_80" (field_expression "local_7c->chars" identifier -> field_identifier) + identifier)) ;) (expression_statement "bVar6 = true;" (assignment_expression "bVar6 = true" identifier = true) ;) (if_statement "if (((uVar14 ^ ptVar8->attr) & 0x400000) == 0) {\n          bVar6 = bVar22;\n        }" if (parenthesized_expression "(((uVar14 ^ ptVar8->attr) & 0x400000) == 0)" ( (binary_expression "((uVar14 ^ ptVar8->attr) & 0x400000) == 0" (parenthesized_expression "((uVar14 ^ ptVar8->attr) & 0x400000)" ( (binary_expression "(uVar14 ^ ptVar8->attr) & 0x400000" (parenthesized_expression "(uVar14 ^ ptVar8->attr)" ( (binary_expression "uVar14 ^ ptVar8->attr" identifier ^ (field_expression "ptVar8->attr" identifier -> field_identifier)) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar6 = bVar22;\n        }" { (expression_statement "bVar6 = bVar22;" (assignment_expression "bVar6 = bVar22" identifier = identifier) ;) })) (if_statement "if (((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)) {\n          uVar15 = uVar10 & 0xffffff00;\n        }" if (parenthesized_expression "(((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar10 & 0xfffffc00) == 0xd800) || (uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar10 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar10 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar10 & 0xfffffc00)" ( (binary_expression "uVar10 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000)" ( (comma_expression "uVar15 = 0, (uVar10 & 0xfffffe00) == 0xf000" (assignment_expression "uVar15 = 0" identifier = number_literal) , (binary_expression "(uVar10 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar10 & 0xfffffe00)" ( (binary_expression "uVar10 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n          uVar15 = uVar10 & 0xffffff00;\n        }" { (expression_statement "uVar15 = uVar10 & 0xffffff00;" (assignment_expression "uVar15 = uVar10 & 0xffffff00" identifier = (binary_expression "uVar10 & 0xffffff00" identifier & number_literal)) ;) })) (expression_statement "bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0;" (assignment_expression "bVar22 = uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0" identifier = (binary_expression "uVar15 != local_58 || (term->attr_mask & (uVar14 ^ local_4c)) != 0" (binary_expression "uVar15 != local_58" identifier != identifier) || (binary_expression "(term->attr_mask & (uVar14 ^ local_4c)) != 0" (parenthesized_expression "(term->attr_mask & (uVar14 ^ local_4c))" ( (binary_expression "term->attr_mask & (uVar14 ^ local_4c)" (field_expression "term->attr_mask" identifier -> field_identifier) & (parenthesized_expression "(uVar14 ^ local_4c)" ( (binary_expression "uVar14 ^ local_4c" identifier ^ identifier) ))) )) != number_literal))) ;) (if_statement "if ((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))) {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }\n        else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }" if (parenthesized_expression "((b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0))))" ( (binary_expression "(b->cc_next == 0) && ((local_80 < 1 || (b[-1].cc_next == 0)))" (parenthesized_expression "(b->cc_next == 0)" ( (binary_expression "b->cc_next == 0" (field_expression "b->cc_next" identifier -> field_identifier) == number_literal) )) && (parenthesized_expression "((local_80 < 1 || (b[-1].cc_next == 0)))" ( (parenthesized_expression "(local_80 < 1 || (b[-1].cc_next == 0))" ( (binary_expression "local_80 < 1 || (b[-1].cc_next == 0)" (binary_expression "local_80 < 1" identifier < number_literal) || (parenthesized_expression "(b[-1].cc_next == 0)" ( (binary_expression "b[-1].cc_next == 0" (field_expression "b[-1].cc_next" (subscript_expression "b[-1]" identifier [ number_literal ]) . field_identifier) == number_literal) ))) )) ))) )) (compound_statement "{\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar22) goto LAB_0003bd5e;\n          iVar17 = iVar21 * 4;\n          iVar19 = iVar21 + 1;\nLAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);\n          bVar22 = iVar12 == 0;\n          iVar20 = iVar21;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }\n        }" { (expression_statement "bchr = term->ucsdata;" (assignment_expression "bchr = term->ucsdata" identifier = (field_expression "term->ucsdata" identifier -> field_identifier)) ;) (if_statement "if (!bVar6 && bchr->dbcs_screenfont == 0) {\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }" if (parenthesized_expression "(!bVar6 && bchr->dbcs_screenfont == 0)" ( (binary_expression "!bVar6 && bchr->dbcs_screenfont == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "bchr->dbcs_screenfont == 0" (field_expression "bchr->dbcs_screenfont" identifier -> field_identifier) == number_literal)) )) (compound_statement "{\nLAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;\n          }" { (labeled_statement "LAB_0003bd3e:\n            if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;" statement_identifier : (if_statement "if (((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))) goto LAB_0003bd5e;" if (parenthesized_expression "(((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1))))" ( (binary_expression "((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))) ||\n               ((!bVar23 && (iVar21 == 1)))" (parenthesized_expression "((uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff)))" ( (binary_expression "(uVar10 == ptVar8->chr) && (uVar14 == (ptVar8->attr & 0xfffffff))" (parenthesized_expression "(uVar10 == ptVar8->chr)" ( (binary_expression "uVar10 == ptVar8->chr" identifier == (field_expression "ptVar8->chr" identifier -> field_identifier)) )) && (parenthesized_expression "(uVar14 == (ptVar8->attr & 0xfffffff))" ( (binary_expression "uVar14 == (ptVar8->attr & 0xfffffff)" identifier == (parenthesized_expression "(ptVar8->attr & 0xfffffff)" ( (binary_expression "ptVar8->attr & 0xfffffff" (field_expression "ptVar8->attr" identifier -> field_identifier) & number_literal) ))) ))) )) || (parenthesized_expression "((!bVar23 && (iVar21 == 1)))" ( (parenthesized_expression "(!bVar23 && (iVar21 == 1))" ( (binary_expression "!bVar23 && (iVar21 == 1)" (unary_expression "!bVar23" ! identifier) && (parenthesized_expression "(iVar21 == 1)" ( (binary_expression "iVar21 == 1" identifier == number_literal) ))) )) ))) )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;))) })) (if_statement "if (bVar22) goto LAB_0003bd5e;" if (parenthesized_expression "(bVar22)" ( identifier )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;)) (expression_statement "iVar17 = iVar21 * 4;" (assignment_expression "iVar17 = iVar21 * 4" identifier = (binary_expression "iVar21 * 4" identifier * number_literal)) ;) (expression_statement "iVar19 = iVar21 + 1;" (assignment_expression "iVar19 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_0003bbca:\n          if (uVar10 != ptVar8->chr) goto LAB_0003bddd;" statement_identifier : (if_statement "if (uVar10 != ptVar8->chr) goto LAB_0003bddd;" if (parenthesized_expression "(uVar10 != ptVar8->chr)" ( (binary_expression "uVar10 != ptVar8->chr" identifier != (field_expression "ptVar8->chr" identifier -> field_identifier)) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (labeled_statement "LAB_0003bbd6:\n          if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;" statement_identifier : (if_statement "if (((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0) goto LAB_0003bddd;" if (parenthesized_expression "(((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0)" ( (binary_expression "((uVar14 ^ ptVar8->attr) & 0xfffffff) != 0" (parenthesized_expression "((uVar14 ^ ptVar8->attr) & 0xfffffff)" ( (binary_expression "(uVar14 ^ ptVar8->attr) & 0xfffffff" (parenthesized_expression "(uVar14 ^ ptVar8->attr)" ( (binary_expression "uVar14 ^ ptVar8->attr" identifier ^ (field_expression "ptVar8->attr" identifier -> field_identifier)) )) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (expression_statement "iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74);" (assignment_expression "iVar12 = termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74)" identifier = (call_expression "termchars_equal_override(ptVar8,b,(ulong)bchr,in_stack_ffffff74)" identifier (argument_list "(ptVar8,b,(ulong)bchr,in_stack_ffffff74)" ( identifier , identifier , (cast_expression "(ulong)bchr" ( (type_descriptor "ulong" type_identifier) ) identifier) , identifier )))) ;) (expression_statement "bVar22 = iVar12 == 0;" (assignment_expression "bVar22 = iVar12 == 0" identifier = (binary_expression "iVar12 == 0" identifier == number_literal)) ;) (expression_statement "iVar20 = iVar21;" (assignment_expression "iVar20 = iVar21" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (iVar12 != 0) {\n            bVar5 = bVar23;\n          }" if (parenthesized_expression "(iVar12 != 0)" ( (binary_expression "iVar12 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar5 = bVar23;\n          }" { (expression_statement "bVar5 = bVar23;" (assignment_expression "bVar5 = bVar23" identifier = identifier) ;) })) }) (else_clause "else {\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }" else (compound_statement "{\n          bchr = term->ucsdata;\n          if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }\n          if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }\n          local_4c = uVar14;\n          if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar17 = 0;\n          iVar21 = 0;\n          local_40 = local_80;\n          iVar19 = 1;\n          bVar4 = bVar23;\n          bVar23 = bVar6;\n          if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar22 = true;\n          iVar20 = iVar21;\n          bVar5 = true;\n        }" { (expression_statement "bchr = term->ucsdata;" (assignment_expression "bchr = term->ucsdata" identifier = (field_expression "term->ucsdata" identifier -> field_identifier)) ;) (if_statement "if (!bVar6 && bchr->dbcs_screenfont == 0) {\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }" if (parenthesized_expression "(!bVar6 && bchr->dbcs_screenfont == 0)" ( (binary_expression "!bVar6 && bchr->dbcs_screenfont == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "bchr->dbcs_screenfont == 0" (field_expression "bchr->dbcs_screenfont" identifier -> field_identifier) == number_literal)) )) (compound_statement "{\n            bVar22 = true;\n            goto LAB_0003bd3e;\n          }" { (expression_statement "bVar22 = true;" (assignment_expression "bVar22 = true" identifier = true) ;) (goto_statement "goto LAB_0003bd3e;" goto statement_identifier ;) })) (labeled_statement "LAB_0003bd5e:\n          if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }" statement_identifier : (if_statement "if ((iVar21 != 0) && ((bool)(bVar4 | bVar23))) {\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }" if (parenthesized_expression "((iVar21 != 0) && ((bool)(bVar4 | bVar23)))" ( (binary_expression "(iVar21 != 0) && ((bool)(bVar4 | bVar23))" (parenthesized_expression "(iVar21 != 0)" ( (binary_expression "iVar21 != 0" identifier != number_literal) )) && (parenthesized_expression "((bool)(bVar4 | bVar23))" ( (cast_expression "(bool)(bVar4 | bVar23)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar4 | bVar23)" ( (binary_expression "bVar4 | bVar23" identifier | identifier) ))) ))) )) (compound_statement "{\n            do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n            if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n          }" { (expression_statement "do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);" (call_expression "do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" identifier (argument_list "(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" ( identifier , identifier , (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (cast_expression "(uint)ptVar7->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar7->lattr" identifier -> field_identifier)) ))) ;) (if_statement "if ((local_4c & 0x60000000) == 0) {\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }\n            else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }" if (parenthesized_expression "((local_4c & 0x60000000) == 0)" ( (binary_expression "(local_4c & 0x60000000) == 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }" { (expression_statement "bchr = term->ucsdata;" (assignment_expression "bchr = term->ucsdata" identifier = (field_expression "term->ucsdata" identifier -> field_identifier)) ;) (expression_statement "ptVar8 = term->disptext[(int)local_3c]->chars + local_80;" (assignment_expression "ptVar8 = term->disptext[(int)local_3c]->chars + local_80" identifier = (binary_expression "term->disptext[(int)local_3c]->chars + local_80" (field_expression "term->disptext[(int)local_3c]->chars" (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ]) -> field_identifier) + identifier)) ;) }) (else_clause "else {\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }" else (compound_statement "{\n              do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n              bchr = term->ucsdata;\n              ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n            }" { (expression_statement "do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);" (call_expression "do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" identifier (argument_list "(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" ( identifier , identifier , (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (cast_expression "(uint)ptVar7->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar7->lattr" identifier -> field_identifier)) ))) ;) (expression_statement "bchr = term->ucsdata;" (assignment_expression "bchr = term->ucsdata" identifier = (field_expression "term->ucsdata" identifier -> field_identifier)) ;) (expression_statement "ptVar8 = term->disptext[(int)local_3c]->chars + local_80;" (assignment_expression "ptVar8 = term->disptext[(int)local_3c]->chars + local_80" identifier = (binary_expression "term->disptext[(int)local_3c]->chars + local_80" (field_expression "term->disptext[(int)local_3c]->chars" (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ]) -> field_identifier) + identifier)) ;) }))) }))) (if_statement "if (((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))\n          {\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }\n          else {\n            iVar21 = bchr->dbcs_screenfont;\n          }" if (parenthesized_expression "(((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar10 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar10 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar10 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar10 & 0xfffffc00)" ( (binary_expression "uVar10 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000)" ( (comma_expression "local_58 = 0, (uVar10 & 0xfffffe00) == 0xf000" (assignment_expression "local_58 = 0" identifier = number_literal) , (binary_expression "(uVar10 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar10 & 0xfffffe00)" ( (binary_expression "uVar10 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n            iVar21 = bchr->dbcs_screenfont;\n            local_58 = uVar10 & 0xffffff00;\n          }" { (expression_statement "iVar21 = bchr->dbcs_screenfont;" (assignment_expression "iVar21 = bchr->dbcs_screenfont" identifier = (field_expression "bchr->dbcs_screenfont" identifier -> field_identifier)) ;) (expression_statement "local_58 = uVar10 & 0xffffff00;" (assignment_expression "local_58 = uVar10 & 0xffffff00" identifier = (binary_expression "uVar10 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else {\n            iVar21 = bchr->dbcs_screenfont;\n          }" else (compound_statement "{\n            iVar21 = bchr->dbcs_screenfont;\n          }" { (expression_statement "iVar21 = bchr->dbcs_screenfont;" (assignment_expression "iVar21 = bchr->dbcs_screenfont" identifier = (field_expression "bchr->dbcs_screenfont" identifier -> field_identifier)) ;) }))) (expression_statement "local_4c = uVar14;" (assignment_expression "local_4c = uVar14" identifier = identifier) ;) (if_statement "if (iVar21 == 0) {\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }" if (parenthesized_expression "(iVar21 == 0)" ( (binary_expression "iVar21 == 0" identifier == number_literal) )) (compound_statement "{\n            local_40 = local_80;\n            iVar17 = 0;\n            iVar19 = 1;\n            iVar21 = 0;\n            bVar23 = bVar6;\n            goto LAB_0003bbca;\n          }" { (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar17 = 0;" (assignment_expression "iVar17 = 0" identifier = number_literal) ;) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "bVar23 = bVar6;" (assignment_expression "bVar23 = bVar6" identifier = identifier) ;) (goto_statement "goto LAB_0003bbca;" goto statement_identifier ;) })) (expression_statement "iVar17 = 0;" (assignment_expression "iVar17 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "bVar4 = bVar23;" (assignment_expression "bVar4 = bVar23" identifier = identifier) ;) (expression_statement "bVar23 = bVar6;" (assignment_expression "bVar23 = bVar6" identifier = identifier) ;) (if_statement "if (uVar10 == ptVar8->chr) goto LAB_0003bbd6;" if (parenthesized_expression "(uVar10 == ptVar8->chr)" ( (binary_expression "uVar10 == ptVar8->chr" identifier == (field_expression "ptVar8->chr" identifier -> field_identifier)) )) (goto_statement "goto LAB_0003bbd6;" goto statement_identifier ;)) (labeled_statement "LAB_0003bddd:\n          bVar22 = true;" statement_identifier : (expression_statement "bVar22 = true;" (assignment_expression "bVar22 = true" identifier = true) ;)) (expression_statement "iVar20 = iVar21;" (assignment_expression "iVar20 = iVar21" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) }))) (expression_statement "iVar21 = iVar19;" (assignment_expression "iVar21 = iVar19" identifier = identifier) ;) (if_statement "if ((int)local_60 <= iVar21) {\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }" if (parenthesized_expression "((int)local_60 <= iVar21)" ( (binary_expression "(int)local_60 <= iVar21" (cast_expression "(int)local_60" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) (compound_statement "{\n          local_60 = iVar20 + 0x100;\n          local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n        }" { (expression_statement "local_60 = iVar20 + 0x100;" (assignment_expression "local_60 = iVar20 + 0x100" identifier = (binary_expression "iVar20 + 0x100" identifier + number_literal)) ;) (expression_statement "local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);" (assignment_expression "local_6c = (wchar_t *)saferealloc(local_6c,local_60,4)" identifier = (cast_expression "(wchar_t *)saferealloc(local_6c,local_60,4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "saferealloc(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal ))))) ;) })) (expression_statement "*(uint *)((int)local_6c + iVar17) = uVar10;" (assignment_expression "*(uint *)((int)local_6c + iVar17) = uVar10" (pointer_expression "*(uint *)((int)local_6c + iVar17)" * (cast_expression "(uint *)((int)local_6c + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_6c + iVar17)" ( (binary_expression "(int)local_6c + iVar17" (cast_expression "(int)local_6c" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) = identifier) ;) (expression_statement "iVar17 = b->cc_next;" (assignment_expression "iVar17 = b->cc_next" identifier = (field_expression "b->cc_next" identifier -> field_identifier)) ;) (expression_statement "ptVar8 = b;" (assignment_expression "ptVar8 = b" identifier = identifier) ;) (if_statement "if (iVar17 != 0) {\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" if (parenthesized_expression "(iVar17 != 0)" ( (binary_expression "iVar17 != 0" identifier != number_literal) )) (compound_statement "{\n          do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);\nLAB_0003bfcc:\n          iVar21 = iVar19 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" { (do_statement "do {\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          } while (iVar17 != 0);" do (compound_statement "{\n            while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }\n            wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];\nLAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            local_6c[iVar19] = wVar18;\n            iVar17 = ptVar8->cc_next;\n            iVar21 = iVar19 + 1;\n          }" { (while_statement "while( true ) {\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar19 = iVar21;\n              ptVar8 = ptVar8 + iVar17;\n              wVar18 = ptVar8->chr;\n              uVar15 = wVar18 & 0xffffff00;\n              if (uVar15 == 0xd900) break;\n              if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }\n              wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];\n              if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar19 + 0x100;\n              local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);\n              local_6c[iVar19] = wVar18;\n              iVar17 = ptVar8->cc_next;\n              iVar21 = iVar19 + 1;\n              if (iVar17 == 0) goto LAB_0003bfcc;\n            }" { (expression_statement "iVar19 = iVar21;" (assignment_expression "iVar19 = iVar21" identifier = identifier) ;) (expression_statement "ptVar8 = ptVar8 + iVar17;" (assignment_expression "ptVar8 = ptVar8 + iVar17" identifier = (binary_expression "ptVar8 + iVar17" identifier + identifier)) ;) (expression_statement "wVar18 = ptVar8->chr;" (assignment_expression "wVar18 = ptVar8->chr" identifier = (field_expression "ptVar8->chr" identifier -> field_identifier)) ;) (expression_statement "uVar15 = wVar18 & 0xffffff00;" (assignment_expression "uVar15 = wVar18 & 0xffffff00" identifier = (binary_expression "wVar18 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar15 == 0xd900) break;" if (parenthesized_expression "(uVar15 == 0xd900)" ( (binary_expression "uVar15 == 0xd900" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (uVar15 != 0xda00) {\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }" if (parenthesized_expression "(uVar15 != 0xda00)" ( (binary_expression "uVar15 != 0xda00" identifier != number_literal) )) (compound_statement "{\n                if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }\n                goto LAB_0003bf4c;\n              }" { (if_statement "if (uVar15 == 0xd800) {\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }" if (parenthesized_expression "(uVar15 == 0xd800)" ( (binary_expression "uVar15 == 0xd800" identifier == number_literal) )) (compound_statement "{\n                  wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];\n                }" { (expression_statement "wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_line[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_line[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_line" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) })) (goto_statement "goto LAB_0003bf4c;" goto statement_identifier ;) })) (expression_statement "wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_scoacs[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_scoacs[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_scoacs" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) (if_statement "if (iVar19 + 1 < (int)local_60) goto LAB_0003bf53;" if (parenthesized_expression "(iVar19 + 1 < (int)local_60)" ( (binary_expression "iVar19 + 1 < (int)local_60" (binary_expression "iVar19 + 1" identifier + number_literal) < (cast_expression "(int)local_60" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0003bf53;" goto statement_identifier ;)) (labeled_statement "LAB_0003bf9e:\n              local_60 = iVar19 + 0x100;" statement_identifier : (expression_statement "local_60 = iVar19 + 0x100;" (assignment_expression "local_60 = iVar19 + 0x100" identifier = (binary_expression "iVar19 + 0x100" identifier + number_literal)) ;)) (expression_statement "local_6c = (wchar_t *)saferealloc(local_6c,local_60,4);" (assignment_expression "local_6c = (wchar_t *)saferealloc(local_6c,local_60,4)" identifier = (cast_expression "(wchar_t *)saferealloc(local_6c,local_60,4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "saferealloc(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal ))))) ;) (expression_statement "local_6c[iVar19] = wVar18;" (assignment_expression "local_6c[iVar19] = wVar18" (subscript_expression "local_6c[iVar19]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar17 = ptVar8->cc_next;" (assignment_expression "iVar17 = ptVar8->cc_next" identifier = (field_expression "ptVar8->cc_next" identifier -> field_identifier)) ;) (expression_statement "iVar21 = iVar19 + 1;" (assignment_expression "iVar21 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (if_statement "if (iVar17 == 0) goto LAB_0003bfcc;" if (parenthesized_expression "(iVar17 == 0)" ( (binary_expression "iVar17 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0003bfcc;" goto statement_identifier ;)) })) (expression_statement "wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff];" (assignment_expression "wVar18 = term->ucsdata->unitab_xterm[wVar18 & 0xff]" identifier = (subscript_expression "term->ucsdata->unitab_xterm[wVar18 & 0xff]" (field_expression "term->ucsdata->unitab_xterm" (field_expression "term->ucsdata" identifier -> field_identifier) -> field_identifier) [ (binary_expression "wVar18 & 0xff" identifier & number_literal) ])) ;) (labeled_statement "LAB_0003bf4c:\n            if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;" statement_identifier : (if_statement "if ((int)local_60 <= iVar19 + 1) goto LAB_0003bf9e;" if (parenthesized_expression "((int)local_60 <= iVar19 + 1)" ( (binary_expression "(int)local_60 <= iVar19 + 1" (cast_expression "(int)local_60" ( (type_descriptor "int" primitive_type) ) identifier) <= (binary_expression "iVar19 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bf9e;" goto statement_identifier ;))) (labeled_statement "LAB_0003bf53:\n            local_6c[iVar19] = wVar18;" statement_identifier : (expression_statement "local_6c[iVar19] = wVar18;" (assignment_expression "local_6c[iVar19] = wVar18" (subscript_expression "local_6c[iVar19]" identifier [ identifier ]) = identifier) ;)) (expression_statement "iVar17 = ptVar8->cc_next;" (assignment_expression "iVar17 = ptVar8->cc_next" identifier = (field_expression "ptVar8->cc_next" identifier -> field_identifier)) ;) (expression_statement "iVar21 = iVar19 + 1;" (assignment_expression "iVar21 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar17 != 0)" ( (binary_expression "iVar17 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_0003bfcc:\n          iVar21 = iVar19 + 1;" statement_identifier : (expression_statement "iVar21 = iVar19 + 1;" (assignment_expression "iVar21 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;)) (expression_statement "local_4c = local_4c | 0x80000000;" (assignment_expression "local_4c = local_4c | 0x80000000" identifier = (binary_expression "local_4c | 0x80000000" identifier | number_literal)) ;) })) (if_statement "if (bVar22) {\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }" if (parenthesized_expression "(bVar22)" ( identifier )) (compound_statement "{\n          copy_termchar(term->disptext[(int)local_3c],local_80,b);\n          ptVar8 = term->disptext[(int)local_3c]->chars + local_80;\n          ptVar8->chr = uVar10;\n          uVar10 = uVar14 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }\n          ptVar8->attr = uVar10;\n        }" { (expression_statement "copy_termchar(term->disptext[(int)local_3c],local_80,b);" (call_expression "copy_termchar(term->disptext[(int)local_3c],local_80,b)" identifier (argument_list "(term->disptext[(int)local_3c],local_80,b)" ( (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ]) , identifier , identifier ))) ;) (expression_statement "ptVar8 = term->disptext[(int)local_3c]->chars + local_80;" (assignment_expression "ptVar8 = term->disptext[(int)local_3c]->chars + local_80" identifier = (binary_expression "term->disptext[(int)local_3c]->chars + local_80" (field_expression "term->disptext[(int)local_3c]->chars" (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ]) -> field_identifier) + identifier)) ;) (expression_statement "ptVar8->chr = uVar10;" (assignment_expression "ptVar8->chr = uVar10" (field_expression "ptVar8->chr" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar10 = uVar14 | 0x80000000;" (assignment_expression "uVar10 = uVar14 | 0x80000000" identifier = (binary_expression "uVar14 | 0x80000000" identifier | number_literal)) ;) (if_statement "if (local_40 != local_80) {\n            uVar10 = uVar14;\n          }" if (parenthesized_expression "(local_40 != local_80)" ( (binary_expression "local_40 != local_80" identifier != identifier) )) (compound_statement "{\n            uVar10 = uVar14;\n          }" { (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) })) (expression_statement "ptVar8->attr = uVar10;" (assignment_expression "ptVar8->attr = uVar10" (field_expression "ptVar8->attr" identifier -> field_identifier) = identifier) ;) })) (expression_statement "iVar17 = local_80 + 1;" (assignment_expression "iVar17 = local_80 + 1" identifier = (binary_expression "local_80 + 1" identifier + number_literal)) ;) (if_statement "if ((uVar14 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }" if (parenthesized_expression "((uVar14 & 0x400000) == 0)" ( (binary_expression "(uVar14 & 0x400000) == 0" (parenthesized_expression "(uVar14 & 0x400000)" ( (binary_expression "uVar14 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_0003bc62:\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }" { (labeled_statement "LAB_0003bc62:\n          bVar23 = bVar5;" statement_identifier : (expression_statement "bVar23 = bVar5;" (assignment_expression "bVar23 = bVar5" identifier = identifier) ;)) (if_statement "if (term->cols <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(term->cols <= iVar17)" ( (binary_expression "term->cols <= iVar17" (field_expression "term->cols" identifier -> field_identifier) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }) (else_clause "else {\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }" else (compound_statement "{\n          if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          destline = term->disptext[(int)local_3c];\n          iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);\n          bVar23 = true;\n          if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }\n          bVar5 = bVar23;\n          copy_termchar(destline,iVar17,b + 1);\n          iVar17 = local_80 + 2;\n          bVar23 = bVar5;\n          if (term->cols <= iVar17) goto LAB_0003c09d;\n        }" { (if_statement "if (term->cols <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" if (parenthesized_expression "(term->cols <= iVar17)" ( (binary_expression "term->cols <= iVar17" (field_expression "term->cols" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" { (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (goto_statement "goto LAB_0003bc62;" goto statement_identifier ;) })) (if_statement "if ((ldata_1 == local_3c) && (local_34 == iVar17)) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" if (parenthesized_expression "((ldata_1 == local_3c) && (local_34 == iVar17))" ( (binary_expression "(ldata_1 == local_3c) && (local_34 == iVar17)" (parenthesized_expression "(ldata_1 == local_3c)" ( (binary_expression "ldata_1 == local_3c" identifier == identifier) )) && (parenthesized_expression "(local_34 == iVar17)" ( (binary_expression "local_34 == iVar17" identifier == identifier) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" { comment (expression_statement "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));" (call_expression "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" identifier (argument_list "(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" ( (binary_expression "&UNK_0004647f + unaff_EDI" (pointer_expression "&UNK_0004647f" & identifier) + identifier) , (cast_expression "(char *)(unaff_EDI + 0x46160)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46160)" ( (binary_expression "unaff_EDI + 0x46160" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x46d43)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d43)" ( (binary_expression "unaff_EDI + 0x46d43" identifier + number_literal) ))) ))) ;) })) (expression_statement "destline = term->disptext[(int)local_3c];" (assignment_expression "destline = term->disptext[(int)local_3c]" identifier = (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1);" (assignment_expression "iVar19 = termchars_equal(destline->chars + local_80 + 1,b + 1)" identifier = (call_expression "termchars_equal(destline->chars + local_80 + 1,b + 1)" identifier (argument_list "(destline->chars + local_80 + 1,b + 1)" ( (binary_expression "destline->chars + local_80 + 1" (binary_expression "destline->chars + local_80" (field_expression "destline->chars" identifier -> field_identifier) + identifier) + number_literal) , (binary_expression "b + 1" identifier + number_literal) )))) ;) (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" identifier = true) ;) (if_statement "if (iVar19 != 0) {\n            bVar23 = bVar5;\n          }" if (parenthesized_expression "(iVar19 != 0)" ( (binary_expression "iVar19 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar23 = bVar5;\n          }" { (expression_statement "bVar23 = bVar5;" (assignment_expression "bVar23 = bVar5" identifier = identifier) ;) })) (expression_statement "bVar5 = bVar23;" (assignment_expression "bVar5 = bVar23" identifier = identifier) ;) (expression_statement "copy_termchar(destline,iVar17,b + 1);" (call_expression "copy_termchar(destline,iVar17,b + 1)" identifier (argument_list "(destline,iVar17,b + 1)" ( identifier , identifier , (binary_expression "b + 1" identifier + number_literal) ))) ;) (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (expression_statement "bVar23 = bVar5;" (assignment_expression "bVar23 = bVar5" identifier = identifier) ;) (if_statement "if (term->cols <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(term->cols <= iVar17)" ( (binary_expression "term->cols <= iVar17" (field_expression "term->cols" identifier -> field_identifier) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }))) (expression_statement "local_7c = term->disptext[(int)local_3c];" (assignment_expression "local_7c = term->disptext[(int)local_3c]" identifier = (subscript_expression "term->disptext[(int)local_3c]" (field_expression "term->disptext" identifier -> field_identifier) [ (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "local_80 = iVar17;" (assignment_expression "local_80 = iVar17" identifier = identifier) ;) (expression_statement "bVar22 = bVar6;" (assignment_expression "bVar22 = bVar6" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (expression_statement "local_7c->lattr = ptVar7->lattr;" (assignment_expression "local_7c->lattr = ptVar7->lattr" (field_expression "local_7c->lattr" identifier -> field_identifier) = (field_expression "ptVar7->lattr" identifier -> field_identifier)) ;) (goto_statement "goto LAB_0003c0a8;" goto statement_identifier ;) (labeled_statement "LAB_0003c09d:\n  if ((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)) {\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }" statement_identifier : (if_statement "if ((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)) {\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }" if (parenthesized_expression "((bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0))" ( (binary_expression "(bVar5) &&\n     (do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)" (parenthesized_expression "(bVar5)" ( identifier )) && (parenthesized_expression "(do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0)" ( (comma_expression "do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr),\n     (local_4c & 0x60000000) != 0" (call_expression "do_text(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" identifier (argument_list "(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" ( identifier , identifier , (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (cast_expression "(uint)ptVar7->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar7->lattr" identifier -> field_identifier)) ))) , (binary_expression "(local_4c & 0x60000000) != 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);\n  }" { (expression_statement "do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr);" (call_expression "do_cursor(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" identifier (argument_list "(ctx_00,local_40,(int)local_3c,local_6c,iVar21,local_4c,(uint)ptVar7->lattr)" ( identifier , identifier , (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (cast_expression "(uint)ptVar7->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar7->lattr" identifier -> field_identifier)) ))) ;) }))) (labeled_statement "LAB_0003c0a8:\n  if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }" statement_identifier : (if_statement "if (ptVar7->temporary != 0) {\n    freeline(ptVar7);\n  }" if (parenthesized_expression "(ptVar7->temporary != 0)" ( (binary_expression "ptVar7->temporary != 0" (field_expression "ptVar7->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    freeline(ptVar7);\n  }" { (expression_statement "freeline(ptVar7);" (call_expression "freeline(ptVar7)" identifier (argument_list "(ptVar7)" ( identifier ))) ;) }))) (expression_statement "local_3c = (termline *)((int)&local_3c->lattr + 1);" (assignment_expression "local_3c = (termline *)((int)&local_3c->lattr + 1)" identifier = (cast_expression "(termline *)((int)&local_3c->lattr + 1)" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&local_3c->lattr + 1)" ( (binary_expression "(int)&local_3c->lattr + 1" (cast_expression "(int)&local_3c->lattr" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&local_3c->lattr" & (field_expression "local_3c->lattr" identifier -> field_identifier))) + number_literal) )))) ;) (if_statement "if (term->rows <= (int)local_3c) goto LAB_0003c0cc;" if (parenthesized_expression "(term->rows <= (int)local_3c)" ( (binary_expression "term->rows <= (int)local_3c" (field_expression "term->rows" identifier -> field_identifier) <= (cast_expression "(int)local_3c" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0003c0cc;" goto statement_identifier ;)) (goto_statement "goto LAB_0003b700;" goto statement_identifier ;) })))
(translation_unit "void __regparm3 FUN_0003b550(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}\n\n" (function_definition "void __regparm3 FUN_0003b550(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0003b550(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "bool bVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "short *psVar10;" (sized_type_specifier "short" short) (pointer_declarator "*psVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "undefined4 extraout_EDX;" type_identifier identifier ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "uint uVar19;" type_identifier identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int iVar20;" primitive_type identifier ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "bool bVar23;" primitive_type identifier ;) (declaration "bool bVar24;" primitive_type identifier ;) (declaration "int local_84;" primitive_type identifier ;) (declaration "int local_80;" primitive_type identifier ;) (declaration "short *local_7c;" (sized_type_specifier "short" short) (pointer_declarator "*local_7c" * identifier) ;) (declaration "int local_78;" primitive_type identifier ;) (declaration "int local_6c;" primitive_type identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "int local_54;" primitive_type identifier ;) (declaration "uint local_4c;" type_identifier identifier ;) (declaration "int local_40;" primitive_type identifier ;) (declaration "int local_3c;" primitive_type identifier ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "FUN_00038693();" (call_expression "FUN_00038693()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_6c = FUN_0002d1f0(0x400,4);" (assignment_expression "local_6c = FUN_0002d1f0(0x400,4)" identifier = (call_expression "FUN_0002d1f0(0x400,4)" identifier (argument_list "(0x400,4)" ( number_literal , number_literal )))) ;) (expression_statement "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);" (assignment_expression "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" identifier = (call_expression "FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" identifier (argument_list "(*(undefined4 *)(param_1 + 300),0xc)" ( (pointer_expression "*(undefined4 *)(param_1 + 300)" * (cast_expression "(undefined4 *)(param_1 + 300)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) , number_literal )))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0xa8);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xa8)" identifier = (pointer_expression "*(int *)(param_1 + 0xa8)" * (cast_expression "(int *)(param_1 + 0xa8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xa8)" ( (binary_expression "param_1 + 0xa8" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x138);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x138)" identifier = (pointer_expression "*(int *)(param_1 + 0x138)" * (cast_expression "(int *)(param_1 + 0x138)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x138)" ( (binary_expression "param_1 + 0x138" identifier + number_literal) ))))) ;) (expression_statement "local_20 = *(uint *)(param_1 + 0xb0);" (assignment_expression "local_20 = *(uint *)(param_1 + 0xb0)" identifier = (pointer_expression "*(uint *)(param_1 + 0xb0)" * (cast_expression "(uint *)(param_1 + 0xb0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xb0)" ( (binary_expression "param_1 + 0xb0" identifier + number_literal) ))))) ;) (if_statement "if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" if (parenthesized_expression "(local_20 != 0)" ( (binary_expression "local_20 != 0" identifier != number_literal) )) (compound_statement "{\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" { (expression_statement "local_20 = 0x20000000;" (assignment_expression "local_20 = 0x20000000" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" ( (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" * (cast_expression "(int *)(param_1 + 0x134)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x134)" ( (binary_expression "param_1 + 0x134" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" { (if_statement "if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0xbc) == 0)" ( (binary_expression "*(int *)(param_1 + 0xbc) == 0" (pointer_expression "*(int *)(param_1 + 0xbc)" * (cast_expression "(int *)(param_1 + 0xbc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xbc)" ( (binary_expression "param_1 + 0xbc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }" if (parenthesized_expression "(*(int *)(param_1 + 0x1100) != 0)" ( (binary_expression "*(int *)(param_1 + 0x1100) != 0" (pointer_expression "*(int *)(param_1 + 0x1100)" * (cast_expression "(int *)(param_1 + 0x1100)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1100)" ( (binary_expression "param_1 + 0x1100" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          local_20 = 0;\n        }" { (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" identifier = number_literal) ;) })) }) (else_clause "else {\n        local_20 = 0x40000000;\n      }" else (compound_statement "{\n        local_20 = 0x40000000;\n      }" { (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" identifier = number_literal) ;) }))) })) (if_statement "if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x8c) != 0)" ( (binary_expression "*(int *)(param_1 + 0x8c) != 0" (pointer_expression "*(int *)(param_1 + 0x8c)" * (cast_expression "(int *)(param_1 + 0x8c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x8c)" ( (binary_expression "param_1 + 0x8c" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      local_20 = local_20 | 0x10000000;\n    }" { (expression_statement "local_20 = local_20 | 0x10000000;" (assignment_expression "local_20 = local_20 | 0x10000000" identifier = (binary_expression "local_20 | 0x10000000" identifier | number_literal)) ;) })) })) (expression_statement "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);" (assignment_expression "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" identifier = (binary_expression "*(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) - (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))))) ;) (expression_statement "iVar8 = FUN_0003adf0(0);" (assignment_expression "iVar8 = FUN_0003adf0(0)" identifier = (call_expression "FUN_0003adf0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "local_34 = *(int *)(param_1 + 0x70);" (assignment_expression "local_34 = *(int *)(param_1 + 0x70)" identifier = (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = FUN_00039860(iVar20);" (assignment_expression "iVar9 = FUN_00039860(iVar20)" identifier = (call_expression "FUN_00039860(iVar20)" identifier (argument_list "(iVar20)" ( identifier )))) ;) (if_statement "if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }" { (expression_statement "iVar9 = *(int *)(iVar8 + 0x14);" (assignment_expression "iVar9 = *(int *)(iVar8 + 0x14)" identifier = (pointer_expression "*(int *)(iVar8 + 0x14)" * (cast_expression "(int *)(iVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0x14)" ( (binary_expression "iVar8 + 0x14" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" else (compound_statement "{\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" { (expression_statement "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);" (assignment_expression "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" identifier = (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4" (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" ( (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8" (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" * (cast_expression "(int *)(param_1 + 0x10cc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10cc)" ( (binary_expression "param_1 + 0x10cc" identifier + number_literal) )))) + (binary_expression "iVar20 * 0x10" identifier * number_literal)) + number_literal) )))) + (binary_expression "local_34 * 4" identifier * number_literal)) ))))) ;) }))) (if_statement "if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" if (parenthesized_expression "(0 < local_34)" ( (binary_expression "0 < local_34" number_literal < identifier) )) (compound_statement "{\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" { (expression_statement "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);" (assignment_expression "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" identifier = (binary_expression "local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" identifier - (call_expression "(uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" ( (binary_expression "*(int *)(iVar9 + local_34 * 0xc) == 0xdfff" (pointer_expression "*(int *)(iVar9 + local_34 * 0xc)" * (cast_expression "(int *)(iVar9 + local_34 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + local_34 * 0xc)" ( (binary_expression "iVar9 + local_34 * 0xc" identifier + (binary_expression "local_34 * 0xc" identifier * number_literal)) )))) == number_literal) ))))) ;) })) (if_statement "if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }" if (parenthesized_expression "(*(int *)(iVar8 + 0xc) != 0)" ( (binary_expression "*(int *)(iVar8 + 0xc) != 0" (pointer_expression "*(int *)(iVar8 + 0xc)" * (cast_expression "(int *)(iVar8 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0xc)" ( (binary_expression "iVar8 + 0xc" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00039830();\n  }" { (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar9 = *(int *)(param_1 + 0x20);" (assignment_expression "iVar9 = *(int *)(param_1 + 0x20)" identifier = (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" if (parenthesized_expression "((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))))" ( (binary_expression "(-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" (parenthesized_expression "(-1 < iVar9)" ( (binary_expression "-1 < iVar9" number_literal < identifier) )) && (parenthesized_expression "(((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" ( (parenthesized_expression "((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))" ( (binary_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)" (parenthesized_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       )" ( (comma_expression "iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (assignment_expression "iVar8 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) , (binary_expression "*(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (binary_expression "*(uint *)(param_1 + 0x24) != local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) != identifier) || (parenthesized_expression "(iVar20 != iVar9)" ( (binary_expression "iVar20 != iVar9" identifier != identifier) )))) )) || (parenthesized_expression "(local_34 != iVar8)" ( (binary_expression "local_34 != iVar8" identifier != identifier) ))) )) ))) )) (compound_statement "{\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" { (expression_statement "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" ( (binary_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc" (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar9 * 4)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar9 * 4" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + (binary_expression "iVar9 * 4" identifier * number_literal)) )))) + number_literal) )))) + (binary_expression "iVar8 * 0xc" identifier * number_literal)) )))) ;) (if_statement "if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" if (parenthesized_expression "((iVar8 < 1) || (*piVar1 != 0xdfff))" ( (binary_expression "(iVar8 < 1) || (*piVar1 != 0xdfff)" (parenthesized_expression "(iVar8 < 1)" ( (binary_expression "iVar8 < 1" identifier < number_literal) )) || (parenthesized_expression "(*piVar1 != 0xdfff)" ( (binary_expression "*piVar1 != 0xdfff" (pointer_expression "*piVar1" * identifier) != number_literal) ))) )) (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n    }" { (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" else (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" { (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "piVar1[-2] = piVar1[-2] | 0x3ffff;" (assignment_expression "piVar1[-2] = piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" identifier [ number_literal ]) = (binary_expression "piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" identifier [ number_literal ]) | number_literal)) ;) }))) (if_statement "if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" if (parenthesized_expression "((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff))" ( (binary_expression "(iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)" (parenthesized_expression "(iVar8 < iVar9 + -1)" ( (binary_expression "iVar8 < iVar9 + -1" identifier < (binary_expression "iVar9 + -1" identifier + number_literal)) )) && (parenthesized_expression "(piVar1[3] == 0xdfff)" ( (binary_expression "piVar1[3] == 0xdfff" (subscript_expression "piVar1[3]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" { (expression_statement "piVar1[4] = piVar1[4] | 0x3ffff;" (assignment_expression "piVar1[4] = piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" identifier [ number_literal ]) = (binary_expression "piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" identifier [ number_literal ]) | number_literal)) ;) })) (expression_statement "piVar1[1] = piVar1[1] | 0x3ffff;" (assignment_expression "piVar1[1] = piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" identifier [ number_literal ]) = (binary_expression "piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" identifier [ number_literal ]) | number_literal)) ;) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "*(undefined4 *)(param_1 + 0x20) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x20) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x20)" * (cast_expression "(undefined4 *)(param_1 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" * (cast_expression "(undefined4 *)(param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x128) < 1)" ( (binary_expression "*(int *)(param_1 + 0x128) < 1" (pointer_expression "*(int *)(param_1 + 0x128)" * (cast_expression "(int *)(param_1 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x128)" ( (binary_expression "param_1 + 0x128" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" { (labeled_statement "LAB_0003c0cc:\n    FUN_0002da80(iVar7);" statement_identifier : (expression_statement "FUN_0002da80(iVar7);" (call_expression "FUN_0002da80(iVar7)" identifier (argument_list "(iVar7)" ( identifier ))) ;)) (expression_statement "FUN_0002da80(local_6c);" (call_expression "FUN_0002da80(local_6c)" identifier (argument_list "(local_6c)" ( identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "local_60 = 0x400;" (assignment_expression "local_60 = 0x400" identifier = number_literal) ;) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" identifier = number_literal) ;) (labeled_statement "LAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;" statement_identifier : (expression_statement "iVar9 = *(int *)(param_1 + 0x10) + local_3c;" (assignment_expression "iVar9 = *(int *)(param_1 + 0x10) + local_3c" identifier = (binary_expression "*(int *)(param_1 + 0x10) + local_3c" (pointer_expression "*(int *)(param_1 + 0x10)" * (cast_expression "(int *)(param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) + identifier)) ;)) (expression_statement "psVar10 = (short *)FUN_0003adf0(0);" (assignment_expression "psVar10 = (short *)FUN_0003adf0(0)" identifier = (cast_expression "(short *)FUN_0003adf0(0)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0003adf0(0)" identifier (argument_list "(0)" ( number_literal ))))) ;) (expression_statement "local_54 = FUN_00039860(local_3c);" (assignment_expression "local_54 = FUN_00039860(local_3c)" identifier = (call_expression "FUN_00039860(local_3c)" identifier (argument_list "(local_3c)" ( identifier )))) ;) (if_statement "if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" if (parenthesized_expression "(local_54 == 0)" ( (binary_expression "local_54 == 0" identifier == number_literal) )) (compound_statement "{\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }" { (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" identifier = number_literal) ;) (expression_statement "local_54 = *(int *)(psVar10 + 10);" (assignment_expression "local_54 = *(int *)(psVar10 + 10)" identifier = (pointer_expression "*(int *)(psVar10 + 10)" * (cast_expression "(int *)(psVar10 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar10 + 10)" ( (binary_expression "psVar10 + 10" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" else (compound_statement "{\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" { (expression_statement "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);" (assignment_expression "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" identifier = (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" * (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" ( (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc" (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" * (cast_expression "(int *)(param_1 + 0x10cc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10cc)" ( (binary_expression "param_1 + 0x10cc" identifier + number_literal) )))) + (binary_expression "local_3c * 0x10" identifier * number_literal)) + number_literal) ))))) ;) }))) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "iVar8 = local_3c * 4;" (assignment_expression "iVar8 = local_3c * 4" identifier = (binary_expression "local_3c * 4" identifier * number_literal)) ;) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + local_3c * 4)" ( (binary_expression "*(int *)(param_1 + 0x18) + local_3c * 4" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + (binary_expression "local_3c * 4" identifier * number_literal)) ))))) ;) (if_statement "if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" { (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);" do (compound_statement "{\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    }" { (expression_statement "local_80 = local_84;" (assignment_expression "local_80 = local_84" identifier = identifier) ;) (if_statement "if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" if (parenthesized_expression "(local_78 != 0)" ( (binary_expression "local_78 != 0" identifier != number_literal) )) (compound_statement "{\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" { (expression_statement "local_80 = *(int *)(local_78 + local_84 * 4);" (assignment_expression "local_80 = *(int *)(local_78 + local_84 * 4)" identifier = (pointer_expression "*(int *)(local_78 + local_84 * 4)" * (cast_expression "(int *)(local_78 + local_84 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_78 + local_84 * 4)" ( (binary_expression "local_78 + local_84 * 4" identifier + (binary_expression "local_84 * 4" identifier * number_literal)) ))))) ;) })) (expression_statement "uVar15 = *(uint *)(local_54 + iVar21);" (assignment_expression "uVar15 = *(uint *)(local_54 + iVar21)" identifier = (pointer_expression "*(uint *)(local_54 + iVar21)" * (cast_expression "(uint *)(local_54 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + iVar21)" ( (binary_expression "local_54 + iVar21" identifier + identifier) ))))) ;) (expression_statement "uVar11 = *(uint *)(local_54 + 4 + iVar21);" (assignment_expression "uVar11 = *(uint *)(local_54 + 4 + iVar21)" identifier = (pointer_expression "*(uint *)(local_54 + 4 + iVar21)" * (cast_expression "(uint *)(local_54 + 4 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + 4 + iVar21)" ( (binary_expression "local_54 + 4 + iVar21" (binary_expression "local_54 + 4" identifier + number_literal) + identifier) ))))) ;) (if_statement "if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x10d4) == 0)" ( (binary_expression "*(int *)(param_1 + 0x10d4) == 0" (pointer_expression "*(int *)(param_1 + 0x10d4)" * (cast_expression "(int *)(param_1 + 0x10d4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10d4)" ( (binary_expression "param_1 + 0x10d4" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" { (expression_statement "uVar11 = uVar11 & 0xfffc0000 | 0x20500;" (assignment_expression "uVar11 = uVar11 & 0xfffc0000 | 0x20500" identifier = (binary_expression "uVar11 & 0xfffc0000 | 0x20500" (binary_expression "uVar11 & 0xfffc0000" identifier & number_literal) | number_literal)) ;) })) (if_statement "if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0x1170) == 0)" ( (binary_expression "*(int *)(param_1 + 0x1170) == 0" (pointer_expression "*(int *)(param_1 + 0x1170)" * (cast_expression "(int *)(param_1 + 0x1170)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1170)" ( (binary_expression "param_1 + 0x1170" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" { (if_statement "if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" if (parenthesized_expression "((uVar11 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar11 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 & 0x1ff)" ( (binary_expression "uVar11 & 0x1ff" identifier & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" { (expression_statement "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;" (assignment_expression "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" identifier = (binary_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" (call_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint3)(uVar11 >> 8) & 0xfffffe | 1)" ( (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe | 1" (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe" (call_expression "(uint3)(uVar11 >> 8)" (parenthesized_expression "(uint3)" ( identifier )) (argument_list "(uVar11 >> 8)" ( (binary_expression "uVar11 >> 8" identifier >> number_literal) ))) & number_literal) | number_literal) ))) << number_literal)) ;) })) (if_statement "if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" if (parenthesized_expression "((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0)" ( (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 >> 9 & 0x1ff)" ( (binary_expression "uVar11 >> 9 & 0x1ff" (binary_expression "uVar11 >> 9" identifier >> number_literal) & number_literal) )) - number_literal) < number_literal) )) (compound_statement "{\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" { (expression_statement "uVar11 = uVar11 & 0xfffc01ff | 0x20400;" (assignment_expression "uVar11 = uVar11 & 0xfffc01ff | 0x20400" identifier = (binary_expression "uVar11 & 0xfffc01ff | 0x20400" (binary_expression "uVar11 & 0xfffc01ff" identifier & number_literal) | number_literal)) ;) })) })) (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xd900)" ( (binary_expression "uVar16 == 0xd900" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" else (if_statement "if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xda00)" ( (binary_expression "uVar16 == 0xda00" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) }) (else_clause "else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" else (if_statement "if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" if (parenthesized_expression "(uVar16 == 0xd800)" ( (binary_expression "uVar16 == 0xd800" identifier == number_literal) )) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" ( (binary_expression "uVar15 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })))))) (if_statement "if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }" if (parenthesized_expression "((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff))" ( (binary_expression "(local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" (parenthesized_expression "(local_84 < iVar17 + -1)" ( (binary_expression "local_84 < iVar17 + -1" identifier < (binary_expression "iVar17 + -1" identifier + number_literal)) )) && (parenthesized_expression "(*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" ( (binary_expression "*(int *)(local_54 + 0xc + iVar21) == 0xdfff" (pointer_expression "*(int *)(local_54 + 0xc + iVar21)" * (cast_expression "(int *)(local_54 + 0xc + iVar21)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + 0xc + iVar21)" ( (binary_expression "local_54 + 0xc + iVar21" (binary_expression "local_54 + 0xc" identifier + number_literal) + identifier) )))) == number_literal) ))) )) (compound_statement "{\n        uVar11 = uVar11 | 0x400000;\n      }" { (expression_statement "uVar11 = uVar11 | 0x400000;" (assignment_expression "uVar11 = uVar11 | 0x400000" identifier = (binary_expression "uVar11 | 0x400000" identifier | number_literal)) ;) })) (expression_statement "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;" (assignment_expression "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" identifier = (binary_expression "uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" identifier ^ (binary_expression "(uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" (call_expression "(uint)((iVar2 == 0) != (iVar3 == 0))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((iVar2 == 0) != (iVar3 == 0))" ( (binary_expression "(iVar2 == 0) != (iVar3 == 0)" (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) != (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) ))) ))) << number_literal))) ;) (if_statement "if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" if (parenthesized_expression "(*(int *)(param_1 + 0xe48) - 2U < 2)" ( (binary_expression "*(int *)(param_1 + 0xe48) - 2U < 2" (binary_expression "*(int *)(param_1 + 0xe48) - 2U" (pointer_expression "*(int *)(param_1 + 0xe48)" * (cast_expression "(int *)(param_1 + 0xe48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe48)" ( (binary_expression "param_1 + 0xe48" identifier + number_literal) )))) - number_literal) < number_literal) )) (compound_statement "{\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe54);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe54)" identifier = (pointer_expression "*(int *)(param_1 + 0xe54)" * (cast_expression "(int *)(param_1 + 0xe54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe54)" ( (binary_expression "param_1 + 0xe54" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(*(int *)(param_1 + 0xe4c) == 0)" ( (binary_expression "*(int *)(param_1 + 0xe4c) == 0" (pointer_expression "*(int *)(param_1 + 0xe4c)" * (cast_expression "(int *)(param_1 + 0xe4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe4c)" ( (binary_expression "param_1 + 0xe4c" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }" { (if_statement "if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" if (parenthesized_expression "((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))))" ( (binary_expression "(iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" (parenthesized_expression "(iVar17 < iVar9)" ( (binary_expression "iVar17 < iVar9" identifier < identifier) )) || (parenthesized_expression "((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" ( (parenthesized_expression "(iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))" ( (binary_expression "iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)" (binary_expression "iVar9 == iVar17" identifier == identifier) && (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" ( (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" * (cast_expression "(int *)(param_1 + 0xe58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe58)" ( (binary_expression "param_1 + 0xe58" identifier + number_literal) )))) <= identifier) ))) )) ))) )) (compound_statement "{\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" { (if_statement "if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;" if (parenthesized_expression "(iVar9 < *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 < *(int *)(param_1 + 0xe5c)" identifier < (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) )) (goto_statement "goto LAB_0003b988;" goto statement_identifier ;)) (if_statement "if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" if (parenthesized_expression "(iVar9 == *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 == *(int *)(param_1 + 0xe5c)" identifier == (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) )) (compound_statement "{\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" identifier = (pointer_expression "*(int *)(param_1 + 0xe60)" * (cast_expression "(int *)(param_1 + 0xe60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe60)" ( (binary_expression "param_1 + 0xe60" identifier + number_literal) ))))) ;) (goto_statement "goto joined_r0x0003ba86;" goto statement_identifier ;) })) })) }) (else_clause "else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" else (if_statement "if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" if (parenthesized_expression "(((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c)))" ( (binary_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))" (parenthesized_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80))" ( (binary_expression "(iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)" (parenthesized_expression "(iVar17 <= iVar9)" ( (binary_expression "iVar17 <= iVar9" identifier <= identifier) )) && (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" ( (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" * (cast_expression "(int *)(param_1 + 0xe58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe58)" ( (binary_expression "param_1 + 0xe58" identifier + number_literal) )))) <= identifier) ))) )) && (parenthesized_expression "(iVar9 <= *(int *)(param_1 + 0xe5c))" ( (binary_expression "iVar9 <= *(int *)(param_1 + 0xe5c)" identifier <= (pointer_expression "*(int *)(param_1 + 0xe5c)" * (cast_expression "(int *)(param_1 + 0xe5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe5c)" ( (binary_expression "param_1 + 0xe5c" identifier + number_literal) ))))) ))) )) (compound_statement "{\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" { (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" identifier = (pointer_expression "*(int *)(param_1 + 0xe60)" * (cast_expression "(int *)(param_1 + 0xe60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe60)" ( (binary_expression "param_1 + 0xe60" identifier + number_literal) ))))) ;) (labeled_statement "joined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" statement_identifier : (if_statement "if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" if (parenthesized_expression "(local_80 < iVar17)" ( (binary_expression "local_80 < iVar17" identifier < identifier) )) (compound_statement "{\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" { (labeled_statement "LAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;" statement_identifier : (expression_statement "uVar11 = uVar11 ^ 0x100000;" (assignment_expression "uVar11 = uVar11 ^ 0x100000" identifier = (binary_expression "uVar11 ^ 0x100000" identifier ^ number_literal)) ;)) }))) })))) })) (if_statement "if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" if (parenthesized_expression "((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0))" ( (binary_expression "(*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0xc4) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc4) != 0" (pointer_expression "*(int *)(param_1 + 0xc4)" * (cast_expression "(int *)(param_1 + 0xc4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc4)" ( (binary_expression "param_1 + 0xc4" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((uVar11 & 0x200000) != 0)" ( (binary_expression "(uVar11 & 0x200000) != 0" (parenthesized_expression "(uVar11 & 0x200000)" ( (binary_expression "uVar11 & 0x200000" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" { (if_statement "if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" if (parenthesized_expression "((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0))" ( (binary_expression "(*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" ( (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" * (cast_expression "(int *)(param_1 + 0x134)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x134)" ( (binary_expression "param_1 + 0x134" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "(*(int *)(param_1 + 0xc0) != 0)" ( (binary_expression "*(int *)(param_1 + 0xc0) != 0" (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) )))) != number_literal) ))) )) (compound_statement "{\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" { (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x490)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x490" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) ))))) ;) })) (expression_statement "uVar11 = uVar11 & 0xffdfffff;" (assignment_expression "uVar11 = uVar11 & 0xffdfffff" identifier = (binary_expression "uVar11 & 0xffdfffff" identifier & number_literal)) ;) })) (if_statement "if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" if (parenthesized_expression "((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))" ( (binary_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" (parenthesized_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15)" ( (binary_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15" (pointer_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21)" * (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" ( (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) )))) == identifier) )) && (parenthesized_expression "(uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" ( (comma_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11" (assignment_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" identifier = (subscript_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" (parenthesized_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))" ( (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" ( (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) ))) )) [ number_literal ])) , (binary_expression "(uVar16 & 0xf7fffff) == uVar11" (parenthesized_expression "(uVar16 & 0xf7fffff)" ( (binary_expression "uVar16 & 0xf7fffff" identifier & number_literal) )) == identifier)) ))) )) (compound_statement "{\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }" { (if_statement "if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }" if (parenthesized_expression "((uVar16 & 0x800000) != 0)" ( (binary_expression "(uVar16 & 0x800000) != 0" (parenthesized_expression "(uVar16 & 0x800000)" ( (binary_expression "uVar16 & 0x800000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          uVar11 = uVar11 | 0x800000;\n        }" { (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" identifier = (binary_expression "uVar11 | 0x800000" identifier | number_literal)) ;) })) }) (else_clause "else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" else (if_statement "if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" if (parenthesized_expression "((uVar11 & 0x400000) == 0)" ( (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" ( (binary_expression "uVar11 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" { (expression_statement "iVar17 = FUN_0005a120(extraout_EDX,uVar15);" (assignment_expression "iVar17 = FUN_0005a120(extraout_EDX,uVar15)" identifier = (call_expression "FUN_0005a120(extraout_EDX,uVar15)" identifier (argument_list "(extraout_EDX,uVar15)" ( identifier , identifier )))) ;) (if_statement "if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" if (parenthesized_expression "(iVar17 == 2)" ( (binary_expression "iVar17 == 2" identifier == number_literal) )) (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }" { (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" identifier = (binary_expression "uVar11 | 0x800000" identifier | number_literal)) ;) }) (else_clause "else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" else (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" { (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) }))) })))) (if_statement "if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" if (parenthesized_expression "((local_34 == local_84) && (iVar20 == local_3c))" ( (binary_expression "(local_34 == local_84) && (iVar20 == local_3c)" (parenthesized_expression "(local_34 == local_84)" ( (binary_expression "local_34 == local_84" identifier == identifier) )) && (parenthesized_expression "(iVar20 == local_3c)" ( (binary_expression "iVar20 == local_3c" identifier == identifier) ))) )) (compound_statement "{\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" { (expression_statement "*(int *)(param_1 + 0x1c) = local_84;" (assignment_expression "*(int *)(param_1 + 0x1c) = local_84" (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar11 = uVar11 | local_20;" (assignment_expression "uVar11 = uVar11 | local_20" identifier = (binary_expression "uVar11 | local_20" identifier | identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x24) = local_20;" (assignment_expression "*(uint *)(param_1 + 0x24) = local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" * (cast_expression "(uint *)(param_1 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x20) = local_3c;" (assignment_expression "*(int *)(param_1 + 0x20) = local_3c" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "local_84 = local_84 + 1;" (assignment_expression "local_84 = local_84 + 1" identifier = (binary_expression "local_84 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)(iVar7 + 4 + iVar21) = uVar11;" (assignment_expression "*(uint *)(iVar7 + 4 + iVar21) = uVar11" (pointer_expression "*(uint *)(iVar7 + 4 + iVar21)" * (cast_expression "(uint *)(iVar7 + 4 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 4 + iVar21)" ( (binary_expression "iVar7 + 4 + iVar21" (binary_expression "iVar7 + 4" identifier + number_literal) + identifier) )))) = identifier) ;) (expression_statement "*(undefined4 *)(iVar7 + 8 + iVar21) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 8 + iVar21) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 8 + iVar21)" * (cast_expression "(undefined4 *)(iVar7 + 8 + iVar21)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 8 + iVar21)" ( (binary_expression "iVar7 + 8 + iVar21" (binary_expression "iVar7 + 8" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" identifier = (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(iVar7 + iVar21) = uVar15;" (assignment_expression "*(uint *)(iVar7 + iVar21) = uVar15" (pointer_expression "*(uint *)(iVar7 + iVar21)" * (cast_expression "(uint *)(iVar7 + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar21)" ( (binary_expression "iVar7 + iVar21" identifier + identifier) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + 0xc;" (assignment_expression "iVar21 = iVar21 + 0xc" identifier = (binary_expression "iVar21 + 0xc" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_84 < iVar17)" ( (binary_expression "local_84 < iVar17" identifier < identifier) )) ;) (if_statement "if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" { (expression_statement "iVar9 = *(int *)(local_7c + 10);" (assignment_expression "iVar9 = *(int *)(local_7c + 10)" identifier = (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) ))))) ;) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "iVar18 = iVar7 - iVar9;" (assignment_expression "iVar18 = iVar7 - iVar9" identifier = (binary_expression "iVar7 - iVar9" identifier - identifier)) ;) (expression_statement "puVar13 = (uint *)(iVar9 + 4);" (assignment_expression "puVar13 = (uint *)(iVar9 + 4)" identifier = (cast_expression "(uint *)(iVar9 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4)" ( (binary_expression "iVar9 + 4" identifier + number_literal) )))) ;) (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (do_statement "do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);" do (compound_statement "{\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      }" { (while_statement "while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" { (expression_statement "iVar22 = iVar21;" (assignment_expression "iVar22 = iVar21" identifier = identifier) ;) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);" (assignment_expression "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13)" identifier = (pointer_expression "*(uint *)(iVar18 + -4 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + -4 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + -4 + (int)puVar13)" ( (binary_expression "iVar18 + -4 + (int)puVar13" (binary_expression "iVar18 + -4" identifier + number_literal) + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (if_statement "if ((int)uVar15 < 0) break;" if (parenthesized_expression "((int)uVar15 < 0)" ( (binary_expression "(int)uVar15 < 0" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" if (parenthesized_expression "((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))" ( (binary_expression "(uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" (parenthesized_expression "(uVar11 == puVar13[-1])" ( (binary_expression "uVar11 == puVar13[-1]" identifier == (subscript_expression "puVar13[-1]" identifier [ number_literal ])) )) && (parenthesized_expression "((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" ( (binary_expression "(uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)" (parenthesized_expression "(uVar15 & 0xfffffff)" ( (binary_expression "uVar15 & 0xfffffff" identifier & number_literal) )) == (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + (int)puVar13)" ( (binary_expression "iVar18 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ))) )) (compound_statement "{\n            if (bVar4) goto LAB_0003bae8;\n          }" { (if_statement "if (bVar4) goto LAB_0003bae8;" if (parenthesized_expression "(bVar4)" ( identifier )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) }) (else_clause "else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" else (compound_statement "{\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" { (if_statement "if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" if (parenthesized_expression "((!bVar4) && (local_84 < iVar22))" ( (binary_expression "(!bVar4) && (local_84 < iVar22)" (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) && (parenthesized_expression "(local_84 < iVar22)" ( (binary_expression "local_84 < iVar22" identifier < identifier) ))) )) (compound_statement "{\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" { (expression_statement "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);" (assignment_expression "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc)" identifier = (cast_expression "(uint *)(iVar9 + 4 + local_84 * 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4 + local_84 * 0xc)" ( (binary_expression "iVar9 + 4 + local_84 * 0xc" (binary_expression "iVar9 + 4" identifier + number_literal) + (binary_expression "local_84 * 0xc" identifier * number_literal)) )))) ;) (do_statement "do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);" do (compound_statement "{\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              }" { (expression_statement "*puVar14 = *puVar14 | 0x3ffff;" (assignment_expression "*puVar14 = *puVar14 | 0x3ffff" (pointer_expression "*puVar14" * identifier) = (binary_expression "*puVar14 | 0x3ffff" (pointer_expression "*puVar14" * identifier) | number_literal)) ;) (expression_statement "puVar14 = puVar14 + 3;" (assignment_expression "puVar14 = puVar14 + 3" identifier = (binary_expression "puVar14 + 3" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar13 != puVar14)" ( (binary_expression "puVar13 != puVar14" identifier != identifier) )) ;) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) })) (labeled_statement "LAB_0003bae8:\n            bVar4 = true;" statement_identifier : (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;)) (expression_statement "*puVar13 = uVar15 | 0x3ffff;" (assignment_expression "*puVar13 = uVar15 | 0x3ffff" (pointer_expression "*puVar13" * identifier) = (binary_expression "uVar15 | 0x3ffff" identifier | number_literal)) ;) }))) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" identifier = (binary_expression "puVar13 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (if_statement "if (iVar17 == iVar22 + 1) goto LAB_0003bb38;" if (parenthesized_expression "(iVar17 == iVar22 + 1)" ( (binary_expression "iVar17 == iVar22 + 1" identifier == (binary_expression "iVar22 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bb38;" goto statement_identifier ;)) })) (expression_statement "local_84 = iVar22;" (assignment_expression "local_84 = iVar22" identifier = identifier) ;) (if_statement "if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;" if (parenthesized_expression "((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))" ( (binary_expression "(uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" (parenthesized_expression "(uVar11 != puVar13[-1])" ( (binary_expression "uVar11 != puVar13[-1]" identifier != (subscript_expression "puVar13[-1]" identifier [ number_literal ])) )) || (parenthesized_expression "(bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" ( (comma_expression "bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (assignment_expression "bVar4 = false" identifier = false) , (binary_expression "*(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" * (cast_expression "(uint *)(iVar18 + (int)puVar13)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + (int)puVar13)" ( (binary_expression "iVar18 + (int)puVar13" identifier + (cast_expression "(int)puVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (parenthesized_expression "(uVar15 & 0xfffffff)" ( (binary_expression "uVar15 & 0xfffffff" identifier & number_literal) )))) ))) )) (goto_statement "goto LAB_0003bae8;" goto statement_identifier ;)) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" identifier = (binary_expression "puVar13 + 3" identifier + number_literal)) ;) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar17 != iVar22 + 1)" ( (binary_expression "iVar17 != iVar22 + 1" identifier != (binary_expression "iVar22 + 1" identifier + number_literal)) )) ;) (labeled_statement "LAB_0003bb38:\n      local_40 = 0;" statement_identifier : (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" identifier = number_literal) ;)) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "bVar24 = *local_7c != *psVar10;" (assignment_expression "bVar24 = *local_7c != *psVar10" identifier = (binary_expression "*local_7c != *psVar10" (pointer_expression "*local_7c" * identifier) != (pointer_expression "*psVar10" * identifier))) ;) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" identifier = number_literal) ;) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" * identifier) = (pointer_expression "*psVar10" * identifier)) ;) (expression_statement "local_80 = 0;" (assignment_expression "local_80 = 0" identifier = number_literal) ;) (expression_statement "bVar23 = bVar24;" (assignment_expression "bVar23 = bVar24" identifier = identifier) ;) (do_statement "do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );" do (compound_statement "{\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      }" { (expression_statement "iVar17 = local_80 * 0xc;" (assignment_expression "iVar17 = local_80 * 0xc" identifier = (binary_expression "local_80 * 0xc" identifier * number_literal)) ;) (expression_statement "puVar13 = (uint *)(local_54 + iVar17);" (assignment_expression "puVar13 = (uint *)(local_54 + iVar17)" identifier = (cast_expression "(uint *)(local_54 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_54 + iVar17)" ( (binary_expression "local_54 + iVar17" identifier + identifier) )))) ;) (expression_statement "uVar15 = *(uint *)(iVar7 + iVar17);" (assignment_expression "uVar15 = *(uint *)(iVar7 + iVar17)" identifier = (pointer_expression "*(uint *)(iVar7 + iVar17)" * (cast_expression "(uint *)(iVar7 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar17)" ( (binary_expression "iVar7 + iVar17" identifier + identifier) ))))) ;) (expression_statement "uVar11 = ((uint *)(iVar7 + iVar17))[1];" (assignment_expression "uVar11 = ((uint *)(iVar7 + iVar17))[1]" identifier = (subscript_expression "((uint *)(iVar7 + iVar17))[1]" (parenthesized_expression "((uint *)(iVar7 + iVar17))" ( (cast_expression "(uint *)(iVar7 + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar17)" ( (binary_expression "iVar7 + iVar17" identifier + identifier) ))) )) [ number_literal ])) ;) (expression_statement "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);" (assignment_expression "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17)" identifier = (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar17)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(local_7c + 10) + iVar17)" ( (binary_expression "*(int *)(local_7c + 10) + iVar17" (pointer_expression "*(int *)(local_7c + 10)" * (cast_expression "(int *)(local_7c + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_7c + 10)" ( (binary_expression "local_7c + 10" identifier + number_literal) )))) + identifier) )))) ;) (expression_statement "bVar6 = true;" (assignment_expression "bVar6 = true" identifier = true) ;) (if_statement "if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }" if (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0x400000) == 0)" ( (binary_expression "((uVar11 ^ puVar14[1]) & 0x400000) == 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0x400000)" ( (binary_expression "(uVar11 ^ puVar14[1]) & 0x400000" (parenthesized_expression "(uVar11 ^ puVar14[1])" ( (binary_expression "uVar11 ^ puVar14[1]" identifier ^ (subscript_expression "puVar14[1]" identifier [ number_literal ])) )) & number_literal) )) == number_literal) )) (compound_statement "{\n          bVar6 = bVar23;\n        }" { (expression_statement "bVar6 = bVar23;" (assignment_expression "bVar6 = bVar23" identifier = identifier) ;) })) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }" if (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" ( (binary_expression "uVar15 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" ( (comma_expression "uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "uVar16 = 0" identifier = number_literal) , (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" ( (binary_expression "uVar15 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n          uVar16 = uVar15 & 0xffffff00;\n        }" { (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) })) (expression_statement "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;" (assignment_expression "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" identifier = (binary_expression "uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (binary_expression "uVar16 != local_58" identifier != identifier) || (binary_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c))" ( (binary_expression "*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)" (pointer_expression "*(uint *)(param_1 + 0x106c)" * (cast_expression "(uint *)(param_1 + 0x106c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x106c)" ( (binary_expression "param_1 + 0x106c" identifier + number_literal) )))) & (parenthesized_expression "(uVar11 ^ local_4c)" ( (binary_expression "uVar11 ^ local_4c" identifier ^ identifier) ))) )) != number_literal))) ;) (if_statement "if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" if (parenthesized_expression "((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0))))" ( (binary_expression "(puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))" (parenthesized_expression "(puVar13[2] == 0)" ( (binary_expression "puVar13[2] == 0" (subscript_expression "puVar13[2]" identifier [ number_literal ]) == number_literal) )) && (parenthesized_expression "((local_80 < 1 || (puVar13[-1] == 0)))" ( (parenthesized_expression "(local_80 < 1 || (puVar13[-1] == 0))" ( (binary_expression "local_80 < 1 || (puVar13[-1] == 0)" (binary_expression "local_80 < 1" identifier < number_literal) || (parenthesized_expression "(puVar13[-1] == 0)" ( (binary_expression "puVar13[-1] == 0" (subscript_expression "puVar13[-1]" identifier [ number_literal ]) == number_literal) ))) )) ))) )) (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" if (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" ( (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" { (labeled_statement "LAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" statement_identifier : (if_statement "if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" if (parenthesized_expression "(((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1))))" ( (binary_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))" (parenthesized_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff)))" ( (binary_expression "(uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))" (parenthesized_expression "(uVar15 == *puVar14)" ( (binary_expression "uVar15 == *puVar14" identifier == (pointer_expression "*puVar14" * identifier)) )) && (parenthesized_expression "(uVar11 == (puVar14[1] & 0xfffffff))" ( (binary_expression "uVar11 == (puVar14[1] & 0xfffffff)" identifier == (parenthesized_expression "(puVar14[1] & 0xfffffff)" ( (binary_expression "puVar14[1] & 0xfffffff" (subscript_expression "puVar14[1]" identifier [ number_literal ]) & number_literal) ))) ))) )) || (parenthesized_expression "((!bVar24 && (iVar9 == 1)))" ( (parenthesized_expression "(!bVar24 && (iVar9 == 1))" ( (binary_expression "!bVar24 && (iVar9 == 1)" (unary_expression "!bVar24" ! identifier) && (parenthesized_expression "(iVar9 == 1)" ( (binary_expression "iVar9 == 1" identifier == number_literal) ))) )) ))) )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;))) })) (if_statement "if (bVar23) goto LAB_0003bd5e;" if (parenthesized_expression "(bVar23)" ( identifier )) (goto_statement "goto LAB_0003bd5e;" goto statement_identifier ;)) (expression_statement "iVar21 = iVar9 * 4;" (assignment_expression "iVar21 = iVar9 * 4" identifier = (binary_expression "iVar9 * 4" identifier * number_literal)) ;) (expression_statement "iVar18 = iVar9 + 1;" (assignment_expression "iVar18 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (labeled_statement "LAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;" statement_identifier : (if_statement "if (uVar15 != *puVar14) goto LAB_0003bddd;" if (parenthesized_expression "(uVar15 != *puVar14)" ( (binary_expression "uVar15 != *puVar14" identifier != (pointer_expression "*puVar14" * identifier)) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (labeled_statement "LAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" statement_identifier : (if_statement "if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" if (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0xfffffff) != 0)" ( (binary_expression "((uVar11 ^ puVar14[1]) & 0xfffffff) != 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0xfffffff)" ( (binary_expression "(uVar11 ^ puVar14[1]) & 0xfffffff" (parenthesized_expression "(uVar11 ^ puVar14[1])" ( (binary_expression "uVar11 ^ puVar14[1]" identifier ^ (subscript_expression "puVar14[1]" identifier [ number_literal ])) )) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0003bddd;" goto statement_identifier ;))) (expression_statement "iVar12 = FUN_00039090();" (assignment_expression "iVar12 = FUN_00039090()" identifier = (call_expression "FUN_00039090()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar23 = iVar12 == 0;" (assignment_expression "bVar23 = iVar12 == 0" identifier = (binary_expression "iVar12 == 0" identifier == number_literal)) ;) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (if_statement "if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }" if (parenthesized_expression "(iVar12 != 0)" ( (binary_expression "iVar12 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar5 = bVar24;\n          }" { (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" identifier = identifier) ;) })) }) (else_clause "else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" else (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" if (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" ( (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" ! identifier) && (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) )))) == number_literal)) )) (compound_statement "{\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" { (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" identifier = true) ;) (goto_statement "goto LAB_0003bd3e;" goto statement_identifier ;) })) (labeled_statement "LAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" statement_identifier : (if_statement "if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" if (parenthesized_expression "((iVar9 != 0) && ((bool)(bVar4 | bVar24)))" ( (binary_expression "(iVar9 != 0) && ((bool)(bVar4 | bVar24))" (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "((bool)(bVar4 | bVar24))" ( (cast_expression "(bool)(bVar4 | bVar24)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar4 | bVar24)" ( (binary_expression "bVar4 | bVar24" identifier | identifier) ))) ))) )) (compound_statement "{\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" { (expression_statement "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) (if_statement "if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" if (parenthesized_expression "((local_4c & 0x60000000) == 0)" ( (binary_expression "(local_4c & 0x60000000) == 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" { (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) }) (else_clause "else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" else (compound_statement "{\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" { (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" identifier = (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) ))))) ;) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) }))) }))) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" if (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))" ( (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" ( (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" ( (binary_expression "uVar15 & 0xfffffc00" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "(local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" ( (comma_expression "local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "local_58 = 0" identifier = number_literal) , (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" ( (binary_expression "uVar15 & 0xfffffe00" identifier & number_literal) )) == number_literal)) ))) )) (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }" { (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" identifier = (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) ))))) ;) (expression_statement "local_58 = uVar15 & 0xffffff00;" (assignment_expression "local_58 = uVar15 & 0xffffff00" identifier = (binary_expression "uVar15 & 0xffffff00" identifier & number_literal)) ;) }) (else_clause "else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" else (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n          }" { (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" identifier = (pointer_expression "*(int *)(iVar21 + 4)" * (cast_expression "(int *)(iVar21 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar21 + 4)" ( (binary_expression "iVar21 + 4" identifier + number_literal) ))))) ;) }))) (expression_statement "local_4c = uVar11;" (assignment_expression "local_4c = uVar11" identifier = identifier) ;) (if_statement "if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" { (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" identifier = identifier) ;) (goto_statement "goto LAB_0003bbca;" goto statement_identifier ;) })) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" identifier = identifier) ;) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" identifier = number_literal) ;) (expression_statement "bVar4 = bVar24;" (assignment_expression "bVar4 = bVar24" identifier = identifier) ;) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" identifier = identifier) ;) (if_statement "if (uVar15 == *puVar14) goto LAB_0003bbd6;" if (parenthesized_expression "(uVar15 == *puVar14)" ( (binary_expression "uVar15 == *puVar14" identifier == (pointer_expression "*puVar14" * identifier)) )) (goto_statement "goto LAB_0003bbd6;" goto statement_identifier ;)) (labeled_statement "LAB_0003bddd:\n          bVar23 = true;" statement_identifier : (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" identifier = true) ;)) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" identifier = identifier) ;) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) }))) (expression_statement "iVar9 = iVar18;" (assignment_expression "iVar9 = iVar18" identifier = identifier) ;) (if_statement "if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" if (parenthesized_expression "(local_60 <= iVar9)" ( (binary_expression "local_60 <= iVar9" identifier <= identifier) )) (compound_statement "{\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" { (expression_statement "local_60 = iVar22 + 0x100;" (assignment_expression "local_60 = iVar22 + 0x100" identifier = (binary_expression "iVar22 + 0x100" identifier + number_literal)) ;) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" identifier = (call_expression "FUN_0002d5f0(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal )))) ;) })) (expression_statement "*(uint *)(local_6c + iVar21) = uVar15;" (assignment_expression "*(uint *)(local_6c + iVar21) = uVar15" (pointer_expression "*(uint *)(local_6c + iVar21)" * (cast_expression "(uint *)(local_6c + iVar21)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + iVar21)" ( (binary_expression "local_6c + iVar21" identifier + identifier) )))) = identifier) ;) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (if_statement "if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" if (parenthesized_expression "(uVar16 != 0)" ( (binary_expression "uVar16 != 0" identifier != number_literal) )) (compound_statement "{\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" { (do_statement "do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);" do (compound_statement "{\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          }" { (while_statement "while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" { (expression_statement "iVar21 = iVar9;" (assignment_expression "iVar21 = iVar9" identifier = identifier) ;) (expression_statement "puVar13 = puVar13 + uVar16 * 3;" (assignment_expression "puVar13 = puVar13 + uVar16 * 3" identifier = (binary_expression "puVar13 + uVar16 * 3" identifier + (binary_expression "uVar16 * 3" identifier * number_literal))) ;) (expression_statement "uVar16 = *puVar13;" (assignment_expression "uVar16 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "uVar19 = uVar16 & 0xffffff00;" (assignment_expression "uVar19 = uVar16 & 0xffffff00" identifier = (binary_expression "uVar16 & 0xffffff00" identifier & number_literal)) ;) (if_statement "if (uVar19 == 0xd900) break;" if (parenthesized_expression "(uVar19 == 0xd900)" ( (binary_expression "uVar19 == 0xd900" identifier == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" if (parenthesized_expression "(uVar19 != 0xda00)" ( (binary_expression "uVar19 != 0xda00" identifier != number_literal) )) (compound_statement "{\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" { (if_statement "if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" if (parenthesized_expression "(uVar19 == 0xd800)" ( (binary_expression "uVar19 == 0xd800" identifier == number_literal) )) (compound_statement "{\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" { (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) })) (goto_statement "goto LAB_0003bf4c;" goto statement_identifier ;) })) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (if_statement "if (iVar21 + 1 < local_60) goto LAB_0003bf53;" if (parenthesized_expression "(iVar21 + 1 < local_60)" ( (binary_expression "iVar21 + 1 < local_60" (binary_expression "iVar21 + 1" identifier + number_literal) < identifier) )) (goto_statement "goto LAB_0003bf53;" goto statement_identifier ;)) (labeled_statement "LAB_0003bf9e:\n              local_60 = iVar21 + 0x100;" statement_identifier : (expression_statement "local_60 = iVar21 + 0x100;" (assignment_expression "local_60 = iVar21 + 0x100" identifier = (binary_expression "iVar21 + 0x100" identifier + number_literal)) ;)) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" identifier = (call_expression "FUN_0002d5f0(local_6c,local_60,4)" identifier (argument_list "(local_6c,local_60,4)" ( identifier , identifier , number_literal )))) ;) (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" * (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" ( (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" identifier + number_literal) + (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" ( (binary_expression "iVar21 + 1" identifier + number_literal) )) * number_literal)) )))) = identifier) ;) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) (if_statement "if (uVar16 == 0) goto LAB_0003bfcc;" if (parenthesized_expression "(uVar16 == 0)" ( (binary_expression "uVar16 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0003bfcc;" goto statement_identifier ;)) })) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" identifier = (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" * (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" ( (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" * (cast_expression "(int *)(param_1 + 0x1090)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1090)" ( (binary_expression "param_1 + 0x1090" identifier + number_literal) )))) + number_literal) + (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" ( (binary_expression "uVar16 & 0xff" identifier & number_literal) )) * number_literal)) ))))) ;) (labeled_statement "LAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" statement_identifier : (if_statement "if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" if (parenthesized_expression "(local_60 <= iVar21 + 1)" ( (binary_expression "local_60 <= iVar21 + 1" identifier <= (binary_expression "iVar21 + 1" identifier + number_literal)) )) (goto_statement "goto LAB_0003bf9e;" goto statement_identifier ;))) (labeled_statement "LAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" statement_identifier : (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" * (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" ( (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" identifier + number_literal) + (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" ( (binary_expression "iVar21 + 1" identifier + number_literal) )) * number_literal)) )))) = identifier) ;)) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" identifier = (subscript_expression "puVar13[2]" identifier [ number_literal ])) ;) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar16 != 0)" ( (binary_expression "uVar16 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_0003bfcc:\n          iVar9 = iVar21 + 1;" statement_identifier : (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;)) (expression_statement "local_4c = local_4c | 0x80000000;" (assignment_expression "local_4c = local_4c | 0x80000000" identifier = (binary_expression "local_4c | 0x80000000" identifier | number_literal)) ;) })) (if_statement "if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" if (parenthesized_expression "(bVar23)" ( identifier )) (compound_statement "{\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" { (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));" (assignment_expression "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" identifier = (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" ( (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" identifier + (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" * (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" ( (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) )))) + number_literal) ))))) )))) ;) (expression_statement "*puVar13 = uVar15;" (assignment_expression "*puVar13 = uVar15" (pointer_expression "*puVar13" * identifier) = identifier) ;) (expression_statement "uVar15 = uVar11 | 0x80000000;" (assignment_expression "uVar15 = uVar11 | 0x80000000" identifier = (binary_expression "uVar11 | 0x80000000" identifier | number_literal)) ;) (if_statement "if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }" if (parenthesized_expression "(local_40 != local_80)" ( (binary_expression "local_40 != local_80" identifier != identifier) )) (compound_statement "{\n            uVar15 = uVar11;\n          }" { (expression_statement "uVar15 = uVar11;" (assignment_expression "uVar15 = uVar11" identifier = identifier) ;) })) (expression_statement "puVar13[1] = uVar15;" (assignment_expression "puVar13[1] = uVar15" (subscript_expression "puVar13[1]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "iVar17 = local_80 + 1;" (assignment_expression "iVar17 = local_80 + 1" identifier = (binary_expression "local_80 + 1" identifier + number_literal)) ;) (if_statement "if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" if (parenthesized_expression "((uVar11 & 0x400000) == 0)" ( (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" ( (binary_expression "uVar11 & 0x400000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" { (labeled_statement "LAB_0003bc62:\n          bVar24 = bVar5;" statement_identifier : (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;)) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }) (else_clause "else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" else (compound_statement "{\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" { (if_statement "if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" { (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (goto_statement "goto LAB_0003bc62;" goto statement_identifier ;) })) (if_statement "if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" if (parenthesized_expression "((iVar20 == local_3c) && (local_34 == iVar17))" ( (binary_expression "(iVar20 == local_3c) && (local_34 == iVar17)" (parenthesized_expression "(iVar20 == local_3c)" ( (binary_expression "iVar20 == local_3c" identifier == identifier) )) && (parenthesized_expression "(local_34 == iVar17)" ( (binary_expression "local_34 == iVar17" identifier == identifier) ))) )) (compound_statement "{\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" { (expression_statement "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));" (call_expression "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" identifier (argument_list "(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" ( (binary_expression "&UNK_0004647f + unaff_EDI" (pointer_expression "&UNK_0004647f" & identifier) + identifier) , (cast_expression "(char *)(unaff_EDI + 0x46160)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46160)" ( (binary_expression "unaff_EDI + 0x46160" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x46d43)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x46d43)" ( (binary_expression "unaff_EDI + 0x46d43" identifier + number_literal) ))) ))) ;) })) (expression_statement "iVar17 = FUN_000390d0();" (assignment_expression "iVar17 = FUN_000390d0()" identifier = (call_expression "FUN_000390d0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar24 = true;" (assignment_expression "bVar24 = true" identifier = true) ;) (if_statement "if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }" if (parenthesized_expression "(iVar17 != 0)" ( (binary_expression "iVar17 != 0" identifier != number_literal) )) (compound_statement "{\n            bVar24 = bVar5;\n          }" { (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;) })) (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" identifier = identifier) ;) (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" identifier = (binary_expression "local_80 + 2" identifier + number_literal)) ;) (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" if (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" ( (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" * (cast_expression "(int *)(param_1 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 300)" ( (binary_expression "param_1 + 300" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c09d;" goto statement_identifier ;)) }))) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" identifier = (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" * (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" ( (type_descriptor "short **" (sized_type_specifier "short" short) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" ( (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "local_80 = iVar17;" (assignment_expression "local_80 = iVar17" identifier = identifier) ;) (expression_statement "bVar23 = bVar6;" (assignment_expression "bVar23 = bVar6" identifier = identifier) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" * identifier) = (pointer_expression "*psVar10" * identifier)) ;) (goto_statement "goto LAB_0003c0a8;" goto statement_identifier ;) (labeled_statement "LAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" statement_identifier : (if_statement "if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" if (parenthesized_expression "((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0))" ( (binary_expression "(bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" (parenthesized_expression "(bVar5)" ( identifier )) && (parenthesized_expression "(FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" ( (comma_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) , (binary_expression "(local_4c & 0x60000000) != 0" (parenthesized_expression "(local_4c & 0x60000000)" ( (binary_expression "local_4c & 0x60000000" identifier & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" { (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" identifier (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" ( identifier , identifier , identifier , identifier , identifier , identifier , (pointer_expression "*psVar10" * identifier) ))) ;) }))) (labeled_statement "LAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" statement_identifier : (if_statement "if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" if (parenthesized_expression "(*(int *)(psVar10 + 6) != 0)" ( (binary_expression "*(int *)(psVar10 + 6) != 0" (pointer_expression "*(int *)(psVar10 + 6)" * (cast_expression "(int *)(psVar10 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(psVar10 + 6)" ( (binary_expression "psVar10 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_00039830();\n  }" { (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" identifier (argument_list "()" ( ))) ;) }))) (expression_statement "local_3c = local_3c + 1;" (assignment_expression "local_3c = local_3c + 1" identifier = (binary_expression "local_3c + 1" identifier + number_literal)) ;) (if_statement "if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;" if (parenthesized_expression "(*(int *)(param_1 + 0x128) <= local_3c)" ( (binary_expression "*(int *)(param_1 + 0x128) <= local_3c" (pointer_expression "*(int *)(param_1 + 0x128)" * (cast_expression "(int *)(param_1 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x128)" ( (binary_expression "param_1 + 0x128" identifier + number_literal) )))) <= identifier) )) (goto_statement "goto LAB_0003c0cc;" goto statement_identifier ;)) (goto_statement "goto LAB_0003b700;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier short) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier short) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) == LIT) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (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 LIT < IDENT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != IDENT) || (parenthesized_expression ( (binary_expression IDENT != IDENT) )))) )) || (parenthesized_expression ( (binary_expression IDENT != IDENT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) | LIT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) | LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) | LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT & LIT) | LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) ))) & LIT) | LIT) ))) << LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) & LIT) )) - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT & LIT) | LIT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) })))))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) != (parenthesized_expression ( (binary_expression IDENT == LIT) ))) ))) << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT == IDENT) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) ))) )) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) })) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) ))) )) && (parenthesized_expression ( (binary_expression IDENT <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ LIT)) ;)) }))) })))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) == IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))) )) [ LIT ])) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == IDENT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) }))) })))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ LIT ])) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (unary_expression ! IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) | LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = BOOL) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT | LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (subscript_expression IDENT [ LIT ])) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = BOOL) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) != (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) != (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (subscript_expression IDENT [ LIT ])) )) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != IDENT) || (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & (parenthesized_expression ( (binary_expression IDENT ^ IDENT) ))) )) != LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT < LIT) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) ))) )) (compound_statement { (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 (unary_expression ! IDENT) && (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT)) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) )) && (parenthesized_expression ( (binary_expression IDENT == (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) ))) ))) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) ))) )) (goto_statement goto statement_identifier ;))) })) (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * IDENT)) )) (goto_statement goto statement_identifier ;))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT ^ (subscript_expression IDENT [ LIT ])) )) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) }) (else_clause else (compound_statement { (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 (unary_expression ! IDENT) && (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT | IDENT) ))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , (pointer_expression * IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) + LIT) ))))) )))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , (pointer_expression * IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) + LIT) ))))) )))) ;) }))) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = BOOL) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * LIT)) ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression IDENT + LIT)) )) (goto_statement goto statement_identifier ;))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) )))) = IDENT) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) })) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) + LIT) ))))) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (pointer_expression & IDENT) + IDENT) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( BOOL )) ;) })) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( IDENT )) && (parenthesized_expression ( (comma_expression (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , (pointer_expression * IDENT) ))) , (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , (pointer_expression * IDENT) ))) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })))
(function_definition "void __regparm3 FUN_0003b550(int param_1)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0003b550(int param_1)" (identifier "FUN_0003b550") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  bool bVar5;\n  bool bVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  short *psVar10;\n  uint uVar11;\n  int iVar12;\n  uint *puVar13;\n  uint *puVar14;\n  uint uVar15;\n  uint uVar16;\n  undefined4 extraout_EDX;\n  int iVar17;\n  int iVar18;\n  uint uVar19;\n  int unaff_EDI;\n  int iVar20;\n  int iVar21;\n  int iVar22;\n  bool bVar23;\n  bool bVar24;\n  int local_84;\n  int local_80;\n  short *local_7c;\n  int local_78;\n  int local_6c;\n  int local_60;\n  uint local_58;\n  int local_54;\n  uint local_4c;\n  int local_40;\n  int local_3c;\n  int local_34;\n  uint local_20;\n  \n  FUN_00038693();\n  local_6c = FUN_0002d1f0(0x400,4);\n  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);\n  iVar2 = *(int *)(param_1 + 0xa8);\n  iVar3 = *(int *)(param_1 + 0x138);\n  local_20 = *(uint *)(param_1 + 0xb0);\n  if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }\n  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);\n  iVar8 = FUN_0003adf0(0);\n  local_34 = *(int *)(param_1 + 0x70);\n  iVar9 = FUN_00039860(iVar20);\n  if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }\n  if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }\n  if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }\n  iVar9 = *(int *)(param_1 + 0x20);\n  if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;\n  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;\n  if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }\n  local_60 = 0x400;\n  local_3c = 0;\nLAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;\n  psVar10 = (short *)FUN_0003adf0(0);\n  local_54 = FUN_00039860(local_3c);\n  if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }\n  iVar17 = *(int *)(param_1 + 300);\n  iVar8 = local_3c * 4;\n  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);\n  if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }\n  *local_7c = *psVar10;\n  goto LAB_0003c0a8;\nLAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }\nLAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }\n  local_3c = local_3c + 1;\n  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;\n  goto LAB_0003b700;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "bool bVar6;" (primitive_type "bool") (identifier "bVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "short *psVar10;" (sized_type_specifier "short" (short "short")) (pointer_declarator "*psVar10" (* "*") (identifier "psVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "uint *puVar13;" (type_identifier "uint") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "uint uVar16;" (type_identifier "uint") (identifier "uVar16") (; ";")) (declaration "undefined4 extraout_EDX;" (type_identifier "undefined4") (identifier "extraout_EDX") (; ";")) (declaration "int iVar17;" (primitive_type "int") (identifier "iVar17") (; ";")) (declaration "int iVar18;" (primitive_type "int") (identifier "iVar18") (; ";")) (declaration "uint uVar19;" (type_identifier "uint") (identifier "uVar19") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "int iVar20;" (primitive_type "int") (identifier "iVar20") (; ";")) (declaration "int iVar21;" (primitive_type "int") (identifier "iVar21") (; ";")) (declaration "int iVar22;" (primitive_type "int") (identifier "iVar22") (; ";")) (declaration "bool bVar23;" (primitive_type "bool") (identifier "bVar23") (; ";")) (declaration "bool bVar24;" (primitive_type "bool") (identifier "bVar24") (; ";")) (declaration "int local_84;" (primitive_type "int") (identifier "local_84") (; ";")) (declaration "int local_80;" (primitive_type "int") (identifier "local_80") (; ";")) (declaration "short *local_7c;" (sized_type_specifier "short" (short "short")) (pointer_declarator "*local_7c" (* "*") (identifier "local_7c")) (; ";")) (declaration "int local_78;" (primitive_type "int") (identifier "local_78") (; ";")) (declaration "int local_6c;" (primitive_type "int") (identifier "local_6c") (; ";")) (declaration "int local_60;" (primitive_type "int") (identifier "local_60") (; ";")) (declaration "uint local_58;" (type_identifier "uint") (identifier "local_58") (; ";")) (declaration "int local_54;" (primitive_type "int") (identifier "local_54") (; ";")) (declaration "uint local_4c;" (type_identifier "uint") (identifier "local_4c") (; ";")) (declaration "int local_40;" (primitive_type "int") (identifier "local_40") (; ";")) (declaration "int local_3c;" (primitive_type "int") (identifier "local_3c") (; ";")) (declaration "int local_34;" (primitive_type "int") (identifier "local_34") (; ";")) (declaration "uint local_20;" (type_identifier "uint") (identifier "local_20") (; ";")) (expression_statement "FUN_00038693();" (call_expression "FUN_00038693()" (identifier "FUN_00038693") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "local_6c = FUN_0002d1f0(0x400,4);" (assignment_expression "local_6c = FUN_0002d1f0(0x400,4)" (identifier "local_6c") (= "=") (call_expression "FUN_0002d1f0(0x400,4)" (identifier "FUN_0002d1f0") (argument_list "(0x400,4)" (( "(") (number_literal "0x400") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);" (assignment_expression "iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" (identifier "iVar7") (= "=") (call_expression "FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc)" (identifier "FUN_0002d1f0") (argument_list "(*(undefined4 *)(param_1 + 300),0xc)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 300)" (* "*") (cast_expression "(undefined4 *)(param_1 + 300)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")")))) (, ",") (number_literal "0xc") () ")")))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0xa8);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xa8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0xa8)" (* "*") (cast_expression "(int *)(param_1 + 0xa8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xa8)" (( "(") (binary_expression "param_1 + 0xa8" (identifier "param_1") (+ "+") (number_literal "0xa8")) () ")"))))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x138);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x138)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x138)" (* "*") (cast_expression "(int *)(param_1 + 0x138)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x138)" (( "(") (binary_expression "param_1 + 0x138" (identifier "param_1") (+ "+") (number_literal "0x138")) () ")"))))) (; ";")) (expression_statement "local_20 = *(uint *)(param_1 + 0xb0);" (assignment_expression "local_20 = *(uint *)(param_1 + 0xb0)" (identifier "local_20") (= "=") (pointer_expression "*(uint *)(param_1 + 0xb0)" (* "*") (cast_expression "(uint *)(param_1 + 0xb0)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xb0)" (( "(") (binary_expression "param_1 + 0xb0" (identifier "param_1") (+ "+") (number_literal "0xb0")) () ")"))))) (; ";")) (if_statement "if (local_20 != 0) {\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" (if "if") (parenthesized_expression "(local_20 != 0)" (( "(") (binary_expression "local_20 != 0" (identifier "local_20") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    local_20 = 0x20000000;\n    if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }\n    if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }\n  }" ({ "{") (expression_statement "local_20 = 0x20000000;" (assignment_expression "local_20 = 0x20000000" (identifier "local_20") (= "=") (number_literal "0x20000000")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x134) != 0) {\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" (* "*") (cast_expression "(int *)(param_1 + 0x134)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x134)" (( "(") (binary_expression "param_1 + 0x134" (identifier "param_1") (+ "+") (number_literal "0x134")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }\n    }" ({ "{") (if_statement "if (*(int *)(param_1 + 0xbc) == 0) {\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }\n      else {\n        local_20 = 0x40000000;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xbc) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xbc) == 0" (pointer_expression "*(int *)(param_1 + 0xbc)" (* "*") (cast_expression "(int *)(param_1 + 0xbc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xbc)" (( "(") (binary_expression "param_1 + 0xbc" (identifier "param_1") (+ "+") (number_literal "0xbc")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        local_20 = 0x40000000;\n        if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }\n      }" ({ "{") (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" (identifier "local_20") (= "=") (number_literal "0x40000000")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x1100) != 0) {\n          local_20 = 0;\n        }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x1100) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x1100) != 0" (pointer_expression "*(int *)(param_1 + 0x1100)" (* "*") (cast_expression "(int *)(param_1 + 0x1100)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1100)" (( "(") (binary_expression "param_1 + 0x1100" (identifier "param_1") (+ "+") (number_literal "0x1100")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          local_20 = 0;\n        }" ({ "{") (expression_statement "local_20 = 0;" (assignment_expression "local_20 = 0" (identifier "local_20") (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        local_20 = 0x40000000;\n      }" (else "else") (compound_statement "{\n        local_20 = 0x40000000;\n      }" ({ "{") (expression_statement "local_20 = 0x40000000;" (assignment_expression "local_20 = 0x40000000" (identifier "local_20") (= "=") (number_literal "0x40000000")) (; ";")) (} "}")))) (} "}"))) (if_statement "if (*(int *)(param_1 + 0x8c) != 0) {\n      local_20 = local_20 | 0x10000000;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x8c) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x8c) != 0" (pointer_expression "*(int *)(param_1 + 0x8c)" (* "*") (cast_expression "(int *)(param_1 + 0x8c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x8c)" (( "(") (binary_expression "param_1 + 0x8c" (identifier "param_1") (+ "+") (number_literal "0x8c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      local_20 = local_20 | 0x10000000;\n    }" ({ "{") (expression_statement "local_20 = local_20 | 0x10000000;" (assignment_expression "local_20 = local_20 | 0x10000000" (identifier "local_20") (= "=") (binary_expression "local_20 | 0x10000000" (identifier "local_20") (| "|") (number_literal "0x10000000"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);" (assignment_expression "iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" (identifier "iVar20") (= "=") (binary_expression "*(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10)" (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")")))) (- "-") (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))))) (; ";")) (expression_statement "iVar8 = FUN_0003adf0(0);" (assignment_expression "iVar8 = FUN_0003adf0(0)" (identifier "iVar8") (= "=") (call_expression "FUN_0003adf0(0)" (identifier "FUN_0003adf0") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (expression_statement "local_34 = *(int *)(param_1 + 0x70);" (assignment_expression "local_34 = *(int *)(param_1 + 0x70)" (identifier "local_34") (= "=") (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")"))))) (; ";")) (expression_statement "iVar9 = FUN_00039860(iVar20);" (assignment_expression "iVar9 = FUN_00039860(iVar20)" (identifier "iVar9") (= "=") (call_expression "FUN_00039860(iVar20)" (identifier "FUN_00039860") (argument_list "(iVar20)" (( "(") (identifier "iVar20") () ")")))) (; ";")) (if_statement "if (iVar9 == 0) {\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }\n  else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar9 = *(int *)(iVar8 + 0x14);\n  }" ({ "{") (expression_statement "iVar9 = *(int *)(iVar8 + 0x14);" (assignment_expression "iVar9 = *(int *)(iVar8 + 0x14)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar8 + 0x14)" (* "*") (cast_expression "(int *)(iVar8 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + 0x14)" (( "(") (binary_expression "iVar8 + 0x14" (identifier "iVar8") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" (else "else") (compound_statement "{\n    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);\n  }" ({ "{") (expression_statement "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);" (assignment_expression "local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" (identifier "local_34") (= "=") (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" (* "*") (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4)" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4" (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8)" (( "(") (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8" (binary_expression "*(int *)(param_1 + 0x10cc) + iVar20 * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" (* "*") (cast_expression "(int *)(param_1 + 0x10cc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10cc)" (( "(") (binary_expression "param_1 + 0x10cc" (identifier "param_1") (+ "+") (number_literal "0x10cc")) () ")")))) (+ "+") (binary_expression "iVar20 * 0x10" (identifier "iVar20") (* "*") (number_literal "0x10"))) (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "local_34 * 4" (identifier "local_34") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")))) (if_statement "if (0 < local_34) {\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" (if "if") (parenthesized_expression "(0 < local_34)" (( "(") (binary_expression "0 < local_34" (number_literal "0") (< "<") (identifier "local_34")) () ")")) (compound_statement "{\n    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);\n  }" ({ "{") (expression_statement "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);" (assignment_expression "local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (identifier "local_34") (= "=") (binary_expression "local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (identifier "local_34") (- "-") (call_expression "(uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff)" (( "(") (binary_expression "*(int *)(iVar9 + local_34 * 0xc) == 0xdfff" (pointer_expression "*(int *)(iVar9 + local_34 * 0xc)" (* "*") (cast_expression "(int *)(iVar9 + local_34 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + local_34 * 0xc)" (( "(") (binary_expression "iVar9 + local_34 * 0xc" (identifier "iVar9") (+ "+") (binary_expression "local_34 * 0xc" (identifier "local_34") (* "*") (number_literal "0xc"))) () ")")))) (== "==") (number_literal "0xdfff")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar8 + 0xc) != 0) {\n    FUN_00039830();\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar8 + 0xc) != 0)" (( "(") (binary_expression "*(int *)(iVar8 + 0xc) != 0" (pointer_expression "*(int *)(iVar8 + 0xc)" (* "*") (cast_expression "(int *)(iVar8 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + 0xc)" (( "(") (binary_expression "iVar8 + 0xc" (identifier "iVar8") (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00039830();\n  }" ({ "{") (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" (identifier "FUN_00039830") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar9 = *(int *)(param_1 + 0x20);" (assignment_expression "iVar9 = *(int *)(param_1 + 0x20)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if ((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))) {\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" (if "if") (parenthesized_expression "((-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))))" (( "(") (binary_expression "(-1 < iVar9) &&\n     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" (parenthesized_expression "(-1 < iVar9)" (( "(") (binary_expression "-1 < iVar9" (number_literal "-1") (< "<") (identifier "iVar9")) () ")")) (&& "&&") (parenthesized_expression "(((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)))" (( "(") (parenthesized_expression "((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8))" (( "(") (binary_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       ) || (local_34 != iVar8)" (parenthesized_expression "(iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)\n       )" (( "(") (comma_expression "iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (assignment_expression "iVar8 = *(int *)(param_1 + 0x1c)" (identifier "iVar8") (= "=") (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) (, ",") (binary_expression "*(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)" (binary_expression "*(uint *)(param_1 + 0x24) != local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" (* "*") (cast_expression "(uint *)(param_1 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (!= "!=") (identifier "local_20")) (|| "||") (parenthesized_expression "(iVar20 != iVar9)" (( "(") (binary_expression "iVar20 != iVar9" (identifier "iVar20") (!= "!=") (identifier "iVar9")) () ")")))) () ")")) (|| "||") (parenthesized_expression "(local_34 != iVar8)" (( "(") (binary_expression "local_34 != iVar8" (identifier "local_34") (!= "!=") (identifier "iVar8")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);\n    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }\n    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }\n    piVar1[1] = piVar1[1] | 0x3ffff;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" ({ "{") (expression_statement "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);" (assignment_expression "piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc)" (( "(") (binary_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc" (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" (* "*") (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14)" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar9 * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar9 * 4" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (binary_expression "iVar9 * 4" (identifier "iVar9") (* "*") (number_literal "4"))) () ")")))) (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (binary_expression "iVar8 * 0xc" (identifier "iVar8") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (if_statement "if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {\n      iVar9 = *(int *)(param_1 + 300);\n    }\n    else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" (if "if") (parenthesized_expression "((iVar8 < 1) || (*piVar1 != 0xdfff))" (( "(") (binary_expression "(iVar8 < 1) || (*piVar1 != 0xdfff)" (parenthesized_expression "(iVar8 < 1)" (( "(") (binary_expression "iVar8 < 1" (identifier "iVar8") (< "<") (number_literal "1")) () ")")) (|| "||") (parenthesized_expression "(*piVar1 != 0xdfff)" (( "(") (binary_expression "*piVar1 != 0xdfff" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (!= "!=") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n    }" ({ "{") (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" (else "else") (compound_statement "{\n      iVar9 = *(int *)(param_1 + 300);\n      piVar1[-2] = piVar1[-2] | 0x3ffff;\n    }" ({ "{") (expression_statement "iVar9 = *(int *)(param_1 + 300);" (assignment_expression "iVar9 = *(int *)(param_1 + 300)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "piVar1[-2] = piVar1[-2] | 0x3ffff;" (assignment_expression "piVar1[-2] = piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" (identifier "piVar1") ([ "[") (number_literal "-2") (] "]")) (= "=") (binary_expression "piVar1[-2] | 0x3ffff" (subscript_expression "piVar1[-2]" (identifier "piVar1") ([ "[") (number_literal "-2") (] "]")) (| "|") (number_literal "0x3ffff"))) (; ";")) (} "}")))) (if_statement "if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" (if "if") (parenthesized_expression "((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff))" (( "(") (binary_expression "(iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)" (parenthesized_expression "(iVar8 < iVar9 + -1)" (( "(") (binary_expression "iVar8 < iVar9 + -1" (identifier "iVar8") (< "<") (binary_expression "iVar9 + -1" (identifier "iVar9") (+ "+") (number_literal "-1"))) () ")")) (&& "&&") (parenthesized_expression "(piVar1[3] == 0xdfff)" (( "(") (binary_expression "piVar1[3] == 0xdfff" (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n      piVar1[4] = piVar1[4] | 0x3ffff;\n    }" ({ "{") (expression_statement "piVar1[4] = piVar1[4] | 0x3ffff;" (assignment_expression "piVar1[4] = piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" (identifier "piVar1") ([ "[") (number_literal "4") (] "]")) (= "=") (binary_expression "piVar1[4] | 0x3ffff" (subscript_expression "piVar1[4]" (identifier "piVar1") ([ "[") (number_literal "4") (] "]")) (| "|") (number_literal "0x3ffff"))) (; ";")) (} "}"))) (expression_statement "piVar1[1] = piVar1[1] | 0x3ffff;" (assignment_expression "piVar1[1] = piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "piVar1[1] | 0x3ffff" (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]")) (| "|") (number_literal "0x3ffff"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(param_1 + 0x20) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x20) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x20)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff;" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = 0xffffffff" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x128) < 1) {\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x128) < 1)" (( "(") (binary_expression "*(int *)(param_1 + 0x128) < 1" (pointer_expression "*(int *)(param_1 + 0x128)" (* "*") (cast_expression "(int *)(param_1 + 0x128)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x128)" (( "(") (binary_expression "param_1 + 0x128" (identifier "param_1") (+ "+") (number_literal "0x128")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\nLAB_0003c0cc:\n    FUN_0002da80(iVar7);\n    FUN_0002da80(local_6c);\n    return;\n  }" ({ "{") (labeled_statement "LAB_0003c0cc:\n    FUN_0002da80(iVar7);" (statement_identifier "LAB_0003c0cc") (: ":") (expression_statement "FUN_0002da80(iVar7);" (call_expression "FUN_0002da80(iVar7)" (identifier "FUN_0002da80") (argument_list "(iVar7)" (( "(") (identifier "iVar7") () ")"))) (; ";"))) (expression_statement "FUN_0002da80(local_6c);" (call_expression "FUN_0002da80(local_6c)" (identifier "FUN_0002da80") (argument_list "(local_6c)" (( "(") (identifier "local_6c") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "local_60 = 0x400;" (assignment_expression "local_60 = 0x400" (identifier "local_60") (= "=") (number_literal "0x400")) (; ";")) (expression_statement "local_3c = 0;" (assignment_expression "local_3c = 0" (identifier "local_3c") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0003b700:\n  iVar9 = *(int *)(param_1 + 0x10) + local_3c;" (statement_identifier "LAB_0003b700") (: ":") (expression_statement "iVar9 = *(int *)(param_1 + 0x10) + local_3c;" (assignment_expression "iVar9 = *(int *)(param_1 + 0x10) + local_3c" (identifier "iVar9") (= "=") (binary_expression "*(int *)(param_1 + 0x10) + local_3c" (pointer_expression "*(int *)(param_1 + 0x10)" (* "*") (cast_expression "(int *)(param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (identifier "local_3c"))) (; ";"))) (expression_statement "psVar10 = (short *)FUN_0003adf0(0);" (assignment_expression "psVar10 = (short *)FUN_0003adf0(0)" (identifier "psVar10") (= "=") (cast_expression "(short *)FUN_0003adf0(0)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0003adf0(0)" (identifier "FUN_0003adf0") (argument_list "(0)" (( "(") (number_literal "0") () ")"))))) (; ";")) (expression_statement "local_54 = FUN_00039860(local_3c);" (assignment_expression "local_54 = FUN_00039860(local_3c)" (identifier "local_54") (= "=") (call_expression "FUN_00039860(local_3c)" (identifier "FUN_00039860") (argument_list "(local_3c)" (( "(") (identifier "local_3c") () ")")))) (; ";")) (if_statement "if (local_54 == 0) {\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }\n  else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" (if "if") (parenthesized_expression "(local_54 == 0)" (( "(") (binary_expression "local_54 == 0" (identifier "local_54") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    local_78 = 0;\n    local_54 = *(int *)(psVar10 + 10);\n  }" ({ "{") (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" (identifier "local_78") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_54 = *(int *)(psVar10 + 10);" (assignment_expression "local_54 = *(int *)(psVar10 + 10)" (identifier "local_54") (= "=") (pointer_expression "*(int *)(psVar10 + 10)" (* "*") (cast_expression "(int *)(psVar10 + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(psVar10 + 10)" (( "(") (binary_expression "psVar10 + 10" (identifier "psVar10") (+ "+") (number_literal "10")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" (else "else") (compound_statement "{\n    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);\n  }" ({ "{") (expression_statement "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);" (assignment_expression "local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" (identifier "local_78") (= "=") (pointer_expression "*(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc)" (( "(") (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc" (binary_expression "*(int *)(param_1 + 0x10cc) + local_3c * 0x10" (pointer_expression "*(int *)(param_1 + 0x10cc)" (* "*") (cast_expression "(int *)(param_1 + 0x10cc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10cc)" (( "(") (binary_expression "param_1 + 0x10cc" (identifier "param_1") (+ "+") (number_literal "0x10cc")) () ")")))) (+ "+") (binary_expression "local_3c * 0x10" (identifier "local_3c") (* "*") (number_literal "0x10"))) (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")))) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" (identifier "iVar17") (= "=") (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "iVar8 = local_3c * 4;" (assignment_expression "iVar8 = local_3c * 4" (identifier "iVar8") (= "=") (binary_expression "local_3c * 4" (identifier "local_3c") (* "*") (number_literal "4"))) (; ";")) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" (identifier "local_7c") (= "=") (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" (* "*") (cast_expression "(short **)(*(int *)(param_1 + 0x18) + local_3c * 4)" (( "(") (type_descriptor "short **" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + local_3c * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + local_3c * 4" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (binary_expression "local_3c * 4" (identifier "local_3c") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (0 < iVar17) {\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" (if "if") (parenthesized_expression "(0 < iVar17)" (( "(") (binary_expression "0 < iVar17" (number_literal "0") (< "<") (identifier "iVar17")) () ")")) (compound_statement "{\n    local_84 = 0;\n    iVar21 = 0;\n    do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);\n    if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }\n  }" ({ "{") (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" (identifier "local_84") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" (identifier "iVar21") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    } while (local_84 < iVar17);" (do "do") (compound_statement "{\n      local_80 = local_84;\n      if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }\n      uVar15 = *(uint *)(local_54 + iVar21);\n      uVar11 = *(uint *)(local_54 + 4 + iVar21);\n      if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }\n      if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }\n      uVar16 = uVar15 & 0xffffff00;\n      if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }\n      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }\n      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;\n      if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }\n      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }\n      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }\n      if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }\n      local_84 = local_84 + 1;\n      *(uint *)(iVar7 + 4 + iVar21) = uVar11;\n      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;\n      iVar17 = *(int *)(param_1 + 300);\n      *(uint *)(iVar7 + iVar21) = uVar15;\n      iVar21 = iVar21 + 0xc;\n    }" ({ "{") (expression_statement "local_80 = local_84;" (assignment_expression "local_80 = local_84" (identifier "local_80") (= "=") (identifier "local_84")) (; ";")) (if_statement "if (local_78 != 0) {\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" (if "if") (parenthesized_expression "(local_78 != 0)" (( "(") (binary_expression "local_78 != 0" (identifier "local_78") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        local_80 = *(int *)(local_78 + local_84 * 4);\n      }" ({ "{") (expression_statement "local_80 = *(int *)(local_78 + local_84 * 4);" (assignment_expression "local_80 = *(int *)(local_78 + local_84 * 4)" (identifier "local_80") (= "=") (pointer_expression "*(int *)(local_78 + local_84 * 4)" (* "*") (cast_expression "(int *)(local_78 + local_84 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_78 + local_84 * 4)" (( "(") (binary_expression "local_78 + local_84 * 4" (identifier "local_78") (+ "+") (binary_expression "local_84 * 4" (identifier "local_84") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar15 = *(uint *)(local_54 + iVar21);" (assignment_expression "uVar15 = *(uint *)(local_54 + iVar21)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(local_54 + iVar21)" (* "*") (cast_expression "(uint *)(local_54 + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_54 + iVar21)" (( "(") (binary_expression "local_54 + iVar21" (identifier "local_54") (+ "+") (identifier "iVar21")) () ")"))))) (; ";")) (expression_statement "uVar11 = *(uint *)(local_54 + 4 + iVar21);" (assignment_expression "uVar11 = *(uint *)(local_54 + 4 + iVar21)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(local_54 + 4 + iVar21)" (* "*") (cast_expression "(uint *)(local_54 + 4 + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_54 + 4 + iVar21)" (( "(") (binary_expression "local_54 + 4 + iVar21" (binary_expression "local_54 + 4" (identifier "local_54") (+ "+") (number_literal "4")) (+ "+") (identifier "iVar21")) () ")"))))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x10d4) == 0) {\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x10d4) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x10d4) == 0" (pointer_expression "*(int *)(param_1 + 0x10d4)" (* "*") (cast_expression "(int *)(param_1 + 0x10d4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10d4)" (( "(") (binary_expression "param_1 + 0x10d4" (identifier "param_1") (+ "+") (number_literal "0x10d4")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar11 = uVar11 & 0xfffc0000 | 0x20500;\n      }" ({ "{") (expression_statement "uVar11 = uVar11 & 0xfffc0000 | 0x20500;" (assignment_expression "uVar11 = uVar11 & 0xfffc0000 | 0x20500" (identifier "uVar11") (= "=") (binary_expression "uVar11 & 0xfffc0000 | 0x20500" (binary_expression "uVar11 & 0xfffc0000" (identifier "uVar11") (& "&") (number_literal "0xfffc0000")) (| "|") (number_literal "0x20500"))) (; ";")) (} "}"))) (if_statement "if (*(int *)(param_1 + 0x1170) == 0) {\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x1170) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x1170) == 0" (pointer_expression "*(int *)(param_1 + 0x1170)" (* "*") (cast_expression "(int *)(param_1 + 0x1170)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1170)" (( "(") (binary_expression "param_1 + 0x1170" (identifier "param_1") (+ "+") (number_literal "0x1170")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }\n        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }\n      }" ({ "{") (if_statement "if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" (if "if") (parenthesized_expression "((uVar11 & 0x1ff) - 0x10 < 0xf0)" (( "(") (binary_expression "(uVar11 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 & 0x1ff)" (( "(") (binary_expression "uVar11 & 0x1ff" (identifier "uVar11") (& "&") (number_literal "0x1ff")) () ")")) (- "-") (number_literal "0x10")) (< "<") (number_literal "0xf0")) () ")")) (compound_statement "{\n          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;\n        }" ({ "{") (expression_statement "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;" (assignment_expression "uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" (identifier "uVar11") (= "=") (binary_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8" (call_expression "(uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((uint3)(uVar11 >> 8) & 0xfffffe | 1)" (( "(") (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe | 1" (binary_expression "(uint3)(uVar11 >> 8) & 0xfffffe" (call_expression "(uint3)(uVar11 >> 8)" (parenthesized_expression "(uint3)" (( "(") (identifier "uint3") () ")")) (argument_list "(uVar11 >> 8)" (( "(") (binary_expression "uVar11 >> 8" (identifier "uVar11") (>> ">>") (number_literal "8")) () ")"))) (& "&") (number_literal "0xfffffe")) (| "|") (number_literal "1")) () ")"))) (<< "<<") (number_literal "8"))) (; ";")) (} "}"))) (if_statement "if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" (if "if") (parenthesized_expression "((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0)" (( "(") (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0" (binary_expression "(uVar11 >> 9 & 0x1ff) - 0x10" (parenthesized_expression "(uVar11 >> 9 & 0x1ff)" (( "(") (binary_expression "uVar11 >> 9 & 0x1ff" (binary_expression "uVar11 >> 9" (identifier "uVar11") (>> ">>") (number_literal "9")) (& "&") (number_literal "0x1ff")) () ")")) (- "-") (number_literal "0x10")) (< "<") (number_literal "0xf0")) () ")")) (compound_statement "{\n          uVar11 = uVar11 & 0xfffc01ff | 0x20400;\n        }" ({ "{") (expression_statement "uVar11 = uVar11 & 0xfffc01ff | 0x20400;" (assignment_expression "uVar11 = uVar11 & 0xfffc01ff | 0x20400" (identifier "uVar11") (= "=") (binary_expression "uVar11 & 0xfffc01ff | 0x20400" (binary_expression "uVar11 & 0xfffc01ff" (identifier "uVar11") (& "&") (number_literal "0xfffc01ff")) (| "|") (number_literal "0x20400"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" (identifier "uVar16") (= "=") (binary_expression "uVar15 & 0xffffff00" (identifier "uVar15") (& "&") (number_literal "0xffffff00"))) (; ";")) (if_statement "if (uVar16 == 0xd900) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" (if "if") (parenthesized_expression "(uVar16 == 0xd900)" (( "(") (binary_expression "uVar16 == 0xd900" (identifier "uVar16") (== "==") (number_literal "0xd900")) () ")")) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);\n      }" ({ "{") (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0xc10")) (+ "+") (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" (( "(") (binary_expression "uVar15 & 0xff" (identifier "uVar15") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")) (else_clause "else if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" (else "else") (if_statement "if (uVar16 == 0xda00) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }\n      else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" (if "if") (parenthesized_expression "(uVar16 == 0xda00)" (( "(") (binary_expression "uVar16 == 0xda00" (identifier "uVar16") (== "==") (number_literal "0xda00")) () ")")) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);\n      }" ({ "{") (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" (( "(") (binary_expression "uVar15 & 0xff" (identifier "uVar15") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}")) (else_clause "else if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" (else "else") (if_statement "if (uVar16 == 0xd800) {\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" (if "if") (parenthesized_expression "(uVar16 == 0xd800)" (( "(") (binary_expression "uVar16 == 0xd800" (identifier "uVar16") (== "==") (number_literal "0xd800")) () ")")) (compound_statement "{\n        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);\n      }" ({ "{") (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0x410")) (+ "+") (binary_expression "(uVar15 & 0xff) * 4" (parenthesized_expression "(uVar15 & 0xff)" (( "(") (binary_expression "uVar15 & 0xff" (identifier "uVar15") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))))))) (if_statement "if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {\n        uVar11 = uVar11 | 0x400000;\n      }" (if "if") (parenthesized_expression "((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff))" (( "(") (binary_expression "(local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" (parenthesized_expression "(local_84 < iVar17 + -1)" (( "(") (binary_expression "local_84 < iVar17 + -1" (identifier "local_84") (< "<") (binary_expression "iVar17 + -1" (identifier "iVar17") (+ "+") (number_literal "-1"))) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(local_54 + 0xc + iVar21) == 0xdfff)" (( "(") (binary_expression "*(int *)(local_54 + 0xc + iVar21) == 0xdfff" (pointer_expression "*(int *)(local_54 + 0xc + iVar21)" (* "*") (cast_expression "(int *)(local_54 + 0xc + iVar21)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_54 + 0xc + iVar21)" (( "(") (binary_expression "local_54 + 0xc + iVar21" (binary_expression "local_54 + 0xc" (identifier "local_54") (+ "+") (number_literal "0xc")) (+ "+") (identifier "iVar21")) () ")")))) (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n        uVar11 = uVar11 | 0x400000;\n      }" ({ "{") (expression_statement "uVar11 = uVar11 | 0x400000;" (assignment_expression "uVar11 = uVar11 | 0x400000" (identifier "uVar11") (= "=") (binary_expression "uVar11 | 0x400000" (identifier "uVar11") (| "|") (number_literal "0x400000"))) (; ";")) (} "}"))) (expression_statement "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;" (assignment_expression "uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" (identifier "uVar11") (= "=") (binary_expression "uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" (identifier "uVar11") (^ "^") (binary_expression "(uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14" (call_expression "(uint)((iVar2 == 0) != (iVar3 == 0))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((iVar2 == 0) != (iVar3 == 0))" (( "(") (binary_expression "(iVar2 == 0) != (iVar3 == 0)" (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (!= "!=") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")"))) () ")"))) (<< "<<") (number_literal "0x14")))) (; ";")) (if_statement "if (*(int *)(param_1 + 0xe48) - 2U < 2) {\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xe48) - 2U < 2)" (( "(") (binary_expression "*(int *)(param_1 + 0xe48) - 2U < 2" (binary_expression "*(int *)(param_1 + 0xe48) - 2U" (pointer_expression "*(int *)(param_1 + 0xe48)" (* "*") (cast_expression "(int *)(param_1 + 0xe48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe48)" (( "(") (binary_expression "param_1 + 0xe48" (identifier "param_1") (+ "+") (number_literal "0xe48")) () ")")))) (- "-") (number_literal "2U")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n        iVar17 = *(int *)(param_1 + 0xe54);\n        if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }\n      }" ({ "{") (expression_statement "iVar17 = *(int *)(param_1 + 0xe54);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe54)" (identifier "iVar17") (= "=") (pointer_expression "*(int *)(param_1 + 0xe54)" (* "*") (cast_expression "(int *)(param_1 + 0xe54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe54)" (( "(") (binary_expression "param_1 + 0xe54" (identifier "param_1") (+ "+") (number_literal "0xe54")) () ")"))))) (; ";")) (if_statement "if (*(int *)(param_1 + 0xe4c) == 0) {\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }\n        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0xe4c) == 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xe4c) == 0" (pointer_expression "*(int *)(param_1 + 0xe4c)" (* "*") (cast_expression "(int *)(param_1 + 0xe4c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe4c)" (( "(") (binary_expression "param_1 + 0xe4c" (identifier "param_1") (+ "+") (number_literal "0xe4c")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }\n        }" ({ "{") (if_statement "if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" (if "if") (parenthesized_expression "((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))))" (( "(") (binary_expression "(iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" (parenthesized_expression "(iVar17 < iVar9)" (( "(") (binary_expression "iVar17 < iVar9" (identifier "iVar17") (< "<") (identifier "iVar9")) () ")")) (|| "||") (parenthesized_expression "((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))" (( "(") (parenthesized_expression "(iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80))" (( "(") (binary_expression "iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)" (binary_expression "iVar9 == iVar17" (identifier "iVar9") (== "==") (identifier "iVar17")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" (( "(") (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" (* "*") (cast_expression "(int *)(param_1 + 0xe58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe58)" (( "(") (binary_expression "param_1 + 0xe58" (identifier "param_1") (+ "+") (number_literal "0xe58")) () ")")))) (<= "<=") (identifier "local_80")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;\n            if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }\n          }" ({ "{") (if_statement "if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;" (if "if") (parenthesized_expression "(iVar9 < *(int *)(param_1 + 0xe5c))" (( "(") (binary_expression "iVar9 < *(int *)(param_1 + 0xe5c)" (identifier "iVar9") (< "<") (pointer_expression "*(int *)(param_1 + 0xe5c)" (* "*") (cast_expression "(int *)(param_1 + 0xe5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe5c)" (( "(") (binary_expression "param_1 + 0xe5c" (identifier "param_1") (+ "+") (number_literal "0xe5c")) () ")"))))) () ")")) (goto_statement "goto LAB_0003b988;" (goto "goto") (statement_identifier "LAB_0003b988") (; ";"))) (if_statement "if (iVar9 == *(int *)(param_1 + 0xe5c)) {\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" (if "if") (parenthesized_expression "(iVar9 == *(int *)(param_1 + 0xe5c))" (( "(") (binary_expression "iVar9 == *(int *)(param_1 + 0xe5c)" (identifier "iVar9") (== "==") (pointer_expression "*(int *)(param_1 + 0xe5c)" (* "*") (cast_expression "(int *)(param_1 + 0xe5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe5c)" (( "(") (binary_expression "param_1 + 0xe5c" (identifier "param_1") (+ "+") (number_literal "0xe5c")) () ")"))))) () ")")) (compound_statement "{\n              iVar17 = *(int *)(param_1 + 0xe60);\n              goto joined_r0x0003ba86;\n            }" ({ "{") (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" (identifier "iVar17") (= "=") (pointer_expression "*(int *)(param_1 + 0xe60)" (* "*") (cast_expression "(int *)(param_1 + 0xe60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe60)" (( "(") (binary_expression "param_1 + 0xe60" (identifier "param_1") (+ "+") (number_literal "0xe60")) () ")"))))) (; ";")) (goto_statement "goto joined_r0x0003ba86;" (goto "goto") (statement_identifier "joined_r0x0003ba86") (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" (else "else") (if_statement "if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))) {\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" (if "if") (parenthesized_expression "(((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c)))" (( "(") (binary_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&\n                (iVar9 <= *(int *)(param_1 + 0xe5c))" (parenthesized_expression "((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80))" (( "(") (binary_expression "(iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)" (parenthesized_expression "(iVar17 <= iVar9)" (( "(") (binary_expression "iVar17 <= iVar9" (identifier "iVar17") (<= "<=") (identifier "iVar9")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0xe58) <= local_80)" (( "(") (binary_expression "*(int *)(param_1 + 0xe58) <= local_80" (pointer_expression "*(int *)(param_1 + 0xe58)" (* "*") (cast_expression "(int *)(param_1 + 0xe58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe58)" (( "(") (binary_expression "param_1 + 0xe58" (identifier "param_1") (+ "+") (number_literal "0xe58")) () ")")))) (<= "<=") (identifier "local_80")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(iVar9 <= *(int *)(param_1 + 0xe5c))" (( "(") (binary_expression "iVar9 <= *(int *)(param_1 + 0xe5c)" (identifier "iVar9") (<= "<=") (pointer_expression "*(int *)(param_1 + 0xe5c)" (* "*") (cast_expression "(int *)(param_1 + 0xe5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe5c)" (( "(") (binary_expression "param_1 + 0xe5c" (identifier "param_1") (+ "+") (number_literal "0xe5c")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n          iVar17 = *(int *)(param_1 + 0xe60);\njoined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }\n        }" ({ "{") (expression_statement "iVar17 = *(int *)(param_1 + 0xe60);" (assignment_expression "iVar17 = *(int *)(param_1 + 0xe60)" (identifier "iVar17") (= "=") (pointer_expression "*(int *)(param_1 + 0xe60)" (* "*") (cast_expression "(int *)(param_1 + 0xe60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe60)" (( "(") (binary_expression "param_1 + 0xe60" (identifier "param_1") (+ "+") (number_literal "0xe60")) () ")"))))) (; ";")) (labeled_statement "joined_r0x0003ba86:\n          if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" (statement_identifier "joined_r0x0003ba86") (: ":") (if_statement "if (local_80 < iVar17) {\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" (if "if") (parenthesized_expression "(local_80 < iVar17)" (( "(") (binary_expression "local_80 < iVar17" (identifier "local_80") (< "<") (identifier "iVar17")) () ")")) (compound_statement "{\nLAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;\n          }" ({ "{") (labeled_statement "LAB_0003b988:\n            uVar11 = uVar11 ^ 0x100000;" (statement_identifier "LAB_0003b988") (: ":") (expression_statement "uVar11 = uVar11 ^ 0x100000;" (assignment_expression "uVar11 = uVar11 ^ 0x100000" (identifier "uVar11") (= "=") (binary_expression "uVar11 ^ 0x100000" (identifier "uVar11") (^ "^") (number_literal "0x100000"))) (; ";"))) (} "}")))) (} "}"))))) (} "}"))) (if_statement "if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" (if "if") (parenthesized_expression "((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0))" (( "(") (binary_expression "(*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0xc4) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xc4) != 0" (pointer_expression "*(int *)(param_1 + 0xc4)" (* "*") (cast_expression "(int *)(param_1 + 0xc4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc4)" (( "(") (binary_expression "param_1 + 0xc4" (identifier "param_1") (+ "+") (number_literal "0xc4")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((uVar11 & 0x200000) != 0)" (( "(") (binary_expression "(uVar11 & 0x200000) != 0" (parenthesized_expression "(uVar11 & 0x200000)" (( "(") (binary_expression "uVar11 & 0x200000" (identifier "uVar11") (& "&") (number_literal "0x200000")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }\n        uVar11 = uVar11 & 0xffdfffff;\n      }" ({ "{") (if_statement "if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" (if "if") (parenthesized_expression "((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0))" (( "(") (binary_expression "(*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)" (parenthesized_expression "(*(int *)(param_1 + 0x134) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x134) != 0" (pointer_expression "*(int *)(param_1 + 0x134)" (* "*") (cast_expression "(int *)(param_1 + 0x134)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x134)" (( "(") (binary_expression "param_1 + 0x134" (identifier "param_1") (+ "+") (number_literal "0x134")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(param_1 + 0xc0) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0xc0) != 0" (pointer_expression "*(int *)(param_1 + 0xc0)" (* "*") (cast_expression "(int *)(param_1 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc0)" (( "(") (binary_expression "param_1 + 0xc0" (identifier "param_1") (+ "+") (number_literal "0xc0")) () ")")))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);\n        }" ({ "{") (expression_statement "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);" (assignment_expression "uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x490)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x490)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0x490" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0x490")) () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar11 = uVar11 & 0xffdfffff;" (assignment_expression "uVar11 = uVar11 & 0xffdfffff" (identifier "uVar11") (= "=") (binary_expression "uVar11 & 0xffdfffff" (identifier "uVar11") (& "&") (number_literal "0xffdfffff"))) (; ";")) (} "}"))) (if_statement "if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))\n      {\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }\n      else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" (if "if") (parenthesized_expression "((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))" (( "(") (binary_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&\n         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" (parenthesized_expression "(*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15)" (( "(") (binary_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15" (pointer_expression "*(uint *)(*(int *)(local_7c + 10) + iVar21)" (* "*") (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" (( "(") (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" (* "*") (cast_expression "(int *)(local_7c + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_7c + 10)" (( "(") (binary_expression "local_7c + 10" (identifier "local_7c") (+ "+") (number_literal "10")) () ")")))) (+ "+") (identifier "iVar21")) () ")")))) (== "==") (identifier "uVar15")) () ")")) (&& "&&") (parenthesized_expression "(uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11)" (( "(") (comma_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11" (assignment_expression "uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" (identifier "uVar16") (= "=") (subscript_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))[1]" (parenthesized_expression "((uint *)(*(int *)(local_7c + 10) + iVar21))" (( "(") (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(local_7c + 10) + iVar21)" (( "(") (binary_expression "*(int *)(local_7c + 10) + iVar21" (pointer_expression "*(int *)(local_7c + 10)" (* "*") (cast_expression "(int *)(local_7c + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_7c + 10)" (( "(") (binary_expression "local_7c + 10" (identifier "local_7c") (+ "+") (number_literal "10")) () ")")))) (+ "+") (identifier "iVar21")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (, ",") (binary_expression "(uVar16 & 0xf7fffff) == uVar11" (parenthesized_expression "(uVar16 & 0xf7fffff)" (( "(") (binary_expression "uVar16 & 0xf7fffff" (identifier "uVar16") (& "&") (number_literal "0xf7fffff")) () ")")) (== "==") (identifier "uVar11"))) () ")"))) () ")")) (compound_statement "{\n        if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }\n      }" ({ "{") (if_statement "if ((uVar16 & 0x800000) != 0) {\n          uVar11 = uVar11 | 0x800000;\n        }" (if "if") (parenthesized_expression "((uVar16 & 0x800000) != 0)" (( "(") (binary_expression "(uVar16 & 0x800000) != 0" (parenthesized_expression "(uVar16 & 0x800000)" (( "(") (binary_expression "uVar16 & 0x800000" (identifier "uVar16") (& "&") (number_literal "0x800000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar11 = uVar11 | 0x800000;\n        }" ({ "{") (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" (identifier "uVar11") (= "=") (binary_expression "uVar11 | 0x800000" (identifier "uVar11") (| "|") (number_literal "0x800000"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" (else "else") (if_statement "if ((uVar11 & 0x400000) == 0) {\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" (if "if") (parenthesized_expression "((uVar11 & 0x400000) == 0)" (( "(") (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" (( "(") (binary_expression "uVar11 & 0x400000" (identifier "uVar11") (& "&") (number_literal "0x400000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar17 = FUN_0005a120(extraout_EDX,uVar15);\n        if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }\n      }" ({ "{") (expression_statement "iVar17 = FUN_0005a120(extraout_EDX,uVar15);" (assignment_expression "iVar17 = FUN_0005a120(extraout_EDX,uVar15)" (identifier "iVar17") (= "=") (call_expression "FUN_0005a120(extraout_EDX,uVar15)" (identifier "FUN_0005a120") (argument_list "(extraout_EDX,uVar15)" (( "(") (identifier "extraout_EDX") (, ",") (identifier "uVar15") () ")")))) (; ";")) (if_statement "if (iVar17 == 2) {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }\n        else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" (if "if") (parenthesized_expression "(iVar17 == 2)" (( "(") (binary_expression "iVar17 == 2" (identifier "iVar17") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n          uVar11 = uVar11 | 0x800000;\n        }" ({ "{") (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" (identifier "local_7c") (= "=") (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "short **" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")"))))) (; ";")) (expression_statement "uVar11 = uVar11 | 0x800000;" (assignment_expression "uVar11 = uVar11 | 0x800000" (identifier "uVar11") (= "=") (binary_expression "uVar11 | 0x800000" (identifier "uVar11") (| "|") (number_literal "0x800000"))) (; ";")) (} "}")) (else_clause "else {\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" (else "else") (compound_statement "{\n          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        }" ({ "{") (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" (identifier "local_7c") (= "=") (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "short **" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")"))))) (; ";")) (} "}")))) (} "}"))))) (if_statement "if ((local_34 == local_84) && (iVar20 == local_3c)) {\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" (if "if") (parenthesized_expression "((local_34 == local_84) && (iVar20 == local_3c))" (( "(") (binary_expression "(local_34 == local_84) && (iVar20 == local_3c)" (parenthesized_expression "(local_34 == local_84)" (( "(") (binary_expression "local_34 == local_84" (identifier "local_34") (== "==") (identifier "local_84")) () ")")) (&& "&&") (parenthesized_expression "(iVar20 == local_3c)" (( "(") (binary_expression "iVar20 == local_3c" (identifier "iVar20") (== "==") (identifier "local_3c")) () ")"))) () ")")) (compound_statement "{\n        *(int *)(param_1 + 0x1c) = local_84;\n        uVar11 = uVar11 | local_20;\n        *(uint *)(param_1 + 0x24) = local_20;\n        *(int *)(param_1 + 0x20) = local_3c;\n      }" ({ "{") (expression_statement "*(int *)(param_1 + 0x1c) = local_84;" (assignment_expression "*(int *)(param_1 + 0x1c) = local_84" (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (identifier "local_84")) (; ";")) (expression_statement "uVar11 = uVar11 | local_20;" (assignment_expression "uVar11 = uVar11 | local_20" (identifier "uVar11") (= "=") (binary_expression "uVar11 | local_20" (identifier "uVar11") (| "|") (identifier "local_20"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x24) = local_20;" (assignment_expression "*(uint *)(param_1 + 0x24) = local_20" (pointer_expression "*(uint *)(param_1 + 0x24)" (* "*") (cast_expression "(uint *)(param_1 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (identifier "local_20")) (; ";")) (expression_statement "*(int *)(param_1 + 0x20) = local_3c;" (assignment_expression "*(int *)(param_1 + 0x20) = local_3c" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "local_3c")) (; ";")) (} "}"))) (expression_statement "local_84 = local_84 + 1;" (assignment_expression "local_84 = local_84 + 1" (identifier "local_84") (= "=") (binary_expression "local_84 + 1" (identifier "local_84") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)(iVar7 + 4 + iVar21) = uVar11;" (assignment_expression "*(uint *)(iVar7 + 4 + iVar21) = uVar11" (pointer_expression "*(uint *)(iVar7 + 4 + iVar21)" (* "*") (cast_expression "(uint *)(iVar7 + 4 + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 4 + iVar21)" (( "(") (binary_expression "iVar7 + 4 + iVar21" (binary_expression "iVar7 + 4" (identifier "iVar7") (+ "+") (number_literal "4")) (+ "+") (identifier "iVar21")) () ")")))) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "*(undefined4 *)(iVar7 + 8 + iVar21) = 0;" (assignment_expression "*(undefined4 *)(iVar7 + 8 + iVar21) = 0" (pointer_expression "*(undefined4 *)(iVar7 + 8 + iVar21)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 8 + iVar21)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 8 + iVar21)" (( "(") (binary_expression "iVar7 + 8 + iVar21" (binary_expression "iVar7 + 8" (identifier "iVar7") (+ "+") (number_literal "8")) (+ "+") (identifier "iVar21")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar17 = *(int *)(param_1 + 300);" (assignment_expression "iVar17 = *(int *)(param_1 + 300)" (identifier "iVar17") (= "=") (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "*(uint *)(iVar7 + iVar21) = uVar15;" (assignment_expression "*(uint *)(iVar7 + iVar21) = uVar15" (pointer_expression "*(uint *)(iVar7 + iVar21)" (* "*") (cast_expression "(uint *)(iVar7 + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + iVar21)" (( "(") (binary_expression "iVar7 + iVar21" (identifier "iVar7") (+ "+") (identifier "iVar21")) () ")")))) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "iVar21 = iVar21 + 0xc;" (assignment_expression "iVar21 = iVar21 + 0xc" (identifier "iVar21") (= "=") (binary_expression "iVar21 + 0xc" (identifier "iVar21") (+ "+") (number_literal "0xc"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_84 < iVar17)" (( "(") (binary_expression "local_84 < iVar17" (identifier "local_84") (< "<") (identifier "iVar17")) () ")")) (; ";")) (if_statement "if (0 < iVar17) {\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" (if "if") (parenthesized_expression "(0 < iVar17)" (( "(") (binary_expression "0 < iVar17" (number_literal "0") (< "<") (identifier "iVar17")) () ")")) (compound_statement "{\n      iVar9 = *(int *)(local_7c + 10);\n      bVar4 = false;\n      iVar18 = iVar7 - iVar9;\n      puVar13 = (uint *)(iVar9 + 4);\n      local_84 = 0;\n      iVar21 = 0;\n      do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);\nLAB_0003bb38:\n      local_40 = 0;\n      bVar4 = false;\n      bVar24 = *local_7c != *psVar10;\n      local_58 = 0;\n      local_4c = 0;\n      iVar9 = 0;\n      *local_7c = *psVar10;\n      local_80 = 0;\n      bVar23 = bVar24;\n      do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );\n    }" ({ "{") (expression_statement "iVar9 = *(int *)(local_7c + 10);" (assignment_expression "iVar9 = *(int *)(local_7c + 10)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(local_7c + 10)" (* "*") (cast_expression "(int *)(local_7c + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_7c + 10)" (( "(") (binary_expression "local_7c + 10" (identifier "local_7c") (+ "+") (number_literal "10")) () ")"))))) (; ";")) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (expression_statement "iVar18 = iVar7 - iVar9;" (assignment_expression "iVar18 = iVar7 - iVar9" (identifier "iVar18") (= "=") (binary_expression "iVar7 - iVar9" (identifier "iVar7") (- "-") (identifier "iVar9"))) (; ";")) (expression_statement "puVar13 = (uint *)(iVar9 + 4);" (assignment_expression "puVar13 = (uint *)(iVar9 + 4)" (identifier "puVar13") (= "=") (cast_expression "(uint *)(iVar9 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 4)" (( "(") (binary_expression "iVar9 + 4" (identifier "iVar9") (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "local_84 = 0;" (assignment_expression "local_84 = 0" (identifier "local_84") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" (identifier "iVar21") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      } while (iVar17 != iVar22 + 1);" (do "do") (compound_statement "{\n        while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }\n        local_84 = iVar22;\n        if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;\n        puVar13 = puVar13 + 3;\n        iVar21 = iVar22 + 1;\n      }" ({ "{") (while_statement "while( true ) {\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          iVar22 = iVar21;\n          uVar15 = *puVar13;\n          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);\n          if ((int)uVar15 < 0) break;\n          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }\n          puVar13 = puVar13 + 3;\n          iVar21 = iVar22 + 1;\n          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;\n        }" ({ "{") (expression_statement "iVar22 = iVar21;" (assignment_expression "iVar22 = iVar21" (identifier "iVar22") (= "=") (identifier "iVar21")) (; ";")) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" (identifier "uVar15") (= "=") (pointer_expression "*puVar13" (* "*") (identifier "puVar13"))) (; ";")) (expression_statement "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);" (assignment_expression "uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(iVar18 + -4 + (int)puVar13)" (* "*") (cast_expression "(uint *)(iVar18 + -4 + (int)puVar13)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar18 + -4 + (int)puVar13)" (( "(") (binary_expression "iVar18 + -4 + (int)puVar13" (binary_expression "iVar18 + -4" (identifier "iVar18") (+ "+") (number_literal "-4")) (+ "+") (cast_expression "(int)puVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar13"))) () ")"))))) (; ";")) (if_statement "if ((int)uVar15 < 0) break;" (if "if") (parenthesized_expression "((int)uVar15 < 0)" (( "(") (binary_expression "(int)uVar15 < 0" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))\n          {\n            if (bVar4) goto LAB_0003bae8;\n          }\n          else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" (if "if") (parenthesized_expression "((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))" (( "(") (binary_expression "(uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" (parenthesized_expression "(uVar11 == puVar13[-1])" (( "(") (binary_expression "uVar11 == puVar13[-1]" (identifier "uVar11") (== "==") (subscript_expression "puVar13[-1]" (identifier "puVar13") ([ "[") (number_literal "-1") (] "]"))) () ")")) (&& "&&") (parenthesized_expression "((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13))" (( "(") (binary_expression "(uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)" (parenthesized_expression "(uVar15 & 0xfffffff)" (( "(") (binary_expression "uVar15 & 0xfffffff" (identifier "uVar15") (& "&") (number_literal "0xfffffff")) () ")")) (== "==") (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" (* "*") (cast_expression "(uint *)(iVar18 + (int)puVar13)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar18 + (int)puVar13)" (( "(") (binary_expression "iVar18 + (int)puVar13" (identifier "iVar18") (+ "+") (cast_expression "(int)puVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar13"))) () ")"))))) () ")"))) () ")")) (compound_statement "{\n            if (bVar4) goto LAB_0003bae8;\n          }" ({ "{") (if_statement "if (bVar4) goto LAB_0003bae8;" (if "if") (parenthesized_expression "(bVar4)" (( "(") (identifier "bVar4") () ")")) (goto_statement "goto LAB_0003bae8;" (goto "goto") (statement_identifier "LAB_0003bae8") (; ";"))) (} "}")) (else_clause "else {\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" (else "else") (compound_statement "{\n            if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }\nLAB_0003bae8:\n            bVar4 = true;\n            *puVar13 = uVar15 | 0x3ffff;\n          }" ({ "{") (if_statement "if ((!bVar4) && (local_84 < iVar22)) {\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" (if "if") (parenthesized_expression "((!bVar4) && (local_84 < iVar22))" (( "(") (binary_expression "(!bVar4) && (local_84 < iVar22)" (parenthesized_expression "(!bVar4)" (( "(") (unary_expression "!bVar4" (! "!") (identifier "bVar4")) () ")")) (&& "&&") (parenthesized_expression "(local_84 < iVar22)" (( "(") (binary_expression "local_84 < iVar22" (identifier "local_84") (< "<") (identifier "iVar22")) () ")"))) () ")")) (compound_statement "{\n              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);\n              do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);\n              uVar15 = *puVar13;\n            }" ({ "{") (expression_statement "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);" (assignment_expression "puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc)" (identifier "puVar14") (= "=") (cast_expression "(uint *)(iVar9 + 4 + local_84 * 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 4 + local_84 * 0xc)" (( "(") (binary_expression "iVar9 + 4 + local_84 * 0xc" (binary_expression "iVar9 + 4" (identifier "iVar9") (+ "+") (number_literal "4")) (+ "+") (binary_expression "local_84 * 0xc" (identifier "local_84") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (do_statement "do {\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              } while (puVar13 != puVar14);" (do "do") (compound_statement "{\n                *puVar14 = *puVar14 | 0x3ffff;\n                puVar14 = puVar14 + 3;\n              }" ({ "{") (expression_statement "*puVar14 = *puVar14 | 0x3ffff;" (assignment_expression "*puVar14 = *puVar14 | 0x3ffff" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (binary_expression "*puVar14 | 0x3ffff" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (| "|") (number_literal "0x3ffff"))) (; ";")) (expression_statement "puVar14 = puVar14 + 3;" (assignment_expression "puVar14 = puVar14 + 3" (identifier "puVar14") (= "=") (binary_expression "puVar14 + 3" (identifier "puVar14") (+ "+") (number_literal "3"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar13 != puVar14)" (( "(") (binary_expression "puVar13 != puVar14" (identifier "puVar13") (!= "!=") (identifier "puVar14")) () ")")) (; ";")) (expression_statement "uVar15 = *puVar13;" (assignment_expression "uVar15 = *puVar13" (identifier "uVar15") (= "=") (pointer_expression "*puVar13" (* "*") (identifier "puVar13"))) (; ";")) (} "}"))) (labeled_statement "LAB_0003bae8:\n            bVar4 = true;" (statement_identifier "LAB_0003bae8") (: ":") (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";"))) (expression_statement "*puVar13 = uVar15 | 0x3ffff;" (assignment_expression "*puVar13 = uVar15 | 0x3ffff" (pointer_expression "*puVar13" (* "*") (identifier "puVar13")) (= "=") (binary_expression "uVar15 | 0x3ffff" (identifier "uVar15") (| "|") (number_literal "0x3ffff"))) (; ";")) (} "}")))) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" (identifier "puVar13") (= "=") (binary_expression "puVar13 + 3" (identifier "puVar13") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" (identifier "iVar21") (= "=") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar17 == iVar22 + 1) goto LAB_0003bb38;" (if "if") (parenthesized_expression "(iVar17 == iVar22 + 1)" (( "(") (binary_expression "iVar17 == iVar22 + 1" (identifier "iVar17") (== "==") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) () ")")) (goto_statement "goto LAB_0003bb38;" (goto "goto") (statement_identifier "LAB_0003bb38") (; ";"))) (} "}"))) (expression_statement "local_84 = iVar22;" (assignment_expression "local_84 = iVar22" (identifier "local_84") (= "=") (identifier "iVar22")) (; ";")) (if_statement "if ((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))\n        goto LAB_0003bae8;" (if "if") (parenthesized_expression "((uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))" (( "(") (binary_expression "(uVar11 != puVar13[-1]) ||\n           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" (parenthesized_expression "(uVar11 != puVar13[-1])" (( "(") (binary_expression "uVar11 != puVar13[-1]" (identifier "uVar11") (!= "!=") (subscript_expression "puVar13[-1]" (identifier "puVar13") ([ "[") (number_literal "-1") (] "]"))) () ")")) (|| "||") (parenthesized_expression "(bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff))" (( "(") (comma_expression "bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (, ",") (binary_expression "*(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)" (pointer_expression "*(uint *)(iVar18 + (int)puVar13)" (* "*") (cast_expression "(uint *)(iVar18 + (int)puVar13)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar18 + (int)puVar13)" (( "(") (binary_expression "iVar18 + (int)puVar13" (identifier "iVar18") (+ "+") (cast_expression "(int)puVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar13"))) () ")")))) (!= "!=") (parenthesized_expression "(uVar15 & 0xfffffff)" (( "(") (binary_expression "uVar15 & 0xfffffff" (identifier "uVar15") (& "&") (number_literal "0xfffffff")) () ")")))) () ")"))) () ")")) (goto_statement "goto LAB_0003bae8;" (goto "goto") (statement_identifier "LAB_0003bae8") (; ";"))) (expression_statement "puVar13 = puVar13 + 3;" (assignment_expression "puVar13 = puVar13 + 3" (identifier "puVar13") (= "=") (binary_expression "puVar13 + 3" (identifier "puVar13") (+ "+") (number_literal "3"))) (; ";")) (expression_statement "iVar21 = iVar22 + 1;" (assignment_expression "iVar21 = iVar22 + 1" (identifier "iVar21") (= "=") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar17 != iVar22 + 1)" (( "(") (binary_expression "iVar17 != iVar22 + 1" (identifier "iVar17") (!= "!=") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) () ")")) (; ";")) (labeled_statement "LAB_0003bb38:\n      local_40 = 0;" (statement_identifier "LAB_0003bb38") (: ":") (expression_statement "local_40 = 0;" (assignment_expression "local_40 = 0" (identifier "local_40") (= "=") (number_literal "0")) (; ";"))) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (expression_statement "bVar24 = *local_7c != *psVar10;" (assignment_expression "bVar24 = *local_7c != *psVar10" (identifier "bVar24") (= "=") (binary_expression "*local_7c != *psVar10" (pointer_expression "*local_7c" (* "*") (identifier "local_7c")) (!= "!=") (pointer_expression "*psVar10" (* "*") (identifier "psVar10")))) (; ";")) (expression_statement "local_58 = 0;" (assignment_expression "local_58 = 0" (identifier "local_58") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_4c = 0;" (assignment_expression "local_4c = 0" (identifier "local_4c") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" (identifier "iVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" (* "*") (identifier "local_7c")) (= "=") (pointer_expression "*psVar10" (* "*") (identifier "psVar10"))) (; ";")) (expression_statement "local_80 = 0;" (assignment_expression "local_80 = 0" (identifier "local_80") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar23 = bVar24;" (assignment_expression "bVar23 = bVar24" (identifier "bVar23") (= "=") (identifier "bVar24")) (; ";")) (do_statement "do {\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      } while( true );" (do "do") (compound_statement "{\n        iVar17 = local_80 * 0xc;\n        puVar13 = (uint *)(local_54 + iVar17);\n        uVar15 = *(uint *)(iVar7 + iVar17);\n        uVar11 = ((uint *)(iVar7 + iVar17))[1];\n        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);\n        bVar6 = true;\n        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }\n        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }\n        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;\n        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }\n        iVar9 = iVar18;\n        if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }\n        *(uint *)(local_6c + iVar21) = uVar15;\n        uVar16 = puVar13[2];\n        if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }\n        if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }\n        iVar17 = local_80 + 1;\n        if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);\n        local_80 = iVar17;\n        bVar23 = bVar6;\n      }" ({ "{") (expression_statement "iVar17 = local_80 * 0xc;" (assignment_expression "iVar17 = local_80 * 0xc" (identifier "iVar17") (= "=") (binary_expression "local_80 * 0xc" (identifier "local_80") (* "*") (number_literal "0xc"))) (; ";")) (expression_statement "puVar13 = (uint *)(local_54 + iVar17);" (assignment_expression "puVar13 = (uint *)(local_54 + iVar17)" (identifier "puVar13") (= "=") (cast_expression "(uint *)(local_54 + iVar17)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_54 + iVar17)" (( "(") (binary_expression "local_54 + iVar17" (identifier "local_54") (+ "+") (identifier "iVar17")) () ")")))) (; ";")) (expression_statement "uVar15 = *(uint *)(iVar7 + iVar17);" (assignment_expression "uVar15 = *(uint *)(iVar7 + iVar17)" (identifier "uVar15") (= "=") (pointer_expression "*(uint *)(iVar7 + iVar17)" (* "*") (cast_expression "(uint *)(iVar7 + iVar17)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + iVar17)" (( "(") (binary_expression "iVar7 + iVar17" (identifier "iVar7") (+ "+") (identifier "iVar17")) () ")"))))) (; ";")) (expression_statement "uVar11 = ((uint *)(iVar7 + iVar17))[1];" (assignment_expression "uVar11 = ((uint *)(iVar7 + iVar17))[1]" (identifier "uVar11") (= "=") (subscript_expression "((uint *)(iVar7 + iVar17))[1]" (parenthesized_expression "((uint *)(iVar7 + iVar17))" (( "(") (cast_expression "(uint *)(iVar7 + iVar17)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + iVar17)" (( "(") (binary_expression "iVar7 + iVar17" (identifier "iVar7") (+ "+") (identifier "iVar17")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);" (assignment_expression "puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17)" (identifier "puVar14") (= "=") (cast_expression "(uint *)(*(int *)(local_7c + 10) + iVar17)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(local_7c + 10) + iVar17)" (( "(") (binary_expression "*(int *)(local_7c + 10) + iVar17" (pointer_expression "*(int *)(local_7c + 10)" (* "*") (cast_expression "(int *)(local_7c + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_7c + 10)" (( "(") (binary_expression "local_7c + 10" (identifier "local_7c") (+ "+") (number_literal "10")) () ")")))) (+ "+") (identifier "iVar17")) () ")")))) (; ";")) (expression_statement "bVar6 = true;" (assignment_expression "bVar6 = true" (identifier "bVar6") (= "=") (true "true")) (; ";")) (if_statement "if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {\n          bVar6 = bVar23;\n        }" (if "if") (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0x400000) == 0)" (( "(") (binary_expression "((uVar11 ^ puVar14[1]) & 0x400000) == 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0x400000)" (( "(") (binary_expression "(uVar11 ^ puVar14[1]) & 0x400000" (parenthesized_expression "(uVar11 ^ puVar14[1])" (( "(") (binary_expression "uVar11 ^ puVar14[1]" (identifier "uVar11") (^ "^") (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]"))) () ")")) (& "&") (number_literal "0x400000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          bVar6 = bVar23;\n        }" ({ "{") (expression_statement "bVar6 = bVar23;" (assignment_expression "bVar6 = bVar23" (identifier "bVar6") (= "=") (identifier "bVar23")) (; ";")) (} "}"))) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {\n          uVar16 = uVar15 & 0xffffff00;\n        }" (if "if") (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000))" (( "(") (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" (( "(") (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" (( "(") (binary_expression "uVar15 & 0xfffffc00" (identifier "uVar15") (& "&") (number_literal "0xfffffc00")) () ")")) (== "==") (number_literal "0xd800")) () ")")) (|| "||") (parenthesized_expression "(uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (( "(") (comma_expression "uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "uVar16 = 0" (identifier "uVar16") (= "=") (number_literal "0")) (, ",") (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" (( "(") (binary_expression "uVar15 & 0xfffffe00" (identifier "uVar15") (& "&") (number_literal "0xfffffe00")) () ")")) (== "==") (number_literal "0xf000"))) () ")"))) () ")")) (compound_statement "{\n          uVar16 = uVar15 & 0xffffff00;\n        }" ({ "{") (expression_statement "uVar16 = uVar15 & 0xffffff00;" (assignment_expression "uVar16 = uVar15 & 0xffffff00" (identifier "uVar16") (= "=") (binary_expression "uVar15 & 0xffffff00" (identifier "uVar15") (& "&") (number_literal "0xffffff00"))) (; ";")) (} "}"))) (expression_statement "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;" (assignment_expression "bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (identifier "bVar23") (= "=") (binary_expression "uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (binary_expression "uVar16 != local_58" (identifier "uVar16") (!= "!=") (identifier "local_58")) (|| "||") (binary_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0" (parenthesized_expression "(*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c))" (( "(") (binary_expression "*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)" (pointer_expression "*(uint *)(param_1 + 0x106c)" (* "*") (cast_expression "(uint *)(param_1 + 0x106c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x106c)" (( "(") (binary_expression "param_1 + 0x106c" (identifier "param_1") (+ "+") (number_literal "0x106c")) () ")")))) (& "&") (parenthesized_expression "(uVar11 ^ local_4c)" (( "(") (binary_expression "uVar11 ^ local_4c" (identifier "uVar11") (^ "^") (identifier "local_4c")) () ")"))) () ")")) (!= "!=") (number_literal "0")))) (; ";")) (if_statement "if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }\n        else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" (if "if") (parenthesized_expression "((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0))))" (( "(") (binary_expression "(puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))" (parenthesized_expression "(puVar13[2] == 0)" (( "(") (binary_expression "puVar13[2] == 0" (subscript_expression "puVar13[2]" (identifier "puVar13") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((local_80 < 1 || (puVar13[-1] == 0)))" (( "(") (parenthesized_expression "(local_80 < 1 || (puVar13[-1] == 0))" (( "(") (binary_expression "local_80 < 1 || (puVar13[-1] == 0)" (binary_expression "local_80 < 1" (identifier "local_80") (< "<") (number_literal "1")) (|| "||") (parenthesized_expression "(puVar13[-1] == 0)" (( "(") (binary_expression "puVar13[-1] == 0" (subscript_expression "puVar13[-1]" (identifier "puVar13") ([ "[") (number_literal "-1") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }\n          if (bVar23) goto LAB_0003bd5e;\n          iVar21 = iVar9 * 4;\n          iVar18 = iVar9 + 1;\nLAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;\nLAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;\n          iVar12 = FUN_00039090();\n          bVar23 = iVar12 == 0;\n          iVar22 = iVar9;\n          bVar5 = true;\n          if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }\n        }" ({ "{") (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" (identifier "iVar21") (= "=") (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")"))))) (; ";")) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" (if "if") (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" (( "(") (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" (! "!") (identifier "bVar6")) (&& "&&") (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" (* "*") (cast_expression "(int *)(iVar21 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar21 + 4)" (( "(") (binary_expression "iVar21 + 4" (identifier "iVar21") (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "0"))) () ")")) (compound_statement "{\nLAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;\n          }" ({ "{") (labeled_statement "LAB_0003bd3e:\n            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" (statement_identifier "LAB_0003bd3e") (: ":") (if_statement "if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;" (if "if") (parenthesized_expression "(((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1))))" (( "(") (binary_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||\n               ((!bVar24 && (iVar9 == 1)))" (parenthesized_expression "((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff)))" (( "(") (binary_expression "(uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))" (parenthesized_expression "(uVar15 == *puVar14)" (( "(") (binary_expression "uVar15 == *puVar14" (identifier "uVar15") (== "==") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) () ")")) (&& "&&") (parenthesized_expression "(uVar11 == (puVar14[1] & 0xfffffff))" (( "(") (binary_expression "uVar11 == (puVar14[1] & 0xfffffff)" (identifier "uVar11") (== "==") (parenthesized_expression "(puVar14[1] & 0xfffffff)" (( "(") (binary_expression "puVar14[1] & 0xfffffff" (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]")) (& "&") (number_literal "0xfffffff")) () ")"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "((!bVar24 && (iVar9 == 1)))" (( "(") (parenthesized_expression "(!bVar24 && (iVar9 == 1))" (( "(") (binary_expression "!bVar24 && (iVar9 == 1)" (unary_expression "!bVar24" (! "!") (identifier "bVar24")) (&& "&&") (parenthesized_expression "(iVar9 == 1)" (( "(") (binary_expression "iVar9 == 1" (identifier "iVar9") (== "==") (number_literal "1")) () ")"))) () ")")) () ")"))) () ")")) (goto_statement "goto LAB_0003bd5e;" (goto "goto") (statement_identifier "LAB_0003bd5e") (; ";")))) (} "}"))) (if_statement "if (bVar23) goto LAB_0003bd5e;" (if "if") (parenthesized_expression "(bVar23)" (( "(") (identifier "bVar23") () ")")) (goto_statement "goto LAB_0003bd5e;" (goto "goto") (statement_identifier "LAB_0003bd5e") (; ";"))) (expression_statement "iVar21 = iVar9 * 4;" (assignment_expression "iVar21 = iVar9 * 4" (identifier "iVar21") (= "=") (binary_expression "iVar9 * 4" (identifier "iVar9") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar18 = iVar9 + 1;" (assignment_expression "iVar18 = iVar9 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar9 + 1" (identifier "iVar9") (+ "+") (number_literal "1"))) (; ";")) (labeled_statement "LAB_0003bbca:\n          if (uVar15 != *puVar14) goto LAB_0003bddd;" (statement_identifier "LAB_0003bbca") (: ":") (if_statement "if (uVar15 != *puVar14) goto LAB_0003bddd;" (if "if") (parenthesized_expression "(uVar15 != *puVar14)" (( "(") (binary_expression "uVar15 != *puVar14" (identifier "uVar15") (!= "!=") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) () ")")) (goto_statement "goto LAB_0003bddd;" (goto "goto") (statement_identifier "LAB_0003bddd") (; ";")))) (labeled_statement "LAB_0003bbd6:\n          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" (statement_identifier "LAB_0003bbd6") (: ":") (if_statement "if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;" (if "if") (parenthesized_expression "(((uVar11 ^ puVar14[1]) & 0xfffffff) != 0)" (( "(") (binary_expression "((uVar11 ^ puVar14[1]) & 0xfffffff) != 0" (parenthesized_expression "((uVar11 ^ puVar14[1]) & 0xfffffff)" (( "(") (binary_expression "(uVar11 ^ puVar14[1]) & 0xfffffff" (parenthesized_expression "(uVar11 ^ puVar14[1])" (( "(") (binary_expression "uVar11 ^ puVar14[1]" (identifier "uVar11") (^ "^") (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]"))) () ")")) (& "&") (number_literal "0xfffffff")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0003bddd;" (goto "goto") (statement_identifier "LAB_0003bddd") (; ";")))) (expression_statement "iVar12 = FUN_00039090();" (assignment_expression "iVar12 = FUN_00039090()" (identifier "iVar12") (= "=") (call_expression "FUN_00039090()" (identifier "FUN_00039090") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar23 = iVar12 == 0;" (assignment_expression "bVar23 = iVar12 == 0" (identifier "bVar23") (= "=") (binary_expression "iVar12 == 0" (identifier "iVar12") (== "==") (number_literal "0"))) (; ";")) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" (identifier "iVar22") (= "=") (identifier "iVar9")) (; ";")) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" (identifier "bVar5") (= "=") (true "true")) (; ";")) (if_statement "if (iVar12 != 0) {\n            bVar5 = bVar24;\n          }" (if "if") (parenthesized_expression "(iVar12 != 0)" (( "(") (binary_expression "iVar12 != 0" (identifier "iVar12") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            bVar5 = bVar24;\n          }" ({ "{") (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" (identifier "bVar5") (= "=") (identifier "bVar24")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" (else "else") (compound_statement "{\n          iVar21 = *(int *)(param_1 + 0x1090);\n          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }\nLAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }\n          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }\n          local_4c = uVar11;\n          if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }\n          iVar21 = 0;\n          iVar9 = 0;\n          local_40 = local_80;\n          iVar18 = 1;\n          bVar4 = bVar24;\n          bVar24 = bVar6;\n          if (uVar15 == *puVar14) goto LAB_0003bbd6;\nLAB_0003bddd:\n          bVar23 = true;\n          iVar22 = iVar9;\n          bVar5 = true;\n        }" ({ "{") (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" (identifier "iVar21") (= "=") (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")"))))) (; ";")) (if_statement "if (!bVar6 && *(int *)(iVar21 + 4) == 0) {\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" (if "if") (parenthesized_expression "(!bVar6 && *(int *)(iVar21 + 4) == 0)" (( "(") (binary_expression "!bVar6 && *(int *)(iVar21 + 4) == 0" (unary_expression "!bVar6" (! "!") (identifier "bVar6")) (&& "&&") (binary_expression "*(int *)(iVar21 + 4) == 0" (pointer_expression "*(int *)(iVar21 + 4)" (* "*") (cast_expression "(int *)(iVar21 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar21 + 4)" (( "(") (binary_expression "iVar21 + 4" (identifier "iVar21") (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n            bVar23 = true;\n            goto LAB_0003bd3e;\n          }" ({ "{") (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" (identifier "bVar23") (= "=") (true "true")) (; ";")) (goto_statement "goto LAB_0003bd3e;" (goto "goto") (statement_identifier "LAB_0003bd3e") (; ";")) (} "}"))) (labeled_statement "LAB_0003bd5e:\n          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" (statement_identifier "LAB_0003bd5e") (: ":") (if_statement "if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" (if "if") (parenthesized_expression "((iVar9 != 0) && ((bool)(bVar4 | bVar24)))" (( "(") (binary_expression "(iVar9 != 0) && ((bool)(bVar4 | bVar24))" (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((bool)(bVar4 | bVar24))" (( "(") (cast_expression "(bool)(bVar4 | bVar24)" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (parenthesized_expression "(bVar4 | bVar24)" (( "(") (binary_expression "bVar4 | bVar24" (identifier "bVar4") (| "|") (identifier "bVar24")) () ")"))) () ")"))) () ")")) (compound_statement "{\n            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n            if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n          }" ({ "{") (expression_statement "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (identifier "FUN_0005aed0") (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (( "(") (identifier "extraout_EDX") (, ",") (identifier "local_40") (, ",") (identifier "local_3c") (, ",") (identifier "local_6c") (, ",") (identifier "iVar9") (, ",") (identifier "local_4c") (, ",") (pointer_expression "*psVar10" (* "*") (identifier "psVar10")) () ")"))) (; ";")) (if_statement "if ((local_4c & 0x60000000) == 0) {\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }\n            else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" (if "if") (parenthesized_expression "((local_4c & 0x60000000) == 0)" (( "(") (binary_expression "(local_4c & 0x60000000) == 0" (parenthesized_expression "(local_4c & 0x60000000)" (( "(") (binary_expression "local_4c & 0x60000000" (identifier "local_4c") (& "&") (number_literal "0x60000000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" ({ "{") (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" (identifier "iVar21") (= "=") (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")"))))) (; ";")) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (identifier "puVar14") (= "=") (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (( "(") (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (identifier "iVar17") (+ "+") (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (* "*") (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")")))) (+ "+") (number_literal "0x14")) () ")"))))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" (else "else") (compound_statement "{\n              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n              iVar21 = *(int *)(param_1 + 0x1090);\n              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));\n            }" ({ "{") (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (identifier "FUN_0005afa0") (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (( "(") (identifier "extraout_EDX") (, ",") (identifier "local_40") (, ",") (identifier "local_3c") (, ",") (identifier "local_6c") (, ",") (identifier "iVar9") (, ",") (identifier "local_4c") (, ",") (pointer_expression "*psVar10" (* "*") (identifier "psVar10")) () ")"))) (; ";")) (expression_statement "iVar21 = *(int *)(param_1 + 0x1090);" (assignment_expression "iVar21 = *(int *)(param_1 + 0x1090)" (identifier "iVar21") (= "=") (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")"))))) (; ";")) (expression_statement "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ));" (assignment_expression "puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (identifier "puVar14") (= "=") (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  ))" (( "(") (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (identifier "iVar17") (+ "+") (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (* "*") (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14\n                                                  )" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")")))) (+ "+") (number_literal "0x14")) () ")"))))) () ")")))) (; ";")) (} "}")))) (} "}")))) (if_statement "if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))\n          {\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }\n          else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" (if "if") (parenthesized_expression "(((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))" (( "(") (binary_expression "((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (parenthesized_expression "((uVar15 & 0xfffffc00) == 0xd800)" (( "(") (binary_expression "(uVar15 & 0xfffffc00) == 0xd800" (parenthesized_expression "(uVar15 & 0xfffffc00)" (( "(") (binary_expression "uVar15 & 0xfffffc00" (identifier "uVar15") (& "&") (number_literal "0xfffffc00")) () ")")) (== "==") (number_literal "0xd800")) () ")")) (|| "||") (parenthesized_expression "(local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000)" (( "(") (comma_expression "local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000" (assignment_expression "local_58 = 0" (identifier "local_58") (= "=") (number_literal "0")) (, ",") (binary_expression "(uVar15 & 0xfffffe00) == 0xf000" (parenthesized_expression "(uVar15 & 0xfffffe00)" (( "(") (binary_expression "uVar15 & 0xfffffe00" (identifier "uVar15") (& "&") (number_literal "0xfffffe00")) () ")")) (== "==") (number_literal "0xf000"))) () ")"))) () ")")) (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n            local_58 = uVar15 & 0xffffff00;\n          }" ({ "{") (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar21 + 4)" (* "*") (cast_expression "(int *)(iVar21 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar21 + 4)" (( "(") (binary_expression "iVar21 + 4" (identifier "iVar21") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "local_58 = uVar15 & 0xffffff00;" (assignment_expression "local_58 = uVar15 & 0xffffff00" (identifier "local_58") (= "=") (binary_expression "uVar15 & 0xffffff00" (identifier "uVar15") (& "&") (number_literal "0xffffff00"))) (; ";")) (} "}")) (else_clause "else {\n            iVar9 = *(int *)(iVar21 + 4);\n          }" (else "else") (compound_statement "{\n            iVar9 = *(int *)(iVar21 + 4);\n          }" ({ "{") (expression_statement "iVar9 = *(int *)(iVar21 + 4);" (assignment_expression "iVar9 = *(int *)(iVar21 + 4)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar21 + 4)" (* "*") (cast_expression "(int *)(iVar21 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar21 + 4)" (( "(") (binary_expression "iVar21 + 4" (identifier "iVar21") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (expression_statement "local_4c = uVar11;" (assignment_expression "local_4c = uVar11" (identifier "local_4c") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (iVar9 == 0) {\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            local_40 = local_80;\n            iVar21 = 0;\n            iVar18 = 1;\n            iVar9 = 0;\n            bVar24 = bVar6;\n            goto LAB_0003bbca;\n          }" ({ "{") (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" (identifier "local_40") (= "=") (identifier "local_80")) (; ";")) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" (identifier "iVar21") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" (identifier "iVar18") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" (identifier "iVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" (identifier "bVar24") (= "=") (identifier "bVar6")) (; ";")) (goto_statement "goto LAB_0003bbca;" (goto "goto") (statement_identifier "LAB_0003bbca") (; ";")) (} "}"))) (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" (identifier "iVar21") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" (identifier "iVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_40 = local_80;" (assignment_expression "local_40 = local_80" (identifier "local_40") (= "=") (identifier "local_80")) (; ";")) (expression_statement "iVar18 = 1;" (assignment_expression "iVar18 = 1" (identifier "iVar18") (= "=") (number_literal "1")) (; ";")) (expression_statement "bVar4 = bVar24;" (assignment_expression "bVar4 = bVar24" (identifier "bVar4") (= "=") (identifier "bVar24")) (; ";")) (expression_statement "bVar24 = bVar6;" (assignment_expression "bVar24 = bVar6" (identifier "bVar24") (= "=") (identifier "bVar6")) (; ";")) (if_statement "if (uVar15 == *puVar14) goto LAB_0003bbd6;" (if "if") (parenthesized_expression "(uVar15 == *puVar14)" (( "(") (binary_expression "uVar15 == *puVar14" (identifier "uVar15") (== "==") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) () ")")) (goto_statement "goto LAB_0003bbd6;" (goto "goto") (statement_identifier "LAB_0003bbd6") (; ";"))) (labeled_statement "LAB_0003bddd:\n          bVar23 = true;" (statement_identifier "LAB_0003bddd") (: ":") (expression_statement "bVar23 = true;" (assignment_expression "bVar23 = true" (identifier "bVar23") (= "=") (true "true")) (; ";"))) (expression_statement "iVar22 = iVar9;" (assignment_expression "iVar22 = iVar9" (identifier "iVar22") (= "=") (identifier "iVar9")) (; ";")) (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" (identifier "bVar5") (= "=") (true "true")) (; ";")) (} "}")))) (expression_statement "iVar9 = iVar18;" (assignment_expression "iVar9 = iVar18" (identifier "iVar9") (= "=") (identifier "iVar18")) (; ";")) (if_statement "if (local_60 <= iVar9) {\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" (if "if") (parenthesized_expression "(local_60 <= iVar9)" (( "(") (binary_expression "local_60 <= iVar9" (identifier "local_60") (<= "<=") (identifier "iVar9")) () ")")) (compound_statement "{\n          local_60 = iVar22 + 0x100;\n          local_6c = FUN_0002d5f0(local_6c,local_60,4);\n        }" ({ "{") (expression_statement "local_60 = iVar22 + 0x100;" (assignment_expression "local_60 = iVar22 + 0x100" (identifier "local_60") (= "=") (binary_expression "iVar22 + 0x100" (identifier "iVar22") (+ "+") (number_literal "0x100"))) (; ";")) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" (identifier "local_6c") (= "=") (call_expression "FUN_0002d5f0(local_6c,local_60,4)" (identifier "FUN_0002d5f0") (argument_list "(local_6c,local_60,4)" (( "(") (identifier "local_6c") (, ",") (identifier "local_60") (, ",") (number_literal "4") () ")")))) (; ";")) (} "}"))) (expression_statement "*(uint *)(local_6c + iVar21) = uVar15;" (assignment_expression "*(uint *)(local_6c + iVar21) = uVar15" (pointer_expression "*(uint *)(local_6c + iVar21)" (* "*") (cast_expression "(uint *)(local_6c + iVar21)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_6c + iVar21)" (( "(") (binary_expression "local_6c + iVar21" (identifier "local_6c") (+ "+") (identifier "iVar21")) () ")")))) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" (identifier "uVar16") (= "=") (subscript_expression "puVar13[2]" (identifier "puVar13") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (uVar16 != 0) {\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" (if "if") (parenthesized_expression "(uVar16 != 0)" (( "(") (binary_expression "uVar16 != 0" (identifier "uVar16") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);\nLAB_0003bfcc:\n          iVar9 = iVar21 + 1;\n          local_4c = local_4c | 0x80000000;\n        }" ({ "{") (do_statement "do {\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          } while (uVar16 != 0);" (do "do") (compound_statement "{\n            while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }\n            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);\nLAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;\nLAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n            uVar16 = puVar13[2];\n            iVar9 = iVar21 + 1;\n          }" ({ "{") (while_statement "while( true ) {\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n              iVar21 = iVar9;\n              puVar13 = puVar13 + uVar16 * 3;\n              uVar16 = *puVar13;\n              uVar19 = uVar16 & 0xffffff00;\n              if (uVar19 == 0xd900) break;\n              if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }\n              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);\n              if (iVar21 + 1 < local_60) goto LAB_0003bf53;\nLAB_0003bf9e:\n              local_60 = iVar21 + 0x100;\n              local_6c = FUN_0002d5f0(local_6c,local_60,4);\n              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;\n              uVar16 = puVar13[2];\n              iVar9 = iVar21 + 1;\n              if (uVar16 == 0) goto LAB_0003bfcc;\n            }" ({ "{") (expression_statement "iVar21 = iVar9;" (assignment_expression "iVar21 = iVar9" (identifier "iVar21") (= "=") (identifier "iVar9")) (; ";")) (expression_statement "puVar13 = puVar13 + uVar16 * 3;" (assignment_expression "puVar13 = puVar13 + uVar16 * 3" (identifier "puVar13") (= "=") (binary_expression "puVar13 + uVar16 * 3" (identifier "puVar13") (+ "+") (binary_expression "uVar16 * 3" (identifier "uVar16") (* "*") (number_literal "3")))) (; ";")) (expression_statement "uVar16 = *puVar13;" (assignment_expression "uVar16 = *puVar13" (identifier "uVar16") (= "=") (pointer_expression "*puVar13" (* "*") (identifier "puVar13"))) (; ";")) (expression_statement "uVar19 = uVar16 & 0xffffff00;" (assignment_expression "uVar19 = uVar16 & 0xffffff00" (identifier "uVar19") (= "=") (binary_expression "uVar16 & 0xffffff00" (identifier "uVar16") (& "&") (number_literal "0xffffff00"))) (; ";")) (if_statement "if (uVar19 == 0xd900) break;" (if "if") (parenthesized_expression "(uVar19 == 0xd900)" (( "(") (binary_expression "uVar19 == 0xd900" (identifier "uVar19") (== "==") (number_literal "0xd900")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (uVar19 != 0xda00) {\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" (if "if") (parenthesized_expression "(uVar19 != 0xda00)" (( "(") (binary_expression "uVar19 != 0xda00" (identifier "uVar19") (!= "!=") (number_literal "0xda00")) () ")")) (compound_statement "{\n                if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }\n                goto LAB_0003bf4c;\n              }" ({ "{") (if_statement "if (uVar19 == 0xd800) {\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" (if "if") (parenthesized_expression "(uVar19 == 0xd800)" (( "(") (binary_expression "uVar19 == 0xd800" (identifier "uVar19") (== "==") (number_literal "0xd800")) () ")")) (compound_statement "{\n                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);\n                }" ({ "{") (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" (identifier "uVar16") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x410" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0x410")) (+ "+") (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" (( "(") (binary_expression "uVar16 & 0xff" (identifier "uVar16") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (goto_statement "goto LAB_0003bf4c;" (goto "goto") (statement_identifier "LAB_0003bf4c") (; ";")) (} "}"))) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" (identifier "uVar16") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0x10" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" (( "(") (binary_expression "uVar16 & 0xff" (identifier "uVar16") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (iVar21 + 1 < local_60) goto LAB_0003bf53;" (if "if") (parenthesized_expression "(iVar21 + 1 < local_60)" (( "(") (binary_expression "iVar21 + 1 < local_60" (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1")) (< "<") (identifier "local_60")) () ")")) (goto_statement "goto LAB_0003bf53;" (goto "goto") (statement_identifier "LAB_0003bf53") (; ";"))) (labeled_statement "LAB_0003bf9e:\n              local_60 = iVar21 + 0x100;" (statement_identifier "LAB_0003bf9e") (: ":") (expression_statement "local_60 = iVar21 + 0x100;" (assignment_expression "local_60 = iVar21 + 0x100" (identifier "local_60") (= "=") (binary_expression "iVar21 + 0x100" (identifier "iVar21") (+ "+") (number_literal "0x100"))) (; ";"))) (expression_statement "local_6c = FUN_0002d5f0(local_6c,local_60,4);" (assignment_expression "local_6c = FUN_0002d5f0(local_6c,local_60,4)" (identifier "local_6c") (= "=") (call_expression "FUN_0002d5f0(local_6c,local_60,4)" (identifier "FUN_0002d5f0") (argument_list "(local_6c,local_60,4)" (( "(") (identifier "local_6c") (, ",") (identifier "local_60") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" (* "*") (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" (( "(") (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" (identifier "local_6c") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" (( "(") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar16")) (; ";")) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" (identifier "uVar16") (= "=") (subscript_expression "puVar13[2]" (identifier "puVar13") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar16 == 0) goto LAB_0003bfcc;" (if "if") (parenthesized_expression "(uVar16 == 0)" (( "(") (binary_expression "uVar16 == 0" (identifier "uVar16") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0003bfcc;" (goto "goto") (statement_identifier "LAB_0003bfcc") (; ";"))) (} "}"))) (expression_statement "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);" (assignment_expression "uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" (identifier "uVar16") (= "=") (pointer_expression "*(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" (* "*") (cast_expression "(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4)" (( "(") (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4" (binary_expression "*(int *)(param_1 + 0x1090) + 0xc10" (pointer_expression "*(int *)(param_1 + 0x1090)" (* "*") (cast_expression "(int *)(param_1 + 0x1090)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1090)" (( "(") (binary_expression "param_1 + 0x1090" (identifier "param_1") (+ "+") (number_literal "0x1090")) () ")")))) (+ "+") (number_literal "0xc10")) (+ "+") (binary_expression "(uVar16 & 0xff) * 4" (parenthesized_expression "(uVar16 & 0xff)" (( "(") (binary_expression "uVar16 & 0xff" (identifier "uVar16") (& "&") (number_literal "0xff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (labeled_statement "LAB_0003bf4c:\n            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" (statement_identifier "LAB_0003bf4c") (: ":") (if_statement "if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;" (if "if") (parenthesized_expression "(local_60 <= iVar21 + 1)" (( "(") (binary_expression "local_60 <= iVar21 + 1" (identifier "local_60") (<= "<=") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1"))) () ")")) (goto_statement "goto LAB_0003bf9e;" (goto "goto") (statement_identifier "LAB_0003bf9e") (; ";")))) (labeled_statement "LAB_0003bf53:\n            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (statement_identifier "LAB_0003bf53") (: ":") (expression_statement "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;" (assignment_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16" (pointer_expression "*(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" (* "*") (cast_expression "(uint *)(local_6c + -4 + (iVar21 + 1) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_6c + -4 + (iVar21 + 1) * 4)" (( "(") (binary_expression "local_6c + -4 + (iVar21 + 1) * 4" (binary_expression "local_6c + -4" (identifier "local_6c") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "(iVar21 + 1) * 4" (parenthesized_expression "(iVar21 + 1)" (( "(") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "uVar16")) (; ";"))) (expression_statement "uVar16 = puVar13[2];" (assignment_expression "uVar16 = puVar13[2]" (identifier "uVar16") (= "=") (subscript_expression "puVar13[2]" (identifier "puVar13") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar16 != 0)" (( "(") (binary_expression "uVar16 != 0" (identifier "uVar16") (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_0003bfcc:\n          iVar9 = iVar21 + 1;" (statement_identifier "LAB_0003bfcc") (: ":") (expression_statement "iVar9 = iVar21 + 1;" (assignment_expression "iVar9 = iVar21 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "local_4c = local_4c | 0x80000000;" (assignment_expression "local_4c = local_4c | 0x80000000" (identifier "local_4c") (= "=") (binary_expression "local_4c | 0x80000000" (identifier "local_4c") (| "|") (number_literal "0x80000000"))) (; ";")) (} "}"))) (if_statement "if (bVar23) {\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" (if "if") (parenthesized_expression "(bVar23)" (( "(") (identifier "bVar23") () ")")) (compound_statement "{\n          FUN_00039710();\n          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));\n          *puVar13 = uVar15;\n          uVar15 = uVar11 | 0x80000000;\n          if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }\n          puVar13[1] = uVar15;\n        }" ({ "{") (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" (identifier "FUN_00039710") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));" (assignment_expression "puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" (identifier "puVar13") (= "=") (cast_expression "(uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14))" (( "(") (binary_expression "iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" (identifier "iVar17") (+ "+") (pointer_expression "*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" (* "*") (cast_expression "(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14)" (( "(") (binary_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14" (pointer_expression "*(int *)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")")))) (+ "+") (number_literal "0x14")) () ")"))))) () ")")))) (; ";")) (expression_statement "*puVar13 = uVar15;" (assignment_expression "*puVar13 = uVar15" (pointer_expression "*puVar13" (* "*") (identifier "puVar13")) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "uVar15 = uVar11 | 0x80000000;" (assignment_expression "uVar15 = uVar11 | 0x80000000" (identifier "uVar15") (= "=") (binary_expression "uVar11 | 0x80000000" (identifier "uVar11") (| "|") (number_literal "0x80000000"))) (; ";")) (if_statement "if (local_40 != local_80) {\n            uVar15 = uVar11;\n          }" (if "if") (parenthesized_expression "(local_40 != local_80)" (( "(") (binary_expression "local_40 != local_80" (identifier "local_40") (!= "!=") (identifier "local_80")) () ")")) (compound_statement "{\n            uVar15 = uVar11;\n          }" ({ "{") (expression_statement "uVar15 = uVar11;" (assignment_expression "uVar15 = uVar11" (identifier "uVar15") (= "=") (identifier "uVar11")) (; ";")) (} "}"))) (expression_statement "puVar13[1] = uVar15;" (assignment_expression "puVar13[1] = uVar15" (subscript_expression "puVar13[1]" (identifier "puVar13") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar15")) (; ";")) (} "}"))) (expression_statement "iVar17 = local_80 + 1;" (assignment_expression "iVar17 = local_80 + 1" (identifier "iVar17") (= "=") (binary_expression "local_80 + 1" (identifier "local_80") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((uVar11 & 0x400000) == 0) {\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }\n        else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" (if "if") (parenthesized_expression "((uVar11 & 0x400000) == 0)" (( "(") (binary_expression "(uVar11 & 0x400000) == 0" (parenthesized_expression "(uVar11 & 0x400000)" (( "(") (binary_expression "uVar11 & 0x400000" (identifier "uVar11") (& "&") (number_literal "0x400000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0003bc62:\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" ({ "{") (labeled_statement "LAB_0003bc62:\n          bVar24 = bVar5;" (statement_identifier "LAB_0003bc62") (: ":") (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" (identifier "bVar24") (= "=") (identifier "bVar5")) (; ";"))) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" (if "if") (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" (( "(") (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")")))) (<= "<=") (identifier "iVar17")) () ")")) (goto_statement "goto LAB_0003c09d;" (goto "goto") (statement_identifier "LAB_0003c09d") (; ";"))) (} "}")) (else_clause "else {\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" (else "else") (compound_statement "{\n          if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }\n          if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }\n          iVar17 = FUN_000390d0();\n          bVar24 = true;\n          if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }\n          bVar5 = bVar24;\n          FUN_00039710();\n          iVar17 = local_80 + 2;\n          bVar24 = bVar5;\n          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;\n        }" ({ "{") (if_statement "if (*(int *)(param_1 + 300) <= iVar17) {\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" (( "(") (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")")))) (<= "<=") (identifier "iVar17")) () ")")) (compound_statement "{\n            iVar17 = local_80 + 2;\n            goto LAB_0003bc62;\n          }" ({ "{") (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" (identifier "iVar17") (= "=") (binary_expression "local_80 + 2" (identifier "local_80") (+ "+") (number_literal "2"))) (; ";")) (goto_statement "goto LAB_0003bc62;" (goto "goto") (statement_identifier "LAB_0003bc62") (; ";")) (} "}"))) (if_statement "if ((iVar20 == local_3c) && (local_34 == iVar17)) {\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" (if "if") (parenthesized_expression "((iVar20 == local_3c) && (local_34 == iVar17))" (( "(") (binary_expression "(iVar20 == local_3c) && (local_34 == iVar17)" (parenthesized_expression "(iVar20 == local_3c)" (( "(") (binary_expression "iVar20 == local_3c" (identifier "iVar20") (== "==") (identifier "local_3c")) () ")")) (&& "&&") (parenthesized_expression "(local_34 == iVar17)" (( "(") (binary_expression "local_34 == iVar17" (identifier "local_34") (== "==") (identifier "iVar17")) () ")"))) () ")")) (compound_statement "{\n                    \n            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));\n          }" ({ "{") (expression_statement "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43));" (call_expression "__assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" (identifier "__assert_fail") (argument_list "(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,\n                          (char *)(unaff_EDI + 0x46d43))" (( "(") (binary_expression "&UNK_0004647f + unaff_EDI" (pointer_expression "&UNK_0004647f" (& "&") (identifier "UNK_0004647f")) (+ "+") (identifier "unaff_EDI")) (, ",") (cast_expression "(char *)(unaff_EDI + 0x46160)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x46160)" (( "(") (binary_expression "unaff_EDI + 0x46160" (identifier "unaff_EDI") (+ "+") (number_literal "0x46160")) () ")"))) (, ",") (number_literal "0x14f6") (, ",") (cast_expression "(char *)(unaff_EDI + 0x46d43)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x46d43)" (( "(") (binary_expression "unaff_EDI + 0x46d43" (identifier "unaff_EDI") (+ "+") (number_literal "0x46d43")) () ")"))) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar17 = FUN_000390d0();" (assignment_expression "iVar17 = FUN_000390d0()" (identifier "iVar17") (= "=") (call_expression "FUN_000390d0()" (identifier "FUN_000390d0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar24 = true;" (assignment_expression "bVar24 = true" (identifier "bVar24") (= "=") (true "true")) (; ";")) (if_statement "if (iVar17 != 0) {\n            bVar24 = bVar5;\n          }" (if "if") (parenthesized_expression "(iVar17 != 0)" (( "(") (binary_expression "iVar17 != 0" (identifier "iVar17") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            bVar24 = bVar5;\n          }" ({ "{") (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" (identifier "bVar24") (= "=") (identifier "bVar5")) (; ";")) (} "}"))) (expression_statement "bVar5 = bVar24;" (assignment_expression "bVar5 = bVar24" (identifier "bVar5") (= "=") (identifier "bVar24")) (; ";")) (expression_statement "FUN_00039710();" (call_expression "FUN_00039710()" (identifier "FUN_00039710") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar17 = local_80 + 2;" (assignment_expression "iVar17 = local_80 + 2" (identifier "iVar17") (= "=") (binary_expression "local_80 + 2" (identifier "local_80") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "bVar24 = bVar5;" (assignment_expression "bVar24 = bVar5" (identifier "bVar24") (= "=") (identifier "bVar5")) (; ";")) (if_statement "if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;" (if "if") (parenthesized_expression "(*(int *)(param_1 + 300) <= iVar17)" (( "(") (binary_expression "*(int *)(param_1 + 300) <= iVar17" (pointer_expression "*(int *)(param_1 + 300)" (* "*") (cast_expression "(int *)(param_1 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 300)" (( "(") (binary_expression "param_1 + 300" (identifier "param_1") (+ "+") (number_literal "300")) () ")")))) (<= "<=") (identifier "iVar17")) () ")")) (goto_statement "goto LAB_0003c09d;" (goto "goto") (statement_identifier "LAB_0003c09d") (; ";"))) (} "}")))) (expression_statement "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);" (assignment_expression "local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8)" (identifier "local_7c") (= "=") (pointer_expression "*(short **)(*(int *)(param_1 + 0x18) + iVar8)" (* "*") (cast_expression "(short **)(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (type_descriptor "short **" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x18) + iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x18) + iVar8" (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (identifier "iVar8")) () ")"))))) (; ";")) (expression_statement "local_80 = iVar17;" (assignment_expression "local_80 = iVar17" (identifier "local_80") (= "=") (identifier "iVar17")) (; ";")) (expression_statement "bVar23 = bVar6;" (assignment_expression "bVar23 = bVar6" (identifier "bVar23") (= "=") (identifier "bVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (} "}"))) (expression_statement "*local_7c = *psVar10;" (assignment_expression "*local_7c = *psVar10" (pointer_expression "*local_7c" (* "*") (identifier "local_7c")) (= "=") (pointer_expression "*psVar10" (* "*") (identifier "psVar10"))) (; ";")) (goto_statement "goto LAB_0003c0a8;" (goto "goto") (statement_identifier "LAB_0003c0a8") (; ";")) (labeled_statement "LAB_0003c09d:\n  if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" (statement_identifier "LAB_0003c09d") (: ":") (if_statement "if ((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)) {\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" (if "if") (parenthesized_expression "((bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0))" (( "(") (binary_expression "(bVar5) &&\n     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" (parenthesized_expression "(bVar5)" (( "(") (identifier "bVar5") () ")")) (&& "&&") (parenthesized_expression "(FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0)" (( "(") (comma_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),\n     (local_4c & 0x60000000) != 0" (call_expression "FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (identifier "FUN_0005aed0") (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (( "(") (identifier "extraout_EDX") (, ",") (identifier "local_40") (, ",") (identifier "local_3c") (, ",") (identifier "local_6c") (, ",") (identifier "iVar9") (, ",") (identifier "local_4c") (, ",") (pointer_expression "*psVar10" (* "*") (identifier "psVar10")) () ")"))) (, ",") (binary_expression "(local_4c & 0x60000000) != 0" (parenthesized_expression "(local_4c & 0x60000000)" (( "(") (binary_expression "local_4c & 0x60000000" (identifier "local_4c") (& "&") (number_literal "0x60000000")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);\n  }" ({ "{") (expression_statement "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);" (call_expression "FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (identifier "FUN_0005afa0") (argument_list "(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10)" (( "(") (identifier "extraout_EDX") (, ",") (identifier "local_40") (, ",") (identifier "local_3c") (, ",") (identifier "local_6c") (, ",") (identifier "iVar9") (, ",") (identifier "local_4c") (, ",") (pointer_expression "*psVar10" (* "*") (identifier "psVar10")) () ")"))) (; ";")) (} "}")))) (labeled_statement "LAB_0003c0a8:\n  if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" (statement_identifier "LAB_0003c0a8") (: ":") (if_statement "if (*(int *)(psVar10 + 6) != 0) {\n    FUN_00039830();\n  }" (if "if") (parenthesized_expression "(*(int *)(psVar10 + 6) != 0)" (( "(") (binary_expression "*(int *)(psVar10 + 6) != 0" (pointer_expression "*(int *)(psVar10 + 6)" (* "*") (cast_expression "(int *)(psVar10 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(psVar10 + 6)" (( "(") (binary_expression "psVar10 + 6" (identifier "psVar10") (+ "+") (number_literal "6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00039830();\n  }" ({ "{") (expression_statement "FUN_00039830();" (call_expression "FUN_00039830()" (identifier "FUN_00039830") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (expression_statement "local_3c = local_3c + 1;" (assignment_expression "local_3c = local_3c + 1" (identifier "local_3c") (= "=") (binary_expression "local_3c + 1" (identifier "local_3c") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x128) <= local_3c)" (( "(") (binary_expression "*(int *)(param_1 + 0x128) <= local_3c" (pointer_expression "*(int *)(param_1 + 0x128)" (* "*") (cast_expression "(int *)(param_1 + 0x128)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x128)" (( "(") (binary_expression "param_1 + 0x128" (identifier "param_1") (+ "+") (number_literal "0x128")) () ")")))) (<= "<=") (identifier "local_3c")) () ")")) (goto_statement "goto LAB_0003c0cc;" (goto "goto") (statement_identifier "LAB_0003c0cc") (; ";"))) (goto_statement "goto LAB_0003b700;" (goto "goto") (statement_identifier "LAB_0003b700") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void __regparm3 function_1(type_1 *term,type_2 ctx,int may_optimise)

{
  int var_21;
  int var_22;
  type_3 var_26;
  type_4 *destline;
  bool var_37;
  bool bVar5;
  bool bVar6;
  void *ptr;
  type_4 *var_11;
  type_5 *var_7;
  type_3 *pwVar9;
  type_6 var_17;
  type_7 *var_29;
  int var_36;
  type_5 *var_47;
  type_6 *puVar13;
  type_6 var_19;
  type_6 var_32;
  type_8 *bchr;
  type_2 ctx_00;
  type_7 *var_31;
  int var_12;
  type_3 var_18;
  int var_45;
  type_4 *var_10;
  int var_16;
  int var_30;
  int var_4;
  bool bVar22;
  bool var_38;
  type_7 in_stack_ffffff74;
  int var_20;
  int var_25;
  type_4 *local_7c;
  int *var_15;
  type_3 *local_6c;
  size_t local_60;
  type_6 var_33;
  type_5 *var_14;
  type_6 var_34;
  int var_43;
  type_4 *var_28;
  int var_8;
  type_6 var_3;
  
  var_1();
  local_6c = (type_3 *)var_2(0x400,4);
  ptr = var_2(term->cols,0xc);
  var_21 = term->rvideo;
  var_22 = term->in_vbell;
  var_3 = term->cursor_on;
  if (var_3 != 0) {
    var_3 = 0x20000000;
    if (term->has_focus != 0) {
      if (term->cblinker == 0) {
        var_3 = 0x40000000;
        if (term->blink_cur != 0) {
          var_3 = 0;
        }
      }
      else {
        var_3 = 0x40000000;
      }
    }
    if (term->wrapnext != 0) {
      var_3 = var_3 | 0x10000000;
    }
  }
  var_4 = (term->curs).y;
  var_10 = (type_4 *)(var_4 - term->disptop);
  var_11 = var_5(term,var_4,0x139f,0);
  var_8 = (term->curs).x;
  var_7 = var_6(term,(type_4 *)&var_11->size,(int)&var_11->chars,var_10);
  if (var_7 == (type_5 *)0x0) {
    var_7 = var_11->chars;
  }
  else {
    var_8 = term->post_bidi_cache[(int)var_10].forward[var_8];
  }
  if (0 < var_8) {
    var_8 = var_8 - (type_6)(var_7[var_8].chr == 0xdfff);
  }
  if (var_11->temporary != 0) {
    var_9(var_11);
  }
  var_11 = (type_4 *)term->dispcursy;
  if ((-1 < (int)var_11) &&
     (((var_4 = term->dispcursx, term->curstype != var_3 || (var_10 != var_11)) ||
      (var_8 != var_4)))) {
    var_7 = term->disptext[(int)var_11]->chars + var_4;
    if ((var_4 < 1) || (var_7->chr != 0xdfff)) {
      var_12 = term->cols;
    }
    else {
      var_12 = term->cols;
      var_7[-1].attr = var_7[-1].attr | 0x3ffff;
    }
    if ((var_4 < var_12 + -1) && (var_7[1].chr == 0xdfff)) {
      var_7[1].attr = var_7[1].attr | 0x3ffff;
    }
    var_7->attr = var_7->attr | 0x3ffff;
    term->curstype = 0;
  }
  term->dispcursy = -1;
  term->dispcursx = -1;
  if (term->rows < 1) {
LAB_0003c0cc:
    var_13(ptr);
    var_13(local_6c);
    return;
  }
  local_60 = 0x400;
  var_28 = (type_4 *)0x0;
LAB_0003b700:
  var_4 = (int)&var_28->lattr + term->disptop;
  var_11 = var_5(term,var_4,0x13df,0);
  var_14 = var_6(term,(type_4 *)&var_11->size,(int)&var_11->chars,var_28);
  if (var_14 == (type_5 *)0x0) {
    var_15 = (int *)0x0;
    var_14 = var_11->chars;
  }
  else {
    var_15 = term->post_bidi_cache[(int)var_28].backward;
  }
  var_12 = term->cols;
  local_7c = term->disptext[(int)var_28];
  if (0 < var_12) {
    var_20 = 0;
    var_16 = 0;
    do {
      var_25 = var_20;
      if (var_15 != (int *)0x0) {
        var_25 = var_15[var_20];
      }
      var_18 = *(type_3 *)((int)&var_14->chr + var_16);
      var_17 = *(type_6 *)((int)&var_14->attr + var_16);
      if (term->ansi_colour == 0) {
        var_17 = var_17 & 0xfffc0000 | 0x20500;
      }
      if (term->xterm_256_colour == 0) {
        if ((var_17 & 0x1ff) - 0x10 < 0xf0) {
          var_17 = (type_6)((uint3)(var_17 >> 8) & 0xfffffe | 1) << 8;
        }
        if ((var_17 >> 9 & 0x1ff) - 0x10 < 0xf0) {
          var_17 = var_17 & 0xfffc01ff | 0x20400;
        }
      }
      var_19 = var_18 & 0xffffff00;
      if (var_19 == 0xd900) {
        var_18 = term->ucsdata->unitab_xterm[var_18 & 0xff];
      }
      else if (var_19 == 0xda00) {
        var_18 = term->ucsdata->unitab_scoacs[var_18 & 0xff];
      }
      else if (var_19 == 0xd800) {
        var_18 = term->ucsdata->unitab_line[var_18 & 0xff];
      }
      if ((var_20 < var_12 + -1) && (*(int *)((int)&var_14[1].chr + var_16) == 0xdfff)) {
        var_17 = var_17 | 0x400000;
      }
      var_17 = var_17 ^ (type_6)((var_21 == 0) != (var_22 == 0)) << 0x14;
      if ((type_6)(term->selstate + var_23) < 2) {
        var_12 = (term->selstart).y;
        if (term->seltype == var_24) {
          if ((var_12 < var_4) || ((var_4 == var_12 && ((term->selstart).x <= var_25)))) {
            var_12 = (term->selend).y;
            if (var_4 < var_12) goto LAB_0003b988;
            if (var_4 == var_12) {
              var_12 = (term->selend).x;
              goto joined_r0x0003ba86;
            }
          }
        }
        else if (((var_12 <= var_4) && ((term->selstart).x <= var_25)) &&
                (var_4 <= (term->selend).y)) {
          var_12 = (term->selend).x;
joined_r0x0003ba86:
          if (var_25 < var_12) {
LAB_0003b988:
            var_17 = var_17 ^ 0x100000;
          }
        }
      }
      if ((term->blink_is_real != 0) && ((var_17 & 0x200000) != 0)) {
        if ((term->has_focus != 0) && (term->tblinker != 0)) {
          var_18 = term->ucsdata->unitab_line[0x20];
        }
        var_17 = var_17 & 0xffdfffff;
      }
      pwVar9 = (type_3 *)((int)&local_7c->chars->chr + var_16);
      if ((*pwVar9 == var_18) && (var_26 = pwVar9[1], (var_26 & 0xf7fffffU) == var_17)) {
        if ((var_26 & 0x800000U) != 0) {
          var_17 = var_17 | 0x800000;
        }
      }
      else if ((var_17 & 0x400000) == 0) {
        var_12 = var_27(ctx_00,var_18);
        if (var_12 == 2) {
          local_7c = term->disptext[(int)var_28];
          var_17 = var_17 | 0x800000;
        }
        else {
          local_7c = term->disptext[(int)var_28];
        }
      }
      if ((var_8 == var_20) && (var_10 == var_28)) {
        term->dispcursx = var_20;
        var_17 = var_17 | var_3;
        term->curstype = var_3;
        term->dispcursy = (int)var_28;
      }
      var_20 = var_20 + 1;
      *(type_6 *)((int)ptr + var_16 + 4) = var_17;
      *(type_9 *)((int)ptr + var_16 + 8) = 0;
      var_12 = term->cols;
      *(type_3 *)((int)ptr + var_16) = var_18;
      var_16 = var_16 + 0xc;
    } while (var_20 < var_12);
    if (0 < var_12) {
      var_7 = local_7c->chars;
      var_37 = false;
      var_16 = (int)ptr - (int)var_7;
      var_29 = &var_7->attr;
      var_20 = 0;
      var_4 = 0;
      do {
        while( true ) {
          var_30 = var_4;
          var_17 = *var_29;
          var_19 = *(type_6 *)(var_16 + -4 + (int)var_29);
          if ((int)var_17 < 0) break;
          if ((var_19 == ((type_5 *)(var_29 + -1))->chr) &&
             ((var_17 & 0xfffffff) == *(type_6 *)(var_16 + (int)var_29))) {
            if (var_37) goto LAB_0003bae8;
          }
          else {
            if ((!var_37) && (var_20 < var_30)) {
              var_31 = &var_7[var_20].attr;
              do {
                *var_31 = *var_31 | 0x3ffff;
                var_31 = var_31 + 3;
              } while (var_29 != var_31);
              var_17 = *var_29;
            }
LAB_0003bae8:
            var_37 = true;
            *var_29 = var_17 | 0x3ffff;
          }
          var_29 = var_29 + 3;
          var_4 = var_30 + 1;
          if (var_12 == var_30 + 1) goto LAB_0003bb38;
        }
        var_20 = var_30;
        if ((var_19 != ((type_5 *)(var_29 + -1))->chr) ||
           (var_37 = false, *(type_6 *)(var_16 + (int)var_29) != (var_17 & 0xfffffff)))
        goto LAB_0003bae8;
        var_29 = var_29 + 3;
        var_4 = var_30 + 1;
      } while (var_12 != var_30 + 1);
LAB_0003bb38:
      var_43 = 0;
      var_37 = false;
      var_38 = local_7c->lattr != var_11->lattr;
      var_33 = 0;
      var_34 = 0;
      var_4 = 0;
      local_7c->lattr = var_11->lattr;
      var_25 = 0;
      bVar22 = var_38;
      do {
        var_47 = var_14 + var_25;
        puVar13 = (type_6 *)((int)ptr + var_25 * 0xc);
        var_17 = *puVar13;
        var_19 = puVar13[1];
        var_7 = local_7c->chars + var_25;
        bVar6 = true;
        if (((var_19 ^ var_7->attr) & 0x400000) == 0) {
          bVar6 = bVar22;
        }
        if (((var_17 & 0xfffffc00) == 0xd800) || (var_32 = 0, (var_17 & 0xfffffe00) == 0xf000)) {
          var_32 = var_17 & 0xffffff00;
        }
        bVar22 = var_32 != var_33 || (term->attr_mask & (var_19 ^ var_34)) != 0;
        if ((var_47->cc_next == 0) && ((var_25 < 1 || (var_47[-1].cc_next == 0)))) {
          bchr = term->ucsdata;
          if (!bVar6 && bchr->dbcs_screenfont == 0) {
LAB_0003bd3e:
            if (((var_17 == var_7->chr) && (var_19 == (var_7->attr & 0xfffffff))) ||
               ((!var_38 && (var_4 == 1)))) goto LAB_0003bd5e;
          }
          if (bVar22) goto LAB_0003bd5e;
          var_12 = var_4 * 4;
          var_16 = var_4 + 1;
LAB_0003bbca:
          if (var_17 != var_7->chr) goto LAB_0003bddd;
LAB_0003bbd6:
          if (((var_19 ^ var_7->attr) & 0xfffffff) != 0) goto LAB_0003bddd;
          var_36 = var_35(var_7,var_47,(type_7)bchr,in_stack_ffffff74);
          bVar22 = var_36 == 0;
          var_30 = var_4;
          bVar5 = true;
          if (var_36 != 0) {
            bVar5 = var_38;
          }
        }
        else {
          bchr = term->ucsdata;
          if (!bVar6 && bchr->dbcs_screenfont == 0) {
            bVar22 = true;
            goto LAB_0003bd3e;
          }
LAB_0003bd5e:
          if ((var_4 != 0) && ((bool)(var_37 | var_38))) {
            var_39(ctx_00,var_43,(int)var_28,local_6c,var_4,var_34,(type_6)var_11->lattr);
            if ((var_34 & 0x60000000) == 0) {
              bchr = term->ucsdata;
              var_7 = term->disptext[(int)var_28]->chars + var_25;
            }
            else {
              var_40(ctx_00,var_43,(int)var_28,local_6c,var_4,var_34,(type_6)var_11->lattr);
              bchr = term->ucsdata;
              var_7 = term->disptext[(int)var_28]->chars + var_25;
            }
          }
          if (((var_17 & 0xfffffc00) == 0xd800) || (var_33 = 0, (var_17 & 0xfffffe00) == 0xf000))
          {
            var_4 = bchr->dbcs_screenfont;
            var_33 = var_17 & 0xffffff00;
          }
          else {
            var_4 = bchr->dbcs_screenfont;
          }
          var_34 = var_19;
          if (var_4 == 0) {
            var_43 = var_25;
            var_12 = 0;
            var_16 = 1;
            var_4 = 0;
            var_38 = bVar6;
            goto LAB_0003bbca;
          }
          var_12 = 0;
          var_4 = 0;
          var_43 = var_25;
          var_16 = 1;
          var_37 = var_38;
          var_38 = bVar6;
          if (var_17 == var_7->chr) goto LAB_0003bbd6;
LAB_0003bddd:
          bVar22 = true;
          var_30 = var_4;
          bVar5 = true;
        }
        var_4 = var_16;
        if ((int)local_60 <= var_4) {
          local_60 = var_30 + 0x100;
          local_6c = (type_3 *)var_41(local_6c,local_60,4);
        }
        *(type_6 *)((int)local_6c + var_12) = var_17;
        var_12 = var_47->cc_next;
        var_7 = var_47;
        if (var_12 != 0) {
          do {
            while( true ) {
              var_16 = var_4;
              var_7 = var_7 + var_12;
              var_18 = var_7->chr;
              var_32 = var_18 & 0xffffff00;
              if (var_32 == 0xd900) break;
              if (var_32 != 0xda00) {
                if (var_32 == 0xd800) {
                  var_18 = term->ucsdata->unitab_line[var_18 & 0xff];
                }
                goto LAB_0003bf4c;
              }
              var_18 = term->ucsdata->unitab_scoacs[var_18 & 0xff];
              if (var_16 + 1 < (int)local_60) goto LAB_0003bf53;
LAB_0003bf9e:
              local_60 = var_16 + 0x100;
              local_6c = (type_3 *)var_41(local_6c,local_60,4);
              local_6c[var_16] = var_18;
              var_12 = var_7->cc_next;
              var_4 = var_16 + 1;
              if (var_12 == 0) goto LAB_0003bfcc;
            }
            var_18 = term->ucsdata->unitab_xterm[var_18 & 0xff];
LAB_0003bf4c:
            if ((int)local_60 <= var_16 + 1) goto LAB_0003bf9e;
LAB_0003bf53:
            local_6c[var_16] = var_18;
            var_12 = var_7->cc_next;
            var_4 = var_16 + 1;
          } while (var_12 != 0);
LAB_0003bfcc:
          var_4 = var_16 + 1;
          var_34 = var_34 | 0x80000000;
        }
        if (bVar22) {
          var_42(term->disptext[(int)var_28],var_25,var_47);
          var_7 = term->disptext[(int)var_28]->chars + var_25;
          var_7->chr = var_17;
          var_17 = var_19 | 0x80000000;
          if (var_43 != var_25) {
            var_17 = var_19;
          }
          var_7->attr = var_17;
        }
        var_12 = var_25 + 1;
        if ((var_19 & 0x400000) == 0) {
LAB_0003bc62:
          var_38 = bVar5;
          if (term->cols <= var_12) goto LAB_0003c09d;
        }
        else {
          if (term->cols <= var_12) {
            var_12 = var_25 + 2;
            goto LAB_0003bc62;
          }
          if ((var_10 == var_28) && (var_8 == var_12)) {
                    /* WARNING: Subroutine does not return */
            var_44(&UNK_0004647f + var_45,(char *)(var_45 + 0x46160),0x14f6,
                          (char *)(var_45 + 0x46d43));
          }
          destline = term->disptext[(int)var_28];
          var_16 = var_46(destline->chars + var_25 + 1,var_47 + 1);
          var_38 = true;
          if (var_16 != 0) {
            var_38 = bVar5;
          }
          bVar5 = var_38;
          var_42(destline,var_12,var_47 + 1);
          var_12 = var_25 + 2;
          var_38 = bVar5;
          if (term->cols <= var_12) goto LAB_0003c09d;
        }
        local_7c = term->disptext[(int)var_28];
        var_25 = var_12;
        bVar22 = bVar6;
      } while( true );
    }
  }
  local_7c->lattr = var_11->lattr;
  goto LAB_0003c0a8;
LAB_0003c09d:
  if ((bVar5) &&
     (var_39(ctx_00,var_43,(int)var_28,local_6c,var_4,var_34,(type_6)var_11->lattr),
     (var_34 & 0x60000000) != 0)) {
    var_40(ctx_00,var_43,(int)var_28,local_6c,var_4,var_34,(type_6)var_11->lattr);
  }
LAB_0003c0a8:
  if (var_11->temporary != 0) {
    var_9(var_11);
  }
  var_28 = (type_4 *)((int)&var_28->lattr + 1);
  if (term->rows <= (int)var_28) goto LAB_0003c0cc;
  goto LAB_0003b700;
}


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

void __regparm3 MASKED(int param_1)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  bool bVar5;
  bool bVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  short *psVar10;
  uint uVar11;
  int iVar12;
  uint *puVar13;
  uint *puVar14;
  uint uVar15;
  uint uVar16;
  undefined4 extraout_EDX;
  int iVar17;
  int iVar18;
  uint uVar19;
  int unaff_EDI;
  int iVar20;
  int iVar21;
  int iVar22;
  bool bVar23;
  bool bVar24;
  int local_84;
  int local_80;
  short *local_7c;
  int local_78;
  int local_6c;
  int local_60;
  uint local_58;
  int local_54;
  uint local_4c;
  int local_40;
  int local_3c;
  int local_34;
  uint local_20;
  
  FUN_00038693();
  local_6c = FUN_0002d1f0(0x400,4);
  iVar7 = FUN_0002d1f0(*(undefined4 *)(param_1 + 300),0xc);
  iVar2 = *(int *)(param_1 + 0xa8);
  iVar3 = *(int *)(param_1 + 0x138);
  local_20 = *(uint *)(param_1 + 0xb0);
  if (local_20 != 0) {
    local_20 = 0x20000000;
    if (*(int *)(param_1 + 0x134) != 0) {
      if (*(int *)(param_1 + 0xbc) == 0) {
        local_20 = 0x40000000;
        if (*(int *)(param_1 + 0x1100) != 0) {
          local_20 = 0;
        }
      }
      else {
        local_20 = 0x40000000;
      }
    }
    if (*(int *)(param_1 + 0x8c) != 0) {
      local_20 = local_20 | 0x10000000;
    }
  }
  iVar20 = *(int *)(param_1 + 0x6c) - *(int *)(param_1 + 0x10);
  iVar8 = FUN_0003adf0(0);
  local_34 = *(int *)(param_1 + 0x70);
  iVar9 = FUN_00039860(iVar20);
  if (iVar9 == 0) {
    iVar9 = *(int *)(iVar8 + 0x14);
  }
  else {
    local_34 = *(int *)(*(int *)(*(int *)(param_1 + 0x10cc) + iVar20 * 0x10 + 8) + local_34 * 4);
  }
  if (0 < local_34) {
    local_34 = local_34 - (uint)(*(int *)(iVar9 + local_34 * 0xc) == 0xdfff);
  }
  if (*(int *)(iVar8 + 0xc) != 0) {
    FUN_00039830();
  }
  iVar9 = *(int *)(param_1 + 0x20);
  if ((-1 < iVar9) &&
     (((iVar8 = *(int *)(param_1 + 0x1c), *(uint *)(param_1 + 0x24) != local_20 || (iVar20 != iVar9)
       ) || (local_34 != iVar8)))) {
    piVar1 = (int *)(*(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar9 * 4) + 0x14) + iVar8 * 0xc);
    if ((iVar8 < 1) || (*piVar1 != 0xdfff)) {
      iVar9 = *(int *)(param_1 + 300);
    }
    else {
      iVar9 = *(int *)(param_1 + 300);
      piVar1[-2] = piVar1[-2] | 0x3ffff;
    }
    if ((iVar8 < iVar9 + -1) && (piVar1[3] == 0xdfff)) {
      piVar1[4] = piVar1[4] | 0x3ffff;
    }
    piVar1[1] = piVar1[1] | 0x3ffff;
    *(undefined4 *)(param_1 + 0x24) = 0;
  }
  *(undefined4 *)(param_1 + 0x20) = 0xffffffff;
  *(undefined4 *)(param_1 + 0x1c) = 0xffffffff;
  if (*(int *)(param_1 + 0x128) < 1) {
LAB_0003c0cc:
    FUN_0002da80(iVar7);
    FUN_0002da80(local_6c);
    return;
  }
  local_60 = 0x400;
  local_3c = 0;
LAB_0003b700:
  iVar9 = *(int *)(param_1 + 0x10) + local_3c;
  psVar10 = (short *)FUN_0003adf0(0);
  local_54 = FUN_00039860(local_3c);
  if (local_54 == 0) {
    local_78 = 0;
    local_54 = *(int *)(psVar10 + 10);
  }
  else {
    local_78 = *(int *)(*(int *)(param_1 + 0x10cc) + local_3c * 0x10 + 0xc);
  }
  iVar17 = *(int *)(param_1 + 300);
  iVar8 = local_3c * 4;
  local_7c = *(short **)(*(int *)(param_1 + 0x18) + local_3c * 4);
  if (0 < iVar17) {
    local_84 = 0;
    iVar21 = 0;
    do {
      local_80 = local_84;
      if (local_78 != 0) {
        local_80 = *(int *)(local_78 + local_84 * 4);
      }
      uVar15 = *(uint *)(local_54 + iVar21);
      uVar11 = *(uint *)(local_54 + 4 + iVar21);
      if (*(int *)(param_1 + 0x10d4) == 0) {
        uVar11 = uVar11 & 0xfffc0000 | 0x20500;
      }
      if (*(int *)(param_1 + 0x1170) == 0) {
        if ((uVar11 & 0x1ff) - 0x10 < 0xf0) {
          uVar11 = (uint)((uint3)(uVar11 >> 8) & 0xfffffe | 1) << 8;
        }
        if ((uVar11 >> 9 & 0x1ff) - 0x10 < 0xf0) {
          uVar11 = uVar11 & 0xfffc01ff | 0x20400;
        }
      }
      uVar16 = uVar15 & 0xffffff00;
      if (uVar16 == 0xd900) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar15 & 0xff) * 4);
      }
      else if (uVar16 == 0xda00) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar15 & 0xff) * 4);
      }
      else if (uVar16 == 0xd800) {
        uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar15 & 0xff) * 4);
      }
      if ((local_84 < iVar17 + -1) && (*(int *)(local_54 + 0xc + iVar21) == 0xdfff)) {
        uVar11 = uVar11 | 0x400000;
      }
      uVar11 = uVar11 ^ (uint)((iVar2 == 0) != (iVar3 == 0)) << 0x14;
      if (*(int *)(param_1 + 0xe48) - 2U < 2) {
        iVar17 = *(int *)(param_1 + 0xe54);
        if (*(int *)(param_1 + 0xe4c) == 0) {
          if ((iVar17 < iVar9) || ((iVar9 == iVar17 && (*(int *)(param_1 + 0xe58) <= local_80)))) {
            if (iVar9 < *(int *)(param_1 + 0xe5c)) goto LAB_0003b988;
            if (iVar9 == *(int *)(param_1 + 0xe5c)) {
              iVar17 = *(int *)(param_1 + 0xe60);
              goto joined_r0x0003ba86;
            }
          }
        }
        else if (((iVar17 <= iVar9) && (*(int *)(param_1 + 0xe58) <= local_80)) &&
                (iVar9 <= *(int *)(param_1 + 0xe5c))) {
          iVar17 = *(int *)(param_1 + 0xe60);
joined_r0x0003ba86:
          if (local_80 < iVar17) {
LAB_0003b988:
            uVar11 = uVar11 ^ 0x100000;
          }
        }
      }
      if ((*(int *)(param_1 + 0xc4) != 0) && ((uVar11 & 0x200000) != 0)) {
        if ((*(int *)(param_1 + 0x134) != 0) && (*(int *)(param_1 + 0xc0) != 0)) {
          uVar15 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x490);
        }
        uVar11 = uVar11 & 0xffdfffff;
      }
      if ((*(uint *)(*(int *)(local_7c + 10) + iVar21) == uVar15) &&
         (uVar16 = ((uint *)(*(int *)(local_7c + 10) + iVar21))[1], (uVar16 & 0xf7fffff) == uVar11))
      {
        if ((uVar16 & 0x800000) != 0) {
          uVar11 = uVar11 | 0x800000;
        }
      }
      else if ((uVar11 & 0x400000) == 0) {
        iVar17 = FUN_0005a120(extraout_EDX,uVar15);
        if (iVar17 == 2) {
          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
          uVar11 = uVar11 | 0x800000;
        }
        else {
          local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
        }
      }
      if ((local_34 == local_84) && (iVar20 == local_3c)) {
        *(int *)(param_1 + 0x1c) = local_84;
        uVar11 = uVar11 | local_20;
        *(uint *)(param_1 + 0x24) = local_20;
        *(int *)(param_1 + 0x20) = local_3c;
      }
      local_84 = local_84 + 1;
      *(uint *)(iVar7 + 4 + iVar21) = uVar11;
      *(undefined4 *)(iVar7 + 8 + iVar21) = 0;
      iVar17 = *(int *)(param_1 + 300);
      *(uint *)(iVar7 + iVar21) = uVar15;
      iVar21 = iVar21 + 0xc;
    } while (local_84 < iVar17);
    if (0 < iVar17) {
      iVar9 = *(int *)(local_7c + 10);
      bVar4 = false;
      iVar18 = iVar7 - iVar9;
      puVar13 = (uint *)(iVar9 + 4);
      local_84 = 0;
      iVar21 = 0;
      do {
        while( true ) {
          iVar22 = iVar21;
          uVar15 = *puVar13;
          uVar11 = *(uint *)(iVar18 + -4 + (int)puVar13);
          if ((int)uVar15 < 0) break;
          if ((uVar11 == puVar13[-1]) && ((uVar15 & 0xfffffff) == *(uint *)(iVar18 + (int)puVar13)))
          {
            if (bVar4) goto LAB_0003bae8;
          }
          else {
            if ((!bVar4) && (local_84 < iVar22)) {
              puVar14 = (uint *)(iVar9 + 4 + local_84 * 0xc);
              do {
                *puVar14 = *puVar14 | 0x3ffff;
                puVar14 = puVar14 + 3;
              } while (puVar13 != puVar14);
              uVar15 = *puVar13;
            }
LAB_0003bae8:
            bVar4 = true;
            *puVar13 = uVar15 | 0x3ffff;
          }
          puVar13 = puVar13 + 3;
          iVar21 = iVar22 + 1;
          if (iVar17 == iVar22 + 1) goto LAB_0003bb38;
        }
        local_84 = iVar22;
        if ((uVar11 != puVar13[-1]) ||
           (bVar4 = false, *(uint *)(iVar18 + (int)puVar13) != (uVar15 & 0xfffffff)))
        goto LAB_0003bae8;
        puVar13 = puVar13 + 3;
        iVar21 = iVar22 + 1;
      } while (iVar17 != iVar22 + 1);
LAB_0003bb38:
      local_40 = 0;
      bVar4 = false;
      bVar24 = *local_7c != *psVar10;
      local_58 = 0;
      local_4c = 0;
      iVar9 = 0;
      *local_7c = *psVar10;
      local_80 = 0;
      bVar23 = bVar24;
      do {
        iVar17 = local_80 * 0xc;
        puVar13 = (uint *)(local_54 + iVar17);
        uVar15 = *(uint *)(iVar7 + iVar17);
        uVar11 = ((uint *)(iVar7 + iVar17))[1];
        puVar14 = (uint *)(*(int *)(local_7c + 10) + iVar17);
        bVar6 = true;
        if (((uVar11 ^ puVar14[1]) & 0x400000) == 0) {
          bVar6 = bVar23;
        }
        if (((uVar15 & 0xfffffc00) == 0xd800) || (uVar16 = 0, (uVar15 & 0xfffffe00) == 0xf000)) {
          uVar16 = uVar15 & 0xffffff00;
        }
        bVar23 = uVar16 != local_58 || (*(uint *)(param_1 + 0x106c) & (uVar11 ^ local_4c)) != 0;
        if ((puVar13[2] == 0) && ((local_80 < 1 || (puVar13[-1] == 0)))) {
          iVar21 = *(int *)(param_1 + 0x1090);
          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {
LAB_0003bd3e:
            if (((uVar15 == *puVar14) && (uVar11 == (puVar14[1] & 0xfffffff))) ||
               ((!bVar24 && (iVar9 == 1)))) goto LAB_0003bd5e;
          }
          if (bVar23) goto LAB_0003bd5e;
          iVar21 = iVar9 * 4;
          iVar18 = iVar9 + 1;
LAB_0003bbca:
          if (uVar15 != *puVar14) goto LAB_0003bddd;
LAB_0003bbd6:
          if (((uVar11 ^ puVar14[1]) & 0xfffffff) != 0) goto LAB_0003bddd;
          iVar12 = FUN_00039090();
          bVar23 = iVar12 == 0;
          iVar22 = iVar9;
          bVar5 = true;
          if (iVar12 != 0) {
            bVar5 = bVar24;
          }
        }
        else {
          iVar21 = *(int *)(param_1 + 0x1090);
          if (!bVar6 && *(int *)(iVar21 + 4) == 0) {
            bVar23 = true;
            goto LAB_0003bd3e;
          }
LAB_0003bd5e:
          if ((iVar9 != 0) && ((bool)(bVar4 | bVar24))) {
            FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
            if ((local_4c & 0x60000000) == 0) {
              iVar21 = *(int *)(param_1 + 0x1090);
              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14
                                                  ));
            }
            else {
              FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
              iVar21 = *(int *)(param_1 + 0x1090);
              puVar14 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14
                                                  ));
            }
          }
          if (((uVar15 & 0xfffffc00) == 0xd800) || (local_58 = 0, (uVar15 & 0xfffffe00) == 0xf000))
          {
            iVar9 = *(int *)(iVar21 + 4);
            local_58 = uVar15 & 0xffffff00;
          }
          else {
            iVar9 = *(int *)(iVar21 + 4);
          }
          local_4c = uVar11;
          if (iVar9 == 0) {
            local_40 = local_80;
            iVar21 = 0;
            iVar18 = 1;
            iVar9 = 0;
            bVar24 = bVar6;
            goto LAB_0003bbca;
          }
          iVar21 = 0;
          iVar9 = 0;
          local_40 = local_80;
          iVar18 = 1;
          bVar4 = bVar24;
          bVar24 = bVar6;
          if (uVar15 == *puVar14) goto LAB_0003bbd6;
LAB_0003bddd:
          bVar23 = true;
          iVar22 = iVar9;
          bVar5 = true;
        }
        iVar9 = iVar18;
        if (local_60 <= iVar9) {
          local_60 = iVar22 + 0x100;
          local_6c = FUN_0002d5f0(local_6c,local_60,4);
        }
        *(uint *)(local_6c + iVar21) = uVar15;
        uVar16 = puVar13[2];
        if (uVar16 != 0) {
          do {
            while( true ) {
              iVar21 = iVar9;
              puVar13 = puVar13 + uVar16 * 3;
              uVar16 = *puVar13;
              uVar19 = uVar16 & 0xffffff00;
              if (uVar19 == 0xd900) break;
              if (uVar19 != 0xda00) {
                if (uVar19 == 0xd800) {
                  uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x410 + (uVar16 & 0xff) * 4);
                }
                goto LAB_0003bf4c;
              }
              uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0x10 + (uVar16 & 0xff) * 4);
              if (iVar21 + 1 < local_60) goto LAB_0003bf53;
LAB_0003bf9e:
              local_60 = iVar21 + 0x100;
              local_6c = FUN_0002d5f0(local_6c,local_60,4);
              *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;
              uVar16 = puVar13[2];
              iVar9 = iVar21 + 1;
              if (uVar16 == 0) goto LAB_0003bfcc;
            }
            uVar16 = *(uint *)(*(int *)(param_1 + 0x1090) + 0xc10 + (uVar16 & 0xff) * 4);
LAB_0003bf4c:
            if (local_60 <= iVar21 + 1) goto LAB_0003bf9e;
LAB_0003bf53:
            *(uint *)(local_6c + -4 + (iVar21 + 1) * 4) = uVar16;
            uVar16 = puVar13[2];
            iVar9 = iVar21 + 1;
          } while (uVar16 != 0);
LAB_0003bfcc:
          iVar9 = iVar21 + 1;
          local_4c = local_4c | 0x80000000;
        }
        if (bVar23) {
          FUN_00039710();
          puVar13 = (uint *)(iVar17 + *(int *)(*(int *)(*(int *)(param_1 + 0x18) + iVar8) + 0x14));
          *puVar13 = uVar15;
          uVar15 = uVar11 | 0x80000000;
          if (local_40 != local_80) {
            uVar15 = uVar11;
          }
          puVar13[1] = uVar15;
        }
        iVar17 = local_80 + 1;
        if ((uVar11 & 0x400000) == 0) {
LAB_0003bc62:
          bVar24 = bVar5;
          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;
        }
        else {
          if (*(int *)(param_1 + 300) <= iVar17) {
            iVar17 = local_80 + 2;
            goto LAB_0003bc62;
          }
          if ((iVar20 == local_3c) && (local_34 == iVar17)) {
                    /* WARNING: Subroutine does not return */
            __assert_fail(&UNK_0004647f + unaff_EDI,(char *)(unaff_EDI + 0x46160),0x14f6,
                          (char *)(unaff_EDI + 0x46d43));
          }
          iVar17 = FUN_000390d0();
          bVar24 = true;
          if (iVar17 != 0) {
            bVar24 = bVar5;
          }
          bVar5 = bVar24;
          FUN_00039710();
          iVar17 = local_80 + 2;
          bVar24 = bVar5;
          if (*(int *)(param_1 + 300) <= iVar17) goto LAB_0003c09d;
        }
        local_7c = *(short **)(*(int *)(param_1 + 0x18) + iVar8);
        local_80 = iVar17;
        bVar23 = bVar6;
      } while( true );
    }
  }
  *local_7c = *psVar10;
  goto LAB_0003c0a8;
LAB_0003c09d:
  if ((bVar5) &&
     (FUN_0005aed0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10),
     (local_4c & 0x60000000) != 0)) {
    FUN_0005afa0(extraout_EDX,local_40,local_3c,local_6c,iVar9,local_4c,*psVar10);
  }
LAB_0003c0a8:
  if (*(int *)(psVar10 + 6) != 0) {
    FUN_00039830();
  }
  local_3c = local_3c + 1;
  if (*(int *)(param_1 + 0x128) <= local_3c) goto LAB_0003c0cc;
  goto LAB_0003b700;
}

