L L4D2node

ReadUsercmd

0x0057b480 · 6690 bytes · __cdecl

_Z11ReadUsercmdP7bf_readP8CUserCmdS2_

Decompiled

undefined (3 params)

/* WARNING: Type propagation algorithm not settling */
/* ReadUsercmd(bf_read*, CUserCmd*, CUserCmd*) */

void ReadUsercmd(bf_read *param_1,CUserCmd *param_2,CUserCmd *param_3)

{
  bf_read *pbVar1;
  undefined4 *puVar2;
  uint *puVar3;
  uint uVar4;
  undefined4 uVar5;
  uint uVar6;
  char cVar7;
  CUserCmd CVar8;
  uint *puVar9;
  ushort uVar10;
  int iVar11;
  uint uVar12;
  longdouble lVar13;
  ushort local_24;
  uint local_20;
  
  if (param_2 != param_3) {
    *(undefined4 *)(param_2 + 4) = *(undefined4 *)(param_3 + 4);
    *(undefined4 *)(param_2 + 8) = *(undefined4 *)(param_3 + 8);
    *(undefined4 *)(param_2 + 0xc) = *(undefined4 *)(param_3 + 0xc);
    *(undefined4 *)(param_2 + 0x10) = *(undefined4 *)(param_3 + 0x10);
    *(undefined4 *)(param_2 + 0x14) = *(undefined4 *)(param_3 + 0x14);
    *(undefined4 *)(param_2 + 0x18) = *(undefined4 *)(param_3 + 0x18);
    *(undefined4 *)(param_2 + 0x1c) = *(undefined4 *)(param_3 + 0x1c);
    *(undefined4 *)(param_2 + 0x20) = *(undefined4 *)(param_3 + 0x20);
    *(undefined4 *)(param_2 + 0x24) = *(undefined4 *)(param_3 + 0x24);
    param_2[0x28] = param_3[0x28];
    *(undefined4 *)(param_2 + 0x2c) = *(undefined4 *)(param_3 + 0x2c);
    *(undefined4 *)(param_2 + 0x30) = *(undefined4 *)(param_3 + 0x30);
    *(undefined4 *)(param_2 + 0x34) = *(undefined4 *)(param_3 + 0x34);
    *(undefined2 *)(param_2 + 0x38) = *(undefined2 *)(param_3 + 0x38);
    *(undefined2 *)(param_2 + 0x3a) = *(undefined2 *)(param_3 + 0x3a);
    param_2[0x3c] = param_3[0x3c];
    *(undefined4 *)(param_2 + 0x40) = *(undefined4 *)(param_3 + 0x40);
    *(undefined4 *)(param_2 + 0x44) = *(undefined4 *)(param_3 + 0x44);
    *(undefined4 *)(param_2 + 0x48) = *(undefined4 *)(param_3 + 0x48);
    *(undefined4 *)(param_2 + 0x4c) = *(undefined4 *)(param_3 + 0x4c);
    *(undefined4 *)(param_2 + 0x50) = *(undefined4 *)(param_3 + 0x50);
    *(undefined4 *)(param_2 + 0x54) = *(undefined4 *)(param_3 + 0x54);
  }
  uVar12 = *(uint *)(param_1 + 0x10) & 1;
  pbVar1 = param_1 + 0x14;
  *(int *)pbVar1 = *(int *)pbVar1 + -1;
  if (*(int *)pbVar1 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      goto LAB_0057ba45;
    }
    if (puVar2 <= *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
      goto LAB_0057ba45;
    }
    param_1[4] = (bf_read)0x1;
    *(undefined4 *)(param_1 + 0x10) = 0;
    if (uVar12 != 0) goto LAB_0057ba4d;
LAB_0057b592:
    uVar12 = *(int *)(param_3 + 4) + 1;
  }
  else {
    *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 1;
LAB_0057ba45:
    if (uVar12 == 0) goto LAB_0057b592;
LAB_0057ba4d:
    iVar11 = *(int *)(param_1 + 0x14);
    if (iVar11 < 0x20) {
      puVar9 = *(uint **)(param_1 + 0x18);
      uVar12 = *(uint *)(param_1 + 0x10);
      if (puVar9 == *(uint **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(uint **)(param_1 + 0x18) = puVar9 + 1;
        uVar12 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
        param_1[4] = (bf_read)0x1;
      }
      else {
        if (puVar9 < *(uint **)(param_1 + 0x1c)) {
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          uVar6 = *puVar9;
          *(uint *)(param_1 + 0x10) = uVar6;
          if (param_1[4] == (bf_read)0x0) {
            *(int *)(param_1 + 0x14) = iVar11;
            local_20._0_1_ = (byte)(0x20 - iVar11);
            uVar12 = (uVar6 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                     ((byte)iVar11 & 0x1f) | uVar12;
            *(uint *)(param_1 + 0x10) = uVar6 >> ((byte)local_20 & 0x1f);
            goto LAB_0057b598;
          }
        }
        else {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        uVar12 = 0;
      }
    }
    else {
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      uVar12 = *(uint *)(param_1 + 0x10);
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c390;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c390:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
    }
  }
LAB_0057b598:
  *(uint *)(param_2 + 4) = uVar12;
  uVar12 = *(uint *)(param_1 + 0x10) & 1;
  pbVar1 = param_1 + 0x14;
  *(int *)pbVar1 = *(int *)pbVar1 + -1;
  if (*(int *)pbVar1 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      goto LAB_0057bac5;
    }
    if (puVar2 <= *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
      goto LAB_0057bac5;
    }
    param_1[4] = (bf_read)0x1;
    *(undefined4 *)(param_1 + 0x10) = 0;
    if (uVar12 != 0) goto LAB_0057bacd;
LAB_0057b5d9:
    uVar12 = *(int *)(param_3 + 8) + 1;
  }
  else {
    *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 1;
LAB_0057bac5:
    if (uVar12 == 0) goto LAB_0057b5d9;
LAB_0057bacd:
    iVar11 = *(int *)(param_1 + 0x14);
    if (iVar11 < 0x20) {
      uVar12 = *(uint *)(param_1 + 0x10);
      puVar9 = *(uint **)(param_1 + 0x18);
      if (puVar9 == *(uint **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(uint **)(param_1 + 0x18) = puVar9 + 1;
        uVar12 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
        param_1[4] = (bf_read)0x1;
      }
      else {
        if (puVar9 < *(uint **)(param_1 + 0x1c)) {
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          uVar6 = *puVar9;
          *(uint *)(param_1 + 0x10) = uVar6;
          if (param_1[4] == (bf_read)0x0) {
            *(int *)(param_1 + 0x14) = iVar11;
            uVar12 = (*(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4) & uVar6) <<
                     ((byte)iVar11 & 0x1f) | uVar12;
            *(uint *)(param_1 + 0x10) = uVar6 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057b5df;
          }
        }
        else {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        uVar12 = 0;
      }
    }
    else {
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      uVar12 = *(uint *)(param_1 + 0x10);
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c34f;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c34f:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
    }
  }
LAB_0057b5df:
  *(uint *)(param_2 + 8) = uVar12;
  iVar11 = *(int *)(param_1 + 0x14) + -1;
  *(int *)(param_1 + 0x14) = iVar11;
  uVar12 = *(uint *)(param_1 + 0x10) & 1;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 != 0) {
        local_20 = 0;
        iVar11 = 1;
LAB_0057bb4c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c308;
          }
        }
        local_20 = 0;
        goto LAB_0057c308;
      }
      iVar11 = 1;
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c2d0;
    }
  }
  else {
    local_20 = *(uint *)(param_1 + 0x10) >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bb4c;
      }
