L L4D2node

BZ2_decompress

0x002966f0 · 9607 bytes · __cdecl

_Z14BZ2_decompressP6DState

Decompiled

undefined (1 param)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* BZ2_decompress(DState*) */

undefined4 BZ2_decompress(DState *param_1)

{
  uint *puVar1;
  ushort *puVar2;
  byte bVar3;
  DState DVar4;
  ushort uVar5;
  int *piVar6;
  char cVar7;
  DState DVar8;
  uint uVar9;
  uint uVar10;
  undefined4 uVar11;
  int iVar12;
  uint uVar13;
  DState *pDVar14;
  int iVar15;
  byte *pbVar16;
  int iVar17;
  DState *pDVar18;
  int iVar19;
  DState *pDVar20;
  int in_GS_OFFSET;
  DState local_8d;
  DState *local_8c;
  undefined4 local_88;
  uint local_84;
  int local_80;
  int local_7c;
  DState *local_78;
  DState *local_74;
  DState *local_70;
  int local_6c;
  int local_68;
  int local_64;
  uint local_60;
  uint local_5c;
  int local_58;
  DState *local_54;
  uint local_50;
  uint local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  int local_3c;
  DState *local_38;
  uint local_34;
  int local_30;
  DState aDStack_27 [7];
  int local_20;
  
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  iVar17 = *(int *)param_1;
  if (*(int *)(param_1 + 4) == 10) {
    *(undefined4 *)(param_1 + 0xfa14) = 0;
    pDVar20 = (DState *)0x0;
    *(undefined4 *)(param_1 + 0xfa18) = 0;
    *(undefined4 *)(param_1 + 0xfa1c) = 0;
    *(undefined4 *)(param_1 + 0xfa20) = 0;
    *(undefined4 *)(param_1 + 0xfa24) = 0;
    *(undefined4 *)(param_1 + 0xfa28) = 0;
    *(undefined4 *)(param_1 + 0xfa2c) = 0;
    *(undefined4 *)(param_1 + 0xfa30) = 0;
    *(undefined4 *)(param_1 + 0xfa34) = 0;
    *(undefined4 *)(param_1 + 0xfa38) = 0;
    *(undefined4 *)(param_1 + 0xfa3c) = 0;
    *(undefined4 *)(param_1 + 0xfa40) = 0;
    *(undefined4 *)(param_1 + 0xfa44) = 0;
    *(undefined4 *)(param_1 + 0xfa48) = 0;
    *(undefined4 *)(param_1 + 0xfa4c) = 0;
    *(undefined4 *)(param_1 + 0xfa50) = 0;
    *(undefined4 *)(param_1 + 0xfa54) = 0;
    *(undefined4 *)(param_1 + 0xfa58) = 0;
    *(undefined4 *)(param_1 + 0xfa5c) = 0;
    *(undefined4 *)(param_1 + 0xfa60) = 0;
    *(undefined4 *)(param_1 + 0xfa64) = 0;
    *(undefined4 *)(param_1 + 0xfa68) = 0;
    *(undefined4 *)(param_1 + 0xfa6c) = 0;
    *(undefined4 *)(param_1 + 0xfa70) = 0;
    local_78 = (DState *)0x0;
    local_74 = (DState *)0x0;
    local_70 = (DState *)0x0;
    local_80 = 0;
    local_84 = 0;
    local_4c = 0;
    local_34 = 0;
    local_30 = 0;
    local_88 = 0;
    local_5c = 0;
    local_7c = 0;
    local_3c = 0;
    local_38 = (DState *)0x0;
    local_6c = 0;
    local_44 = 0;
    local_58 = 0;
    local_68 = 0;
    local_54 = (DState *)0x0;
    local_50 = 0;
    local_48 = 0;
    local_64 = 0;
    local_60 = 0;
    local_40 = 0;
  }
  else {
    local_88 = *(undefined4 *)(param_1 + 0xfa50);
    local_78 = *(DState **)(param_1 + 0xfa70);
    local_74 = *(DState **)(param_1 + 0xfa6c);
    local_70 = *(DState **)(param_1 + 0xfa68);
    local_80 = *(int *)(param_1 + 0xfa64);
    local_84 = *(uint *)(param_1 + 0xfa60);
    local_4c = *(uint *)(param_1 + 0xfa5c);
    local_34 = *(uint *)(param_1 + 0xfa58);
    local_30 = *(int *)(param_1 + 0xfa54);
    local_5c = *(uint *)(param_1 + 0xfa4c);
    local_7c = *(int *)(param_1 + 0xfa48);
    local_3c = *(int *)(param_1 + 0xfa44);
    local_38 = *(DState **)(param_1 + 0xfa40);
    local_6c = *(int *)(param_1 + 0xfa3c);
    local_44 = *(uint *)(param_1 + 0xfa38);
    local_58 = *(int *)(param_1 + 0xfa34);
    local_68 = *(int *)(param_1 + 0xfa30);
    local_54 = *(DState **)(param_1 + 0xfa2c);
    local_50 = *(uint *)(param_1 + 0xfa28);
    local_48 = *(uint *)(param_1 + 0xfa24);
    local_64 = *(int *)(param_1 + 0xfa20);
    local_60 = *(uint *)(param_1 + 0xfa1c);
    local_40 = *(uint *)(param_1 + 0xfa18);
    pDVar20 = *(DState **)(param_1 + 0xfa14);
  }
  iVar15 = local_68;
  iVar12 = local_3c;
  switch(*(int *)(param_1 + 4)) {
  case 10:
    *(undefined4 *)(param_1 + 4) = 10;
    while (iVar19 = *(int *)(param_1 + 0x20), iVar19 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar19 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
    }
    iVar19 = iVar19 + -8;
    *(int *)(param_1 + 0x20) = iVar19;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'B') goto LAB_00298168;
    goto LAB_002985b8;
  case 0xb:
    iVar19 = *(int *)(param_1 + 0x20);
LAB_00298168:
    *(undefined4 *)(param_1 + 4) = 0xb;
    while (iVar19 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar19 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar19 = *(int *)(param_1 + 0x20);
    }
    iVar19 = iVar19 + -8;
    *(int *)(param_1 + 0x20) = iVar19;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'Z') goto LAB_00297ef3;
    goto LAB_002985b8;
  case 0xc:
    iVar19 = *(int *)(param_1 + 0x20);
LAB_00297ef3:
    *(undefined4 *)(param_1 + 4) = 0xc;
    while (iVar19 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar19 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar19 = *(int *)(param_1 + 0x20);
    }
    iVar19 = iVar19 + -8;
    *(int *)(param_1 + 0x20) = iVar19;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'h') goto LAB_00297e04;
LAB_002985b8:
    uVar11 = 0xfffffffb;
    goto LAB_00297b98;
  case 0xd:
    iVar19 = *(int *)(param_1 + 0x20);
LAB_00297e04:
    *(undefined4 *)(param_1 + 4) = 0xd;
    while (iVar19 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar19 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar19 = *(int *)(param_1 + 0x20);
    }
    *(int *)(param_1 + 0x20) = iVar19 + -8;
    uVar10 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar19 + -8) & 0x1f) & 0xff;
    if (8 < uVar10 - 0x31) {
      *(uint *)(param_1 + 0x24) = uVar10;
      uVar11 = 0xfffffffb;
      goto LAB_00297b98;
    }
    iVar19 = uVar10 - 0x30;
    *(int *)(param_1 + 0x24) = iVar19;
    if (param_1[0x28] == (DState)0x0) {
      iVar17 = (**(code **)(iVar17 + 0x24))(*(undefined4 *)(iVar17 + 0x2c),iVar19 * 400000,1);
      *(int *)(param_1 + 0xc4c) = iVar17;
LAB_00297ed8:
      if (iVar17 != 0) goto switchD_00296802_caseD_e;
    }
    else {
      uVar11 = (**(code **)(iVar17 + 0x24))(*(undefined4 *)(iVar17 + 0x2c),iVar19 * 200000);
      *(undefined4 *)(param_1 + 0xc50) = uVar11;
      iVar17 = (**(code **)(iVar17 + 0x24))
                         (*(undefined4 *)(iVar17 + 0x2c),*(int *)(param_1 + 0x24) * 100000 >> 1,1);
      *(int *)(param_1 + 0xc54) = iVar17;
      if (*(int *)(param_1 + 0xc50) != 0) goto LAB_00297ed8;
    }
    uVar11 = 0xfffffffd;
    goto LAB_00297b98;
  case 0xe:
switchD_00296802_caseD_e:
    *(undefined4 *)(param_1 + 4) = 0xe;
    while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    cVar7 = (char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f));
    if (cVar7 == '\x17') goto LAB_00297a2c;
    if (cVar7 == '1') goto LAB_002979bc;
    break;
  case 0xf:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_002979bc:
    *(undefined4 *)(param_1 + 4) = 0xf;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'A') goto LAB_00297948;
    break;
  case 0x10:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297948:
    *(undefined4 *)(param_1 + 4) = 0x10;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'Y') goto LAB_0029785c;
    break;
  case 0x11:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_0029785c:
    *(undefined4 *)(param_1 + 4) = 0x11;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == '&') goto LAB_002977e9;
    break;
  case 0x12:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_002977e9:
    *(undefined4 *)(param_1 + 4) = 0x12;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'S') goto LAB_00297740;
    break;
  case 0x13:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297740:
    *(undefined4 *)(param_1 + 4) = 0x13;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'Y') {
      iVar19 = *(int *)(param_1 + 0x2c);
      *(int *)(param_1 + 0x2c) = iVar19 + 1;
      if (1 < *(int *)(param_1 + 0x30)) {
        fprintf(_stderr,"\n    [%d: huff+mtf ",iVar19 + 1);
        iVar17 = *(int *)(param_1 + 0x20);
      }
      *(undefined4 *)(param_1 + 0xc58) = 0;
      goto LAB_002976c0;
    }
    break;
  case 0x14:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_002976c0:
    *(undefined4 *)(param_1 + 4) = 0x14;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc58) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
    goto LAB_00297a9c;
  case 0x15:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297a9c:
    *(undefined4 *)(param_1 + 4) = 0x15;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc58) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_002978cc:
    *(undefined4 *)(param_1 + 4) = 0x16;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc58) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_00297641:
    *(undefined4 *)(param_1 + 4) = 0x17;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc58) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_00296f26:
    *(undefined4 *)(param_1 + 4) = 0x18;
    while (iVar17 < 1) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -1;
    *(undefined4 *)(param_1 + 0x34) = 0;
    *(int *)(param_1 + 0x20) = iVar17;
    param_1[0x10] = (DState)((byte)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) & 1);
LAB_00296f90:
    *(undefined4 *)(param_1 + 4) = 0x19;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0x34) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0x34) << 8;
LAB_00297002:
    *(undefined4 *)(param_1 + 4) = 0x1a;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0x34) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0x34) << 8;