LAB_0057c2d0:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c2fd;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c2fd:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c308:
      *(uint *)(param_2 + 0xc) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      iVar11 = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      if (uVar12 != 0) {
        local_20 = 0;
LAB_0057bb8c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c2b8;
          }
        }
        local_20 = 0;
        goto LAB_0057c2b8;
      }
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c280;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bb8c;
      }
LAB_0057c280:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c2ad;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c2ad:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c2b8:
      *(uint *)(param_2 + 0x10) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      iVar11 = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      if (uVar12 != 0) {
        local_20 = 0;
LAB_0057bbcc:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c268;
          }
        }
        local_20 = 0;
        goto LAB_0057c268;
      }
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c230;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bbcc;
      }
LAB_0057c230:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c25d;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c25d:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c268:
      *(uint *)(param_2 + 0x14) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 != 0) {
        local_20 = 0;
        iVar11 = 1;
LAB_0057bc0c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c218;
          }
        }
        local_20 = 0;
        goto LAB_0057c218;
      }
      iVar11 = 1;
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c1e0;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bc0c;
      }
LAB_0057c1e0:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c20d;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c20d:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c218:
      *(uint *)(param_2 + 0x18) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 != 0) {
        local_20 = 0;
        iVar11 = 1;
LAB_0057bc4c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c1c8;
          }
        }
        local_20 = 0;
        goto LAB_0057c1c8;
      }
      iVar11 = 1;
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c190;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bc4c;
      }