LAB_00297072:
    *(undefined4 *)(param_1 + 4) = 0x1b;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    uVar10 = iVar17 - 8;
    *(uint *)(param_1 + 0x20) = uVar10;
    uVar13 = *(uint *)(param_1 + 0x1c) >> ((byte)uVar10 & 0x1f) & 0xff |
             *(int *)(param_1 + 0x34) << 8;
    *(uint *)(param_1 + 0x34) = uVar13;
    if ((-1 < (int)uVar13) && ((int)uVar13 <= *(int *)(param_1 + 0x24) * 100000 + 10)) {
      pDVar20 = (DState *)0x0;
LAB_00297100:
      do {
        *(undefined4 *)(param_1 + 4) = 0x1c;
        while ((int)uVar10 < 1) {
          piVar6 = *(int **)param_1;
          if (piVar6[1] == 0) goto LAB_00298348;
          bVar3 = *(byte *)*piVar6;
          *(uint *)(param_1 + 0x20) = uVar10 + 8;
          *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
          *piVar6 = *piVar6 + 1;
          *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
          *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
          if (*(int *)(*(int *)param_1 + 8) == 0) {
            piVar6 = (int *)(*(int *)param_1 + 0xc);
            *piVar6 = *piVar6 + 1;
          }
          uVar10 = *(uint *)(param_1 + 0x20);
        }
        uVar10 = uVar10 - 1;
        *(uint *)(param_1 + 0x20) = uVar10;
        if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) == 0) {
          param_1[(int)pDVar20 + 0xd6c] = (DState)0x0;
        }
        else {
          param_1[(int)pDVar20 + 0xd6c] = (DState)0x1;
        }
        pDVar20 = (DState *)((int)pDVar20 + 1);
      } while ((int)pDVar20 < 0x10);
      iVar17 = 0;
      do {
        param_1[iVar17 + 0xc6c] = (DState)0x0;
        iVar17 = iVar17 + 1;
      } while (iVar17 != 0x100);
      pDVar20 = (DState *)0x0;
      do {
        if (param_1[(int)pDVar20 + 0xd6c] != (DState)0x0) {
          local_40 = 0;
switchD_00296802_caseD_1d:
          uVar10 = *(uint *)(param_1 + 0x20);
          do {
            *(undefined4 *)(param_1 + 4) = 0x1d;
            while ((int)uVar10 < 1) {
              piVar6 = *(int **)param_1;
              if (piVar6[1] == 0) goto LAB_00298348;
              bVar3 = *(byte *)*piVar6;
              *(uint *)(param_1 + 0x20) = uVar10 + 8;
              *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
              *piVar6 = *piVar6 + 1;
              *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
              *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
              if (*(int *)(*(int *)param_1 + 8) == 0) {
                piVar6 = (int *)(*(int *)param_1 + 0xc);
                *piVar6 = *piVar6 + 1;
              }
              uVar10 = *(uint *)(param_1 + 0x20);
            }
            uVar10 = uVar10 - 1;
            *(uint *)(param_1 + 0x20) = uVar10;
            if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) != 0) {
              param_1[local_40 + (int)pDVar20 * 0x10 + 0xc6c] = (DState)0x1;
            }
            local_40 = local_40 + 1;
          } while ((int)local_40 < 0x10);
        }
        pDVar20 = (DState *)((int)pDVar20 + 1);
      } while ((int)pDVar20 < 0x10);
      *(undefined4 *)(param_1 + 0xc68) = 0;
      iVar19 = 0;
      iVar17 = 0;
      do {
        if (param_1[iVar17 + 0xc6c] != (DState)0x0) {
          param_1[iVar19 + 0xd7c] = SUB41(iVar17,0);
          iVar19 = iVar19 + 1;
          *(int *)(param_1 + 0xc68) = iVar19;
        }
        iVar17 = iVar17 + 1;
      } while (iVar17 != 0x100);
      if (iVar19 != 0) {
        local_64 = iVar19 + 2;
switchD_00296802_caseD_1e:
        *(undefined4 *)(param_1 + 4) = 0x1e;
        while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 3) {
          piVar6 = *(int **)param_1;
          if (piVar6[1] == 0) goto LAB_00298348;
          bVar3 = *(byte *)*piVar6;
          *(int *)(param_1 + 0x20) = iVar17 + 8;
          *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
          *piVar6 = *piVar6 + 1;
          *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
          *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
          if (*(int *)(*(int *)param_1 + 8) == 0) {
            piVar6 = (int *)(*(int *)param_1 + 0xc);
            *piVar6 = *piVar6 + 1;
          }
        }
        iVar17 = iVar17 + -3;
        *(int *)(param_1 + 0x20) = iVar17;
        local_48 = *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 7;
        if (local_48 - 2 < 5) {
LAB_00297c8e:
          *(undefined4 *)(param_1 + 4) = 0x1f;
          while (iVar17 < 0xf) {
            piVar6 = *(int **)param_1;
            if (piVar6[1] == 0) goto LAB_00298348;
            bVar3 = *(byte *)*piVar6;
            *(int *)(param_1 + 0x20) = iVar17 + 8;
            *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
            *piVar6 = *piVar6 + 1;
            *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
            *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
            if (*(int *)(*(int *)param_1 + 8) == 0) {
              piVar6 = (int *)(*(int *)param_1 + 0xc);
              *piVar6 = *piVar6 + 1;
            }
            iVar17 = *(int *)(param_1 + 0x20);
          }
          uVar10 = iVar17 - 0xf;
          *(uint *)(param_1 + 0x20) = uVar10;
          local_50 = *(uint *)(param_1 + 0x1c) >> ((byte)uVar10 & 0x1f) & 0x7fff;
          if (local_50 != 0) {
            local_40 = 0;
            pDVar20 = (DState *)0x0;
LAB_00297b18:
            while( true ) {
              *(undefined4 *)(param_1 + 4) = 0x20;
              while ((int)uVar10 < 1) {
                piVar6 = *(int **)param_1;
                if (piVar6[1] == 0) goto LAB_00298348;
                bVar3 = *(byte *)*piVar6;
                *(uint *)(param_1 + 0x20) = uVar10 + 8;
                *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
                *piVar6 = *piVar6 + 1;
                *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
                *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
                if (*(int *)(*(int *)param_1 + 8) == 0) {
                  piVar6 = (int *)(*(int *)param_1 + 0xc);
                  *piVar6 = *piVar6 + 1;
                }
                uVar10 = *(uint *)(param_1 + 0x20);
              }
              uVar10 = uVar10 - 1;
              *(uint *)(param_1 + 0x20) = uVar10;
              if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) != 0) goto code_r0x00297b80;
              param_1[(int)pDVar20 + 0x650e] = local_40._0_1_;
              pDVar20 = (DState *)((int)pDVar20 + 1);
              if ((int)local_50 <= (int)pDVar20) break;
              local_40 = 0;
            }
            uVar10 = 0;
            DVar8 = (DState)0x0;
            if (0 < (int)local_48) {
              do {
                aDStack_27[uVar10 + 1] = DVar8;
                DVar8 = (DState)((char)DVar8 + 1);
                uVar10 = (uint)(byte)DVar8;
              } while ((int)uVar10 < (int)local_48);
            }
            if ((int)local_50 < 1) {
              pDVar20 = (DState *)0;
            }
            else {
              pDVar18 = param_1 + 0x650e;
              pDVar14 = pDVar18 + local_50;
              do {
                DVar8 = *pDVar18;
                uVar10 = (uint)(byte)DVar8;
                DVar4 = aDStack_27[uVar10 + 1];
                if (DVar8 != (DState)0x0) {
                  while( true ) {
                    DVar8 = (DState)((char)DVar8 - 1);
                    aDStack_27[uVar10 + 1] = aDStack_27[uVar10];
                    if (DVar8 == (DState)0x0) break;
                    uVar10 = (uint)(byte)DVar8;
                  }
                }
                pDVar18[-0x4652] = DVar4;
                pDVar18 = pDVar18 + 1;
                aDStack_27[1] = DVar4;
                pDVar20 = (DState *)local_50;
              } while (pDVar18 != pDVar14);
            }
            for (local_60 = 0; (int)local_60 < (int)local_48; local_60 = local_60 + 1) {
switchD_00296802_caseD_21:
              *(undefined4 *)(param_1 + 4) = 0x21;
              while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 5) {
                piVar6 = *(int **)param_1;
                if (piVar6[1] == 0) goto LAB_00298348;
                bVar3 = *(byte *)*piVar6;
                *(int *)(param_1 + 0x20) = iVar17 + 8;
                *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
                *piVar6 = *piVar6 + 1;
                *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
                *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
                if (*(int *)(*(int *)param_1 + 8) == 0) {
                  piVar6 = (int *)(*(int *)param_1 + 0xc);
                  *piVar6 = *piVar6 + 1;
                }
              }
              *(int *)(param_1 + 0x20) = iVar17 + -5;
              local_5c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -5) & 0x1f) & 0x1f;
              for (pDVar20 = (DState *)0x0; (int)pDVar20 < local_64;
                  pDVar20 = (DState *)((int)pDVar20 + 1)) {
                while( true ) {
                  if (0x13 < local_5c - 1) goto LAB_00297b8c;
switchD_00296802_caseD_22:
                  *(undefined4 *)(param_1 + 4) = 0x22;
                  while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
                    piVar6 = *(int **)param_1;
                    if (piVar6[1] == 0) goto LAB_00298348;
                    bVar3 = *(byte *)*piVar6;
                    *(int *)(param_1 + 0x20) = iVar17 + 8;
                    *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
                    *piVar6 = *piVar6 + 1;
                    *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
                    *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
                    if (*(int *)(*(int *)param_1 + 8) == 0) {
                      piVar6 = (int *)(*(int *)param_1 + 0xc);
                      *piVar6 = *piVar6 + 1;
                    }
                  }
                  uVar10 = iVar17 - 1;
                  *(uint *)(param_1 + 0x20) = uVar10;
                  if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) == 0) break;