LAB_0057c190:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c1bd;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c1bd:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c1c8:
      *(uint *)(param_2 + 0x1c) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 != 0) {
        local_20 = 0;
        iVar11 = 1;
LAB_0057bc8c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          param_1[4] = (bf_read)0x1;
        }
        else if (puVar9 < puVar3) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(uint **)(param_1 + 0x18) = puVar3 + 1;
          uVar12 = *puVar3;
          *(uint *)(param_1 + 0x10) = uVar12;
          if (param_1[4] == (bf_read)0x0) {
            uVar5 = *(undefined4 *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar11;
            local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                       ((byte)uVar5 & 0x1f) | local_20;
            *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
            goto LAB_0057c180;
          }
        }
        local_20 = 0;
        goto LAB_0057c180;
      }
      iVar11 = 1;
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c148;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bc8c;
      }
LAB_0057c148:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c175;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c175:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c180:
      *(uint *)(param_2 + 0x20) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 != 0) {
        local_20 = 0;
        iVar11 = 1;
LAB_0057bccc:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          local_20 = 0;
          *(undefined4 *)(param_1 + 0x10) = 0;
          param_1[4] = (bf_read)0x1;
        }
        else {
          if (puVar9 < puVar3) {
            param_1[4] = (bf_read)0x1;
            *(undefined4 *)(param_1 + 0x10) = 0;
          }
          else {
            *(uint **)(param_1 + 0x18) = puVar3 + 1;
            uVar12 = *puVar3;
            *(uint *)(param_1 + 0x10) = uVar12;
            if (param_1[4] == (bf_read)0x0) {
              uVar5 = *(undefined4 *)(param_1 + 0x14);
              *(int *)(param_1 + 0x14) = iVar11;
              local_20 = (uVar12 & *(uint *)(CBitBuffer::s_nMaskTable + (0x20 - iVar11) * 4)) <<
                         ((byte)uVar5 & 0x1f) | local_20;
              *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x20 - iVar11) & 0x1f);
              goto LAB_0057c134;
            }
          }
          local_20 = 0;
        }
        goto LAB_0057c134;
      }
      iVar11 = 1;
      local_20 = 0;
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c100;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x20) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bccc;
      }
LAB_0057c100:
      *(int *)(param_1 + 0x14) = iVar11 + -0x20;
      if (iVar11 + -0x20 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else {
          if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            goto LAB_0057c12d;
          }
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
LAB_0057c12d:
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
LAB_0057c134:
      *(uint *)(param_2 + 0x24) = local_20;
      local_20 = *(uint *)(param_1 + 0x10);
      iVar11 = *(int *)(param_1 + 0x14);
    }
  }
  iVar11 = iVar11 + -1;
  uVar12 = local_20 & 1;
  *(int *)(param_1 + 0x14) = iVar11;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      local_20 = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      iVar11 = 1;
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      if (uVar12 != 0) {
        local_20 = 0;
LAB_0057bd3e:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          CVar8 = (CUserCmd)0x0;
          *(undefined4 *)(param_1 + 0x10) = 0;
          param_1[4] = (bf_read)0x1;
        }
        else {
          if (puVar9 < puVar3) {
            param_1[4] = (bf_read)0x1;
            *(undefined4 *)(param_1 + 0x10) = 0;
          }
          else {
            *(uint **)(param_1 + 0x18) = puVar3 + 1;
            uVar12 = *puVar3;
            *(uint *)(param_1 + 0x10) = uVar12;
            if (param_1[4] == (bf_read)0x0) {
              uVar6 = *(uint *)(CBitBuffer::s_nMaskTable + (8 - iVar11) * 4);
              uVar5 = *(undefined4 *)(param_1 + 0x14);
              *(int *)(param_1 + 0x14) = iVar11 + 0x18;
              *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(8 - iVar11) & 0x1f);
              local_24._0_1_ = (byte)((uVar6 & uVar12) << ((byte)uVar5 & 0x1f));
              CVar8 = (CUserCmd)((byte)local_24 | (byte)local_20);
              goto LAB_0057c556;
            }
          }
          CVar8 = (CUserCmd)0x0;
        }
LAB_0057c556:
        param_2[0x28] = CVar8;
        local_20 = *(uint *)(param_1 + 0x10);
        iVar11 = *(int *)(param_1 + 0x14);
      }
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c0b8;
    }
  }
  else {
    local_20 = local_20 >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 8) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057bd3e;
      }
LAB_0057c0b8:
      *(int *)(param_1 + 0x14) = iVar11 + -8;
      CVar8 = SUB41(local_20,0);
      if (iVar11 + -8 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
        *(uint *)(param_1 + 0x10) = local_20 >> 8;
      }
      goto LAB_0057c556;
    }
  }
  *(int *)(param_1 + 0x14) = iVar11 + -1;
  if (iVar11 + -1 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = local_20 >> 1;
  }
  if ((local_20 & 1) != 0) {
    iVar11 = *(int *)(param_1 + 0x14);
    if (iVar11 < 0xb) {
      uVar12 = *(uint *)(param_1 + 0x10);
      puVar9 = *(uint **)(param_1 + 0x18);
      if (puVar9 == *(uint **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(uint **)(param_1 + 0x18) = puVar9 + 1;
        uVar12 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
        param_1[4] = (bf_read)0x1;
      }
      else {
        if (puVar9 < *(uint **)(param_1 + 0x1c)) {
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          uVar6 = *puVar9;
          *(uint *)(param_1 + 0x10) = uVar6;
          if (param_1[4] == (bf_read)0x0) {
            uVar4 = *(uint *)(CBitBuffer::s_nMaskTable + (0xb - iVar11) * 4);
            *(int *)(param_1 + 0x14) = iVar11 + 0x15;
            uVar12 = (uVar4 & uVar6) << ((byte)iVar11 & 0x1f) | uVar12;
            *(uint *)(param_1 + 0x10) = uVar6 >> ((byte)(0xb - iVar11) & 0x1f);
            goto LAB_0057c040;
          }
        }
        else {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        uVar12 = 0;
      }
    }
    else {
      *(int *)(param_1 + 0x14) = iVar11 + -0xb;
      uVar12 = *(uint *)(param_1 + 0x10) & 0x7ff;
      if (iVar11 + -0xb == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        }
        else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
        *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 0xb;
      }
    }
LAB_0057c040:
    *(uint *)(param_2 + 0x2c) = uVar12;
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    if (*(int *)pbVar1 == 0) {
      puVar2 = *(undefined4 **)(param_1 + 0x18);
      *(undefined4 *)(param_1 + 0x14) = 0x20;
      if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(undefined4 *)(param_1 + 0x10) = 0;
        *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      }
      else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
        param_1[4] = (bf_read)0x1;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        *(undefined4 *)(param_1 + 0x10) = *puVar2;
      }
    }
    else {
      *(uint *)(param_1 + 0x10) = uVar12 >> 1;
    }
    if ((uVar12 & 1) != 0) {
      iVar11 = *(int *)(param_1 + 0x14);
      if (iVar11 < 6) {
        uVar12 = *(uint *)(param_1 + 0x10);
        puVar9 = *(uint **)(param_1 + 0x18);
        if (puVar9 == *(uint **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          uVar12 = 0;
          *(undefined4 *)(param_1 + 0x10) = 0;
          param_1[4] = (bf_read)0x1;
        }
        else {
          if (*(uint **)(param_1 + 0x1c) < puVar9) {
            param_1[4] = (bf_read)0x1;
            *(undefined4 *)(param_1 + 0x10) = 0;
          }
          else {
            *(uint **)(param_1 + 0x18) = puVar9 + 1;
            uVar6 = *puVar9;
            *(uint *)(param_1 + 0x10) = uVar6;
            if (param_1[4] == (bf_read)0x0) {
              uVar4 = *(uint *)(CBitBuffer::s_nMaskTable + (6 - iVar11) * 4);
              *(int *)(param_1 + 0x14) = iVar11 + 0x1a;
              uVar12 = (uVar4 & uVar6) << ((byte)iVar11 & 0x1f) | uVar12;
              *(uint *)(param_1 + 0x10) = uVar6 >> ((byte)(6 - iVar11) & 0x1f);
              goto LAB_0057c0ab;
            }
          }
          uVar12 = 0;
        }
      }
      else {
        *(int *)(param_1 + 0x14) = iVar11 + -6;
        uVar12 = *(uint *)(param_1 + 0x10) & 0x3f;
        if (iVar11 + -6 == 0) {
          puVar2 = *(undefined4 **)(param_1 + 0x18);
          *(undefined4 *)(param_1 + 0x14) = 0x20;
          if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
            *(undefined4 *)(param_1 + 0x14) = 1;
            *(undefined4 *)(param_1 + 0x10) = 0;
            *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          }
          else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
            param_1[4] = (bf_read)0x1;
            *(undefined4 *)(param_1 + 0x10) = 0;
          }
          else {
            *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
            *(undefined4 *)(param_1 + 0x10) = *puVar2;
          }
        }
        else {
          *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 6;
        }
      }