LAB_00296b4e:
                  *(undefined4 *)(param_1 + 4) = 0x23;
                  while ((int)uVar10 < 1) {
                    piVar6 = *(int **)param_1;
                    if (piVar6[1] == 0) goto LAB_00298348;
                    bVar3 = *(byte *)*piVar6;
                    *(uint *)(param_1 + 0x20) = uVar10 + 8;
                    *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
                    *piVar6 = *piVar6 + 1;
                    *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
                    *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
                    if (*(int *)(*(int *)param_1 + 8) == 0) {
                      piVar6 = (int *)(*(int *)param_1 + 0xc);
                      *piVar6 = *piVar6 + 1;
                    }
                    uVar10 = *(uint *)(param_1 + 0x20);
                  }
                  *(uint *)(param_1 + 0x20) = uVar10 - 1;
                  uVar13 = local_5c + 1;
                  local_5c = local_5c - 1;
                  if ((*(uint *)(param_1 + 0x1c) >> ((byte)(uVar10 - 1) & 0x1f) & 1) == 0) {
                    local_5c = uVar13;
                  }
                }
                param_1[(int)pDVar20 + 0xab60U + local_60 * 0x102] = local_5c._0_1_;
              }
            }
            if ((int)local_48 < 1) {
              local_60 = 0;
            }
            else {
              local_38 = param_1 + 0xb16c;
              local_54 = param_1;
              pDVar20 = param_1 + 0xab60;
              do {
                if (local_64 < 1) {
                  uVar10 = 0;
                  uVar13 = 0x20;
                }
                else {
                  uVar10 = 0;
                  uVar13 = 0x20;
                  pDVar18 = pDVar20;
                  do {
                    uVar9 = (uint)(byte)*pDVar18;
                    if (uVar10 < uVar9) {
                      uVar10 = uVar9;
                    }
                    if (uVar9 < uVar13) {
                      uVar13 = uVar9;
                    }
                    pDVar18 = pDVar18 + 1;
                  } while (pDVar18 != pDVar20 + local_64);
                }
                pDVar18 = pDVar20 + 0x102;
                BZ2_hbCreateDecodeTables
                          ((int *)local_38,(int *)(local_38 + 0x1830),(int *)(local_38 + 0x3060),
                           (uchar *)pDVar20,uVar13,uVar10,local_64);
                local_38 = local_38 + 0x408;
                *(uint *)(local_54 + 0xf9fc) = uVar13;
                pDVar20 = pDVar18;
                local_54 = local_54 + 4;
              } while (pDVar18 != param_1 + 0xab60 + local_48 * 0x102);
              local_60 = local_48;
            }
            local_54 = (DState *)(*(int *)(param_1 + 0xc68) + 1);
            local_6c = *(int *)(param_1 + 0x24) * 100000;
            iVar17 = 0;
            do {
              *(undefined4 *)(param_1 + iVar17 * 4 + 0x40) = 0;
              iVar17 = iVar17 + 1;
            } while (iVar17 != 0x100);
            iVar17 = 0xff0;
            pDVar20 = param_1;
            do {
              iVar15 = 0xf;
              do {
                param_1[iVar15 + iVar17 + 0xe7c] = (DState)((char)iVar17 + (char)iVar15);
                iVar15 = iVar15 + -1;
              } while (iVar15 != -1);
              *(int *)(pDVar20 + 0x1eb8) = iVar17;
              iVar17 = iVar17 + -0x10;
              pDVar20 = pDVar20 + -4;
            } while (iVar17 != 0xef0);
            if ((int)local_50 < 1) {
              local_38 = (DState *)0x0;
              pDVar20 = (DState *)0x100;
              uVar11 = 0xfffffffc;
              local_58 = 0;
              local_68 = 0;
              goto LAB_00297b98;
            }
            local_84 = (uint)(byte)param_1[0x1ebc];
            local_38 = (DState *)0x0;
            local_58 = 0x31;
            local_68 = 0;
            local_80 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
            iVar17 = local_84 * 0x408;
            local_70 = param_1 + iVar17 + 0xb16c;
            local_78 = param_1 + iVar17 + 0xe1cc;
            local_74 = param_1 + iVar17 + 0xc99c;
            pDVar20 = (DState *)0x100;
            local_30 = local_80;
            goto switchD_00296802_caseD_24;
          }
        }
      }
    }
    break;
  case 0x16:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_002978cc;
  case 0x17:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00297641;
  case 0x18:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00296f26;
  case 0x19:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00296f90;
  case 0x1a:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00297002;
  case 0x1b:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00297072;
  case 0x1c:
    uVar10 = *(uint *)(param_1 + 0x20);
    goto LAB_00297100;
  case 0x1d:
    goto switchD_00296802_caseD_1d;
  case 0x1e:
    goto switchD_00296802_caseD_1e;
  case 0x1f:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00297c8e;
  case 0x20:
    uVar10 = *(uint *)(param_1 + 0x20);
    goto LAB_00297b18;
  case 0x21:
    goto switchD_00296802_caseD_21;
  case 0x22:
    goto switchD_00296802_caseD_22;
  case 0x23:
    uVar10 = *(uint *)(param_1 + 0x20);
    goto LAB_00296b4e;
  case 0x24:
switchD_00296802_caseD_24:
    *(undefined4 *)(param_1 + 4) = 0x24;
    while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
    }
    *(int *)(param_1 + 0x20) = iVar17 - local_30;
    local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
               (1 << ((byte)local_30 & 0x1f)) - 1U;
    while (iVar15 = local_68, local_30 < 0x15) {
      if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) goto LAB_00297369;
      local_30 = local_30 + 1;
switchD_00296802_caseD_25:
      *(undefined4 *)(param_1 + 4) = 0x25;
      while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
        piVar6 = *(int **)param_1;
        if (piVar6[1] == 0) goto LAB_00298348;
        bVar3 = *(byte *)*piVar6;
        *(int *)(param_1 + 0x20) = iVar17 + 8;
        *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
        *piVar6 = *piVar6 + 1;
        *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
        *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
        if (*(int *)(*(int *)param_1 + 8) == 0) {
          piVar6 = (int *)(*(int *)param_1 + 0xc);
          *piVar6 = *piVar6 + 1;
        }
      }
      *(int *)(param_1 + 0x20) = iVar17 + -1;
      local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
      local_34 = local_34 << 1 | local_4c;
    }
    break;
  case 0x25:
    goto switchD_00296802_caseD_25;
  case 0x26:
    goto switchD_00296802_caseD_26;
  case 0x27:
    goto switchD_00296802_caseD_27;
  case 0x28:
    goto switchD_00296802_caseD_28;
  case 0x29:
    goto switchD_00296802_caseD_29;
  case 0x2a:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297a2c:
    *(undefined4 *)(param_1 + 4) = 0x2a;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'r') goto LAB_00297d84;
    break;
  case 0x2b:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297d84:
    *(undefined4 *)(param_1 + 4) = 0x2b;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'E') goto LAB_00297d13;
    break;
  case 0x2c:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297d13:
    *(undefined4 *)(param_1 + 4) = 0x2c;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == '8') goto LAB_00297fde;
    break;
  case 0x2d:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297fde:
    *(undefined4 *)(param_1 + 4) = 0x2d;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'P') goto LAB_00297f64;
    break;
  case 0x2e:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_00297f64:
    *(undefined4 *)(param_1 + 4) = 0x2e;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == -0x70) {
      *(undefined4 *)(param_1 + 0xc5c) = 0;
      goto LAB_002982c8;
    }
    break;
  case 0x2f:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_002982c8:
    *(undefined4 *)(param_1 + 4) = 0x2f;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc5c) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
    goto LAB_0029824c;
  case 0x30:
    iVar17 = *(int *)(param_1 + 0x20);
LAB_0029824c:
    *(undefined4 *)(param_1 + 4) = 0x30;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc5c) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
LAB_002980da:
    *(undefined4 *)(param_1 + 4) = 0x31;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    iVar17 = iVar17 + -8;
    *(int *)(param_1 + 0x20) = iVar17;
    *(uint *)(param_1 + 0xc5c) =
         *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
LAB_00298054:
    *(undefined4 *)(param_1 + 4) = 0x32;
    while (iVar17 < 8) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
      iVar17 = *(int *)(param_1 + 0x20);
    }
    *(undefined4 *)(param_1 + 4) = 1;
    *(int *)(param_1 + 0x20) = iVar17 + -8;
    *(uint *)(param_1 + 0xc5c) =
         *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -8) & 0x1f) & 0xff |
         *(int *)(param_1 + 0xc5c) << 8;
    uVar11 = 4;
    goto LAB_00297b98;
  case 0x31:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_002980da;
  case 0x32:
    iVar17 = *(int *)(param_1 + 0x20);
    goto LAB_00298054;
  default:
    BZ2_bz__AssertH__fail(0xfa1);
    BZ2_bz__AssertH__fail(0xfa2);
    uVar11 = 0;
    goto LAB_00297b98;
  }
LAB_00297b8c:
  local_3c = iVar12;
  local_68 = iVar15;
  uVar11 = 0xfffffffc;
LAB_00297b98:
  *(DState **)(param_1 + 0xfa14) = pDVar20;
  *(uint *)(param_1 + 0xfa18) = local_40;
  *(uint *)(param_1 + 0xfa1c) = local_60;
  *(int *)(param_1 + 0xfa20) = local_64;
  *(uint *)(param_1 + 0xfa24) = local_48;
  *(uint *)(param_1 + 0xfa28) = local_50;
  *(DState **)(param_1 + 0xfa2c) = local_54;
  *(int *)(param_1 + 0xfa30) = local_68;
  *(int *)(param_1 + 0xfa34) = local_58;
  *(uint *)(param_1 + 0xfa38) = local_44;
  *(int *)(param_1 + 0xfa3c) = local_6c;
  *(DState **)(param_1 + 0xfa40) = local_38;
  *(int *)(param_1 + 0xfa44) = local_3c;
  *(int *)(param_1 + 0xfa48) = local_7c;
  *(uint *)(param_1 + 0xfa4c) = local_5c;
  *(undefined4 *)(param_1 + 0xfa50) = local_88;
  *(int *)(param_1 + 0xfa54) = local_30;
  *(uint *)(param_1 + 0xfa58) = local_34;
  *(uint *)(param_1 + 0xfa5c) = local_4c;
  *(uint *)(param_1 + 0xfa60) = local_84;
  *(int *)(param_1 + 0xfa64) = local_80;
  *(DState **)(param_1 + 0xfa68) = local_70;
  *(DState **)(param_1 + 0xfa6c) = local_74;
  *(DState **)(param_1 + 0xfa70) = local_78;
  if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
    return uVar11;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
code_r0x00297b80:
  local_40 = local_40 + 1;
  if ((int)local_48 <= (int)local_40) goto LAB_00297b8c;
  goto LAB_00297b18;