LAB_0057c0ab:
      *(uint *)(param_2 + 0x30) = uVar12;
    }
  }
  uVar12 = MD5_PseudoRandom(*(uint *)(param_2 + 4));
  *(uint *)(param_2 + 0x34) = uVar12 & 0x7fffffff;
  iVar11 = *(int *)(param_1 + 0x14) + -1;
  *(int *)(param_1 + 0x14) = iVar11;
  uVar12 = *(uint *)(param_1 + 0x10) & 1;
  if (iVar11 == 0) {
    puVar3 = *(uint **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    puVar9 = *(uint **)(param_1 + 0x1c);
    if (puVar3 == puVar9) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar3 + 1;
      if (uVar12 == 0) {
        iVar11 = 1;
        local_20 = 0;
      }
      else {
        local_20 = 0;
        iVar11 = 1;
LAB_0057be2c:
        puVar3 = *(uint **)(param_1 + 0x18);
        if (puVar3 == puVar9) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(uint **)(param_1 + 0x18) = puVar9 + 1;
          local_24 = 0;
          *(undefined4 *)(param_1 + 0x10) = 0;
          param_1[4] = (bf_read)0x1;
        }
        else {
          if (puVar9 < puVar3) {
            param_1[4] = (bf_read)0x1;
            *(undefined4 *)(param_1 + 0x10) = 0;
          }
          else {
            *(uint **)(param_1 + 0x18) = puVar3 + 1;
            uVar12 = *puVar3;
            *(uint *)(param_1 + 0x10) = uVar12;
            if (param_1[4] == (bf_read)0x0) {
              uVar6 = *(uint *)(CBitBuffer::s_nMaskTable + (0x10 - iVar11) * 4);
              uVar5 = *(undefined4 *)(param_1 + 0x14);
              *(int *)(param_1 + 0x14) = iVar11 + 0x10;
              *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x10 - iVar11) & 0x1f);
              local_24 = (ushort)((uVar6 & uVar12) << ((byte)uVar5 & 0x1f));
              local_24 = local_24 | (ushort)local_20;
              goto LAB_0057c430;
            }
          }
          local_24 = 0;
        }
LAB_0057c430:
        *(ushort *)(param_2 + 0x38) = local_24;
        local_20 = *(uint *)(param_1 + 0x10);
        iVar11 = *(int *)(param_1 + 0x14);
      }
    }
    else {
      if (puVar9 < puVar3) {
        param_1[4] = (bf_read)0x1;
        local_20 = 0;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar3 + 1;
        local_20 = *puVar3;
        *(uint *)(param_1 + 0x10) = local_20;
      }
      iVar11 = 0x20;
      if (uVar12 != 0) goto LAB_0057c3f0;
    }
  }
  else {
    local_20 = *(uint *)(param_1 + 0x10) >> 1;
    *(uint *)(param_1 + 0x10) = local_20;
    if (uVar12 != 0) {
      if (iVar11 < 0x10) {
        puVar9 = *(uint **)(param_1 + 0x1c);
        goto LAB_0057be2c;
      }
LAB_0057c3f0:
      *(int *)(param_1 + 0x14) = iVar11 + -0x10;
      local_24 = (ushort)local_20;
      if (iVar11 + -0x10 == 0) {
        puVar2 = *(undefined4 **)(param_1 + 0x18);
        *(undefined4 *)(param_1 + 0x14) = 0x20;
        if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
          *(undefined4 *)(param_1 + 0x14) = 1;
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
          param_1[4] = (bf_read)0x1;
          *(undefined4 *)(param_1 + 0x10) = 0;
        }
        else {
          *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
          *(undefined4 *)(param_1 + 0x10) = *puVar2;
        }
      }
      else {
        *(uint *)(param_1 + 0x10) = local_20 >> 0x10;
      }
      goto LAB_0057c430;
    }
  }
  *(int *)(param_1 + 0x14) = iVar11 + -1;
  if (iVar11 + -1 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = local_20 >> 1;
  }
  if ((local_20 & 1) == 0) goto LAB_0057b950;
  iVar11 = *(int *)(param_1 + 0x14);
  uVar10 = (ushort)*(uint *)(param_1 + 0x10);
  if (iVar11 < 0x10) {
    puVar9 = *(uint **)(param_1 + 0x18);
    if (puVar9 == *(uint **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      uVar10 = 0;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(uint **)(param_1 + 0x18) = puVar9 + 1;
      param_1[4] = (bf_read)0x1;
    }
    else {
      if (puVar9 < *(uint **)(param_1 + 0x1c)) {
        *(uint **)(param_1 + 0x18) = puVar9 + 1;
        uVar12 = *puVar9;
        *(uint *)(param_1 + 0x10) = uVar12;
        if (param_1[4] == (bf_read)0x0) {
          uVar6 = *(uint *)(CBitBuffer::s_nMaskTable + (0x10 - iVar11) * 4);
          *(int *)(param_1 + 0x14) = iVar11 + 0x10;
          uVar10 = (ushort)((uVar6 & uVar12) << ((byte)iVar11 & 0x1f)) | uVar10;
          *(uint *)(param_1 + 0x10) = uVar12 >> ((byte)(0x10 - iVar11) & 0x1f);
          goto LAB_0057c3e0;
        }
      }
      else {
        param_1[4] = (bf_read)0x1;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      uVar10 = 0;
    }
  }
  else {
    *(int *)(param_1 + 0x14) = iVar11 + -0x10;
    if (iVar11 + -0x10 == 0) {
      puVar2 = *(undefined4 **)(param_1 + 0x18);
      *(undefined4 *)(param_1 + 0x14) = 0x20;
      if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(undefined4 *)(param_1 + 0x10) = 0;
        *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      }
      else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
        param_1[4] = (bf_read)0x1;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
        *(undefined4 *)(param_1 + 0x10) = *puVar2;
      }
    }
    else {
      *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 0x10;
    }
  }