LAB_00297369:
  iVar15 = local_68;
  iVar12 = local_3c;
  if (0x101 < local_34 - *(int *)(local_74 + local_30 * 4)) goto LAB_00297b8c;
  local_44 = *(uint *)(local_78 + (local_34 - *(int *)(local_74 + local_30 * 4)) * 4);
  while( true ) {
    local_3c = iVar12;
    iVar15 = local_68;
    iVar12 = local_3c;
    if ((DState *)local_44 == local_54) {
      local_54 = (DState *)local_44;
      if ((-1 < *(int *)(param_1 + 0x34)) && (*(int *)(param_1 + 0x34) < (int)local_38)) {
        *(undefined4 *)(param_1 + 0xc) = 0;
        param_1[8] = (DState)0x0;
        *(undefined4 *)(param_1 + 0xc60) = 0xffffffff;
        *(undefined4 *)(param_1 + 4) = 2;
        if (1 < *(int *)(param_1 + 0x30)) {
          fwrite("rt+rld",1,6,_stderr);
        }
        *(undefined4 *)(param_1 + 0x444) = 0;
        iVar17 = 1;
        do {
          *(undefined4 *)(param_1 + iVar17 * 4 + 0x444) =
               *(undefined4 *)(param_1 + iVar17 * 4 + 0x3c);
          iVar17 = iVar17 + 1;
        } while (iVar17 != 0x101);
        iVar17 = 1;
        do {
          *(int *)(param_1 + iVar17 * 4 + 0x444) =
               *(int *)(param_1 + iVar17 * 4 + 0x444) + *(int *)(param_1 + iVar17 * 4 + 0x440);
          iVar17 = iVar17 + 1;
        } while (iVar17 != 0x101);
        if (param_1[0x28] == (DState)0x0) {
          iVar17 = 0;
          do {
            uVar10 = iVar17 << 8;
            bVar3 = *(byte *)(*(int *)(param_1 + 0xc4c) + iVar17 * 4);
            iVar17 = iVar17 + 1;
            puVar1 = (uint *)(*(int *)(param_1 + 0xc4c) +
                             *(int *)(param_1 + (uint)bVar3 * 4 + 0x444) * 4);
            *puVar1 = *puVar1 | uVar10;
            *(int *)(param_1 + (uint)bVar3 * 4 + 0x444) =
                 *(int *)(param_1 + (uint)bVar3 * 4 + 0x444) + 1;
          } while (iVar17 < (int)local_38);
          iVar17 = *(int *)(param_1 + 0xc4c);
          pDVar20 = (DState *)1;
          if (0 < (int)local_38) {
            pDVar20 = local_38;
          }
          uVar10 = *(uint *)(iVar17 + *(int *)(param_1 + 0x34) * 4);
          *(undefined4 *)(param_1 + 0x440) = 0;
          uVar10 = uVar10 >> 8;
          *(uint *)(param_1 + 0x38) = uVar10;
          if (param_1[0x10] == (DState)0x0) {
            uVar10 = *(uint *)(iVar17 + uVar10 * 4);
            *(undefined4 *)(param_1 + 0x440) = 1;
            *(uint *)(param_1 + 0x38) = uVar10 >> 8;
            *(uint *)(param_1 + 0x3c) = uVar10 & 0xff;
            uVar11 = 0;
          }
          else {
            *(undefined4 *)(param_1 + 0x14) = 0;
            *(undefined4 *)(param_1 + 0x18) = 0;
            uVar10 = *(uint *)(iVar17 + uVar10 * 4);
            *(undefined4 *)(param_1 + 0x440) = 1;
            *(uint *)(param_1 + 0x38) = uVar10 >> 8;
            iVar17 = BZ2_rNums;
            *(undefined4 *)(param_1 + 0x18) = 1;
            *(int *)(param_1 + 0x14) = iVar17 + -1;
            *(uint *)(param_1 + 0x3c) = uVar10 & 0xff ^ (uint)(iVar17 + -1 == 1);
            uVar11 = 0;
          }
        }
        else {
          iVar17 = 0;
          do {
            *(undefined4 *)(param_1 + iVar17 * 4 + 0x848) =
                 *(undefined4 *)(param_1 + iVar17 * 4 + 0x444);
            iVar17 = iVar17 + 1;
          } while (iVar17 != 0x101);
          uVar10 = 0;
          do {
            pbVar16 = (byte *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
            bVar3 = *pbVar16;
            *(short *)pbVar16 = (short)*(undefined4 *)(param_1 + (uint)bVar3 * 4 + 0x848);
            pbVar16 = (byte *)(((int)uVar10 >> 1) + *(int *)(param_1 + 0xc54));
            if ((uVar10 & 1) == 0) {
              *pbVar16 = *pbVar16 & 0xf0 | (byte)param_1[(uint)bVar3 * 4 + 0x84a];
            }
            else {
              *pbVar16 = *pbVar16 & 0xf |
                         (byte)((int)*(short *)(param_1 + (uint)bVar3 * 4 + 0x84a) << 4);
            }
            *(int *)(param_1 + (uint)bVar3 * 4 + 0x848) =
                 *(int *)(param_1 + (uint)bVar3 * 4 + 0x848) + 1;
            uVar10 = uVar10 + 1;
          } while ((int)uVar10 < (int)local_38);
          uVar10 = *(uint *)(param_1 + 0x34);
          iVar17 = *(int *)(param_1 + 0xc54);
          iVar15 = *(int *)(param_1 + 0xc50);
          pDVar20 = (DState *)
                    ((*(byte *)(iVar17 + ((int)uVar10 >> 1)) >> ((char)uVar10 * '\x04' & 4U) & 0xf)
                     << 0x10 | (uint)*(ushort *)(iVar15 + uVar10 * 2));
          while( true ) {
            puVar2 = (ushort *)(iVar15 + (int)pDVar20 * 2);
            local_40 = (*(byte *)(iVar17 + ((int)pDVar20 >> 1)) >> ((char)pDVar20 * '\x04' & 4U) &
                       0xf) << 0x10 | (uint)*puVar2;
            *puVar2 = (ushort)uVar10;
            pbVar16 = (byte *)(((int)pDVar20 >> 1) + *(int *)(param_1 + 0xc54));
            if (((uint)pDVar20 & 1) == 0) {
              *pbVar16 = *pbVar16 & 0xf0 | (byte)(uVar10 >> 0x10);
            }
            else {
              *pbVar16 = *pbVar16 & 0xf | (byte)(((int)uVar10 >> 0x10) << 4);
            }
            if (pDVar20 == (DState *)*(uint *)(param_1 + 0x34)) break;
            iVar15 = *(int *)(param_1 + 0xc50);
            iVar17 = *(int *)(param_1 + 0xc54);
            uVar10 = (uint)pDVar20;
            pDVar20 = (DState *)local_40;
          }
          *(DState **)(param_1 + 0x38) = pDVar20;
          *(undefined4 *)(param_1 + 0x440) = 0;
          if (param_1[0x10] == (DState)0x0) {
            uVar11 = BZ2_indexIntoF((int)pDVar20,(int *)(param_1 + 0x444));
            uVar10 = *(uint *)(param_1 + 0x38);
            *(undefined4 *)(param_1 + 0x3c) = uVar11;
            bVar3 = *(byte *)(*(int *)(param_1 + 0xc54) + (uVar10 >> 1));
            uVar5 = *(ushort *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
            *(int *)(param_1 + 0x440) = *(int *)(param_1 + 0x440) + 1;
            *(uint *)(param_1 + 0x38) =
                 (bVar3 >> ((char)uVar10 * '\x04' & 4U) & 0xf) << 0x10 | (uint)uVar5;
            uVar11 = 0;
          }
          else {
            *(undefined4 *)(param_1 + 0x14) = 0;
            *(undefined4 *)(param_1 + 0x18) = 0;
            uVar13 = BZ2_indexIntoF((int)pDVar20,(int *)(param_1 + 0x444));
            uVar10 = *(uint *)(param_1 + 0x38);
            *(uint *)(param_1 + 0x3c) = uVar13;
            bVar3 = *(byte *)(*(int *)(param_1 + 0xc54) + (uVar10 >> 1));
            uVar5 = *(ushort *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
            *(int *)(param_1 + 0x440) = *(int *)(param_1 + 0x440) + 1;
            *(uint *)(param_1 + 0x38) =
                 (bVar3 >> ((char)uVar10 * '\x04' & 4U) & 0xf) << 0x10 | (uint)uVar5;
            iVar17 = *(int *)(param_1 + 0x14);
            if (iVar17 == 0) {
              iVar17 = (&BZ2_rNums)[*(int *)(param_1 + 0x18)];
              iVar15 = *(int *)(param_1 + 0x18) + 1;
              *(int *)(param_1 + 0x18) = iVar15;
              *(int *)(param_1 + 0x14) = iVar17;
              if (iVar15 == 0x200) {
                *(undefined4 *)(param_1 + 0x18) = 0;
              }
            }
            *(int *)(param_1 + 0x14) = iVar17 + -1;
            *(uint *)(param_1 + 0x3c) = iVar17 + -1 == 1 ^ uVar13;
            uVar11 = 0;
          }
        }
        goto LAB_00297b98;
      }
      goto LAB_00297b8c;
    }
    if (1 < local_44) break;
    iVar17 = 2;
    local_7c = 1;
    local_3c = -1;
    while( true ) {
      if (local_44 == 0) {
        iVar15 = local_3c + local_7c;
      }
      else {
        iVar15 = local_3c + iVar17;
        if (local_44 != 1) {
          iVar15 = local_3c;
        }
      }
      local_3c = iVar15;
      local_7c = iVar17;
      if (local_58 == 0) {
        iVar17 = local_68 + 1;
        if ((int)local_50 <= iVar17) {
          uVar11 = 0xfffffffc;
          local_68 = iVar17;
          goto LAB_00297b98;
        }
        local_84 = (uint)(byte)param_1[local_68 + 0x1ebd];
        local_58 = 0x31;
        local_30 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
        iVar15 = local_84 * 0x408;
        local_70 = param_1 + iVar15 + 0xb16c;
        local_78 = param_1 + iVar15 + 0xe1cc;
        local_74 = param_1 + iVar15 + 0xc99c;
        local_68 = iVar17;
      }
      else {
        local_58 = local_58 + -1;
        local_30 = local_80;
      }
      local_80 = local_30;
switchD_00296802_caseD_26:
      *(undefined4 *)(param_1 + 4) = 0x26;
      while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
        piVar6 = *(int **)param_1;
        if (piVar6[1] == 0) goto LAB_00298348;
        bVar3 = *(byte *)*piVar6;
        *(int *)(param_1 + 0x20) = iVar17 + 8;
        *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
        *piVar6 = *piVar6 + 1;
        *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
        *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
        if (*(int *)(*(int *)param_1 + 8) == 0) {
          piVar6 = (int *)(*(int *)param_1 + 0xc);
          *piVar6 = *piVar6 + 1;
        }
      }
      *(int *)(param_1 + 0x20) = iVar17 - local_30;
      local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
                 (1 << ((byte)local_30 & 0x1f)) - 1U;
      while( true ) {
        iVar15 = local_68;
        iVar12 = local_3c;
        if (0x14 < local_30) goto LAB_00297b8c;
        if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) break;
        local_30 = local_30 + 1;
switchD_00296802_caseD_27:
        *(undefined4 *)(param_1 + 4) = 0x27;
        while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
          piVar6 = *(int **)param_1;
          if (piVar6[1] == 0) goto LAB_00298348;
          bVar3 = *(byte *)*piVar6;
          *(int *)(param_1 + 0x20) = iVar17 + 8;
          *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
          *piVar6 = *piVar6 + 1;
          *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
          *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
          if (*(int *)(*(int *)param_1 + 8) == 0) {
            piVar6 = (int *)(*(int *)param_1 + 0xc);
            *piVar6 = *piVar6 + 1;
          }
        }
        *(int *)(param_1 + 0x20) = iVar17 + -1;
        local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
        local_34 = local_34 << 1 | local_4c;
      }
      if (0x101 < local_34 - *(int *)(local_74 + local_30 * 4)) goto LAB_00297b8c;
      local_44 = *(uint *)(local_78 + (local_34 - *(int *)(local_74 + local_30 * 4)) * 4);
      if (1 < local_44) break;
      iVar17 = local_7c * 2;
    }
    iVar12 = local_3c + 1;
    DVar8 = param_1[(byte)param_1[*(int *)(param_1 + 0x1e7c) + 0xe7c] + 0xd7c];
    *(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) =
         *(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) + iVar12;
    if (param_1[0x28] == (DState)0x0) {
      if (0 < iVar12) {
        if (local_6c <= (int)local_38) goto LAB_00297b8c;
        iVar17 = (int)local_38 * 4;
        iVar19 = (int)local_38 + 1;
        while( true ) {
          local_38 = (DState *)((int)local_38 + 1);
          iVar12 = iVar12 + -1;
          *(uint *)(*(int *)(param_1 + 0xc4c) + iVar17) = (uint)(byte)DVar8;
          if (iVar12 == 0) break;
          iVar17 = iVar17 + 4;
          if (iVar12 == (iVar19 + local_3c) - local_6c) goto LAB_00297b8c;
        }
      }
    }
    else if (0 < iVar12) {
      if (local_6c <= (int)local_38) goto LAB_00297b8c;
      iVar19 = (int)local_38 * 2;
      iVar17 = (int)local_38 + 1;
      while( true ) {
        local_38 = (DState *)((int)local_38 + 1);
        iVar12 = iVar12 + -1;
        *(ushort *)(*(int *)(param_1 + 0xc50) + iVar19) = (ushort)(byte)DVar8;
        if (iVar12 == 0) break;
        iVar19 = iVar19 + 2;
        if (iVar12 == (iVar17 + local_3c) - local_6c) goto LAB_00297b8c;
      }
    }
  }
  if (local_6c <= (int)local_38) goto LAB_00297b8c;
  uVar10 = local_44 - 1;
  if (uVar10 < 0x10) {
    iVar17 = *(int *)(param_1 + 0x1e7c);
    local_8d = param_1[iVar17 + 0xe7c + uVar10];
    if (3 < uVar10) {
      iVar15 = (local_44 - 1) + iVar17;
      uVar10 = local_44 - 5 >> 2;
      do {
        param_1[iVar15 + 0xe7c] = param_1[iVar15 + 0xe7b];
        param_1[iVar15 + 0xe7b] = param_1[iVar15 + 0xe7a];
        param_1[iVar15 + 0xe7a] = param_1[iVar15 + 0xe79];
        param_1[iVar15 + 0xe79] = param_1[iVar15 + 0xe78];
        iVar15 = iVar15 + -4;
      } while (iVar15 != (local_44 - 5) + iVar17 + uVar10 * -4);
      uVar10 = (local_44 - 5) + uVar10 * -4;
    }
    for (; uVar10 != 0; uVar10 = uVar10 - 1) {
      param_1[uVar10 + iVar17 + 0xe7c] = param_1[uVar10 + iVar17 + 0xe7b];
    }
    param_1[iVar17 + 0xe7c] = local_8d;
  }
  else {
    uVar13 = uVar10 >> 4;
    iVar17 = *(int *)(param_1 + uVar13 * 4 + 0x1e7c);
    iVar15 = (uVar10 & 0xf) + iVar17;
    local_8d = param_1[iVar15 + 0xe7c];
    if (iVar17 < iVar15) {
      pDVar18 = param_1 + iVar15 + 0xe7b;
      do {
        pDVar14 = pDVar18 + -1;
        pDVar18[1] = *pDVar18;
        pDVar18 = pDVar14;
      } while (pDVar14 != param_1 + iVar17 + 0xe7b);
    }
    *(int *)(param_1 + uVar13 * 4 + 0x1e7c) = iVar17 + 1;
    iVar17 = iVar17 + 1;
    local_8c = param_1 + uVar13 * 4 + 0x1e7c;
    do {
      pDVar18 = local_8c + -4;
      iVar15 = *(int *)(local_8c + -4);
      *(int *)local_8c = iVar17 + -1;
      param_1[iVar17 + 0xe7b] = param_1[iVar15 + 0xe8b];
      iVar17 = iVar15;
      local_8c = pDVar18;
    } while (pDVar18 != param_1 + 0x1e7c);
    iVar17 = *(int *)(param_1 + 0x1e7c);
    iVar15 = iVar17 + -1;
    *(int *)(param_1 + 0x1e7c) = iVar15;
    param_1[iVar17 + 0xe7b] = local_8d;
    if (iVar15 == 0) {
      iVar17 = 0xfff;
      local_8c = param_1;
      do {
        iVar15 = *(int *)(local_8c + 0x1eb8);
        pDVar18 = param_1 + iVar15 + 0xe8b;
        do {
          pDVar14 = pDVar18 + -1;
          pDVar18[iVar17 + (-0xf - iVar15)] = *pDVar18;
          pDVar18 = pDVar14;
        } while (pDVar14 != param_1 + iVar15 + 0xe7b);
        iVar15 = iVar17 + -0xf;
        iVar17 = iVar17 + -0x10;
        *(int *)(local_8c + 0x1eb8) = iVar15;
        local_8c = local_8c + -4;
      } while (iVar17 != 0xeff);
    }
  }
  DVar8 = param_1[(byte)local_8d + 0xd7c];
  *(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) =
       *(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) + 1;
  if (param_1[0x28] == (DState)0x0) {
    *(uint *)(*(int *)(param_1 + 0xc4c) + (int)local_38 * 4) = (uint)(byte)DVar8;
  }
  else {
    *(ushort *)(*(int *)(param_1 + 0xc50) + (int)local_38 * 2) = (ushort)(byte)DVar8;
  }
  local_38 = (DState *)((int)local_38 + 1);
  if (local_58 == 0) {
    iVar15 = local_68 + 1;
    if ((int)local_50 <= iVar15) goto LAB_00297b8c;
    local_84 = (uint)(byte)param_1[local_68 + 0x1ebd];
    local_58 = 0x31;
    local_30 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
    iVar17 = local_84 * 0x408;
    local_70 = param_1 + iVar17 + 0xb16c;
    local_78 = param_1 + iVar17 + 0xe1cc;
    local_74 = param_1 + iVar17 + 0xc99c;
    local_68 = iVar15;
  }
  else {
    local_58 = local_58 + -1;
    local_30 = local_80;
  }
  local_80 = local_30;