LAB_0057c3e0:
  *(ushort *)(param_2 + 0x3a) = uVar10;
LAB_0057b950:
  cVar7 = IsHeadTrackingEnabled();
  if (cVar7 == '\0') {
    return;
  }
  uVar12 = *(uint *)(param_1 + 0x10);
  pbVar1 = param_1 + 0x14;
  *(int *)pbVar1 = *(int *)pbVar1 + -1;
  if (*(int *)pbVar1 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = uVar12 >> 1;
  }
  if ((uVar12 & 1) == 0) {
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  else {
    lVar13 = (longdouble)CBitRead::ReadBitAngle((CBitRead *)param_1,0x10);
    *(float *)(param_2 + 0x40) = (float)lVar13;
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  if (iVar11 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = uVar12 >> 1;
  }
  if ((uVar12 & 1) == 0) {
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  else {
    lVar13 = (longdouble)CBitRead::ReadBitAngle((CBitRead *)param_1,0x10);
    *(float *)(param_2 + 0x44) = (float)lVar13;
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  if (iVar11 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = uVar12 >> 1;
  }
  if ((uVar12 & 1) == 0) {
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  else {
    lVar13 = (longdouble)CBitRead::ReadBitAngle((CBitRead *)param_1,8);
    *(float *)(param_2 + 0x48) = (float)lVar13;
    uVar12 = *(uint *)(param_1 + 0x10);
    pbVar1 = param_1 + 0x14;
    *(int *)pbVar1 = *(int *)pbVar1 + -1;
    iVar11 = *(int *)pbVar1;
  }
  if (iVar11 == 0) {
    puVar2 = *(undefined4 **)(param_1 + 0x18);
    *(undefined4 *)(param_1 + 0x14) = 0x20;
    if (puVar2 == *(undefined4 **)(param_1 + 0x1c)) {
      *(undefined4 *)(param_1 + 0x14) = 1;
      *(undefined4 *)(param_1 + 0x10) = 0;
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
    }
    else if (*(undefined4 **)(param_1 + 0x1c) < puVar2) {
      param_1[4] = (bf_read)0x1;
      *(undefined4 *)(param_1 + 0x10) = 0;
    }
    else {
      *(undefined4 **)(param_1 + 0x18) = puVar2 + 1;
      *(undefined4 *)(param_1 + 0x10) = *puVar2;
    }
  }
  else {
    *(uint *)(param_1 + 0x10) = uVar12 >> 1;
  }
  if ((uVar12 & 1) != 0) {
    CBitRead::ReadBitVec3Coord((CBitRead *)param_1,(Vector *)(param_2 + 0x4c));
    return;
  }
  return;
}

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)