switchD_00296802_caseD_28:
  *(undefined4 *)(param_1 + 4) = 0x28;
  while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
    piVar6 = *(int **)param_1;
    if (piVar6[1] == 0) goto LAB_00298348;
    bVar3 = *(byte *)*piVar6;
    *(int *)(param_1 + 0x20) = iVar17 + 8;
    *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
    *piVar6 = *piVar6 + 1;
    *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
    *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
    if (*(int *)(*(int *)param_1 + 8) == 0) {
      piVar6 = (int *)(*(int *)param_1 + 0xc);
      *piVar6 = *piVar6 + 1;
    }
  }
  *(int *)(param_1 + 0x20) = iVar17 - local_30;
  local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
             (1 << ((byte)local_30 & 0x1f)) - 1U;
  while( true ) {
    iVar15 = local_68;
    iVar12 = local_3c;
    if (0x14 < local_30) goto LAB_00297b8c;
    if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) break;
    local_30 = local_30 + 1;
switchD_00296802_caseD_29:
    *(undefined4 *)(param_1 + 4) = 0x29;
    while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
      piVar6 = *(int **)param_1;
      if (piVar6[1] == 0) goto LAB_00298348;
      bVar3 = *(byte *)*piVar6;
      *(int *)(param_1 + 0x20) = iVar17 + 8;
      *(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
      *piVar6 = *piVar6 + 1;
      *(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
      *(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
      if (*(int *)(*(int *)param_1 + 8) == 0) {
        piVar6 = (int *)(*(int *)param_1 + 0xc);
        *piVar6 = *piVar6 + 1;
      }
    }
    *(int *)(param_1 + 0x20) = iVar17 + -1;
    local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
    local_34 = local_34 << 1 | local_4c;
  }
  goto LAB_00297369;
LAB_00298348:
  uVar11 = 0;
  goto LAB_00297b98;
}

SourceMod gamedata

paste into addons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)

Just a Signatures{} block, ready to drop into a gamedata file. Wire it up in your plugin however you like - SDKCall, DHooks, raw memory ops, or anything else.



        

        

          

Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.

Return-type handling cheatsheet (DHookReturn)