L L4D2node

CNetChan::_ProcessMessages

0x001b6460 · 5900 bytes · __thiscall

_ZN8CNetChan16_ProcessMessagesER7bf_read

Decompiled

undefined (2 params)

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CNetChan::_ProcessMessages(bf_read&) */

undefined4 __thiscall CNetChan::_ProcessMessages(CNetChan *this,bf_read *param_1)

{
  CNetChan *pCVar1;
  code *pcVar2;
  undefined4 *puVar3;
  uint uVar4;
  uint uVar5;
  char *pcVar6;
  CNetChan *pCVar7;
  char cVar8;
  byte bVar9;
  char *pcVar10;
  INetMessage *this_00;
  undefined4 uVar11;
  char *pcVar12;
  CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
  *pCVar13;
  int iVar14;
  undefined4 uVar15;
  undefined4 uVar16;
  undefined4 uVar17;
  int iVar18;
  int iVar19;
  uint uVar20;
  uint *puVar21;
  int iVar22;
  uint *puVar23;
  bool bVar24;
  byte bVar25;
  longdouble lVar26;
  CNetChan *local_10c;
  char *local_100;
  char *local_fc;
  uint *local_f4;
  Node_t *local_f0;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_d8;
  undefined4 local_d4;
  int local_d0;
  uint local_cc;
  undefined4 local_c8;
  undefined1 local_c4 [16];
  uint local_b4;
  undefined4 local_b0;
  undefined1 local_ac [16];
  uint local_9c;
  undefined4 local_98;
  uint local_94 [4];
  uint local_84;
  undefined4 local_80;
  undefined1 local_7c [16];
  uint local_6c;
  undefined4 local_68;
  undefined1 local_64 [16];
  uint local_54;
  undefined4 local_50;
  uint local_4c;
  int local_48;
  int local_44;
  int local_40;
  uint local_3c;
  undefined4 local_38;
  uint local_34;
  int local_30;
  int local_2c;
  int local_28;
  CNetChan *local_24;
  char local_20;
  
  bVar25 = 0;
  local_e4 = 0;
  local_e0 = 0;
  if (_exit == 0) {
    local_d0 = 0;
  }
  else {
    (**(code **)(_exit + 0x50))
              (_exit,&local_e4,0,0,0,0,"/data/src/engine/./net_chan.cpp",0x9a6,
               &_ProcessMessages(bf_read&)::tm_fmt,"(%s)%s","Unaccounted",
               "CNetChan::ProcessMessages");
    local_d0 = _exit;
  }
  iVar19 = _DAT_0040b9d4;
  local_d8 = local_e4;
  local_d4 = local_e0;
                    /* try { // try from 001b6bd6 to 001b6c24 has its CatchHandler @ 001b7b1c */
  if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
     (iVar14 = ThreadGetCurrentId(), iVar19 == iVar14)) {
    if ((char *)*_DAT_0040b030 != "CNetChan::ProcessMessages") {
      _DAT_0040b030 =
           (int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2bb333,&DAT_00000001,0x2a054b);
    }
    CVProfNode::EnterScope();
    DAT_0040b02c = '\0';
  }
  local_fc = "FCVAR_NEVER_AS_STRING";
  this[6] = (CNetChan)0x0;
  if ((net_showmsg[0x15] & 0x10) == 0) {
    local_fc = "";
    if (*(char **)(net_showmsg._28_4_ + 0x24) != (char *)0x0) {
      local_fc = *(char **)(net_showmsg._28_4_ + 0x24);
    }
  }
  local_100 = "FCVAR_NEVER_AS_STRING";
  if ((net_blockmsg[0x15] & 0x10) == 0) {
    local_100 = "";
    if (*(char **)(net_blockmsg._28_4_ + 0x24) != (char *)0x0) {
      local_100 = *(char **)(net_blockmsg._28_4_ + 0x24);
    }
  }
  if (*local_fc == '0') {
    local_fc = (char *)0x0;
  }
  pcVar10 = (char *)0x0;
  if (*local_100 != '0') {
    pcVar10 = local_100;
  }
  if (*(int *)(net_showpeaks._28_4_ + 0x30) < 1) {
    iVar19 = *(int *)(param_1 + 0x20);
    pcVar6 = local_fc;
  }
  else {
    iVar19 = *(int *)(param_1 + 0x20);
    iVar14 = *(int *)(param_1 + 8);
    if (iVar19 == 0) {
      iVar18 = 0;
    }
    else {
      iVar18 = (((uint)(*(int *)(param_1 + 0x18) - iVar19) >> 2) * 0x20 - *(int *)(param_1 + 0x14))
               + (*(uint *)(param_1 + 0xc) & 3) * 8;
      if (iVar14 < iVar18) {
        iVar18 = iVar14;
      }
    }
    pcVar6 = "1";
    if (iVar14 - iVar18 >> 3 <= *(int *)(net_showpeaks._28_4_ + 0x30)) {
      pcVar6 = local_fc;
    }
  }
  if (iVar19 == 0) {
    if (param_1[4] == (bf_read)0x0) goto LAB_001b664a;
LAB_001b7280:
                    /* try { // try from 001b7296 to 001b72b3 has its CatchHandler @ 001b79c3 */
    CNetchanParanoidMode::Dump
              ((CNetchanParanoidMode *)g_NetParanoid,this,"Buffer overflow in net message");
    (**(code **)(**(int **)(this + 0x4208) + 0x10))
              (*(int **)(this + 0x4208),"Buffer overflow in net message");
  }
  else {
    do {
      while( true ) {
        if (param_1[4] != (bf_read)0x0) goto LAB_001b7280;
LAB_001b664a:
        iVar19 = *(int *)(param_1 + 8);
        if (*(int *)(param_1 + 0x20) != 0) {
          iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                   *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
          if (iVar19 < iVar14) {
            iVar14 = iVar19;
          }
          iVar19 = iVar19 - iVar14;
        }
        if (iVar19 < 6) {
          if (0 < *(int *)(net_dumptest._28_4_ + 0x30)) {
            if (*(int *)(net_dumptest._28_4_ + 0x30) == 2) {
              DAT_00000000 = 1;
            }
            else {
                    /* try { // try from 001b6fa4 to 001b6fc3 has its CatchHandler @ 001b79c3 */
              ConVar::SetValue(0x3ab9e0);
              CNetchanParanoidMode::Dump
                        ((CNetchanParanoidMode *)g_NetParanoid,this,"requested from console");
            }
          }
          uVar11 = 1;
          goto LAB_001b6c92;
        }
                    /* try { // try from 001b6685 to 001b6809 has its CatchHandler @ 001b79c3 */
        cVar8 = BContinueSocketProcessingFrameCheckpoint(this);
        if (cVar8 == '\0') {
          iVar19 = *(int *)(param_1 + 8);
          uVar11 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x14);
          uVar15 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x18);
          if (*(int *)(param_1 + 0x20) == 0) {
            iVar14 = 0;
          }
          else {
            iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                     *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
            if (iVar19 < iVar14) {
              iVar14 = iVar19;
            }
          }
          iVar18 = (iVar19 - iVar14) + 7;
          iVar19 = (iVar19 - iVar14) + 0xe;
          if (-1 < iVar18) {
            iVar19 = iVar18;
          }
                    /* try { // try from 001b7346 to 001b737d has its CatchHandler @ 001b79c3 */
          uVar16 = (**(code **)(*(int *)this + 4))(this);
          Msg("Messages from %s after processing time exceeded (%d bytes left), aborting connection after %llu usec tick\n"
              ,uVar16,iVar19 >> 3,uVar11,uVar15);
          (**(code **)(**(int **)(this + 0x4208) + 0x10))
                    (*(int **)(this + 0x4208),"Processing time exceeded");
          goto LAB_001b6c90;
        }
        iVar19 = *(int *)(param_1 + 0x14);
        if (iVar19 < 6) break;
        *(int *)(param_1 + 0x14) = iVar19 + -6;
        uVar20 = *(uint *)(param_1 + 0x10) & 0x3f;
        if (iVar19 + -6 == 0) {
          puVar3 = *(undefined4 **)(param_1 + 0x18);
          *(undefined4 *)(param_1 + 0x14) = 0x20;
          if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
            *(undefined4 *)(param_1 + 0x14) = 1;
            *(undefined4 *)(param_1 + 0x10) = 0;
            *(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
            goto LAB_001b66bd;
          }
          if (puVar3 <= *(undefined4 **)(param_1 + 0x1c)) {
            *(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
            *(undefined4 *)(param_1 + 0x10) = *puVar3;
            goto LAB_001b66bd;
          }
          param_1[4] = (bf_read)0x1;
          bVar9 = (byte)uVar20;
          *(undefined4 *)(param_1 + 0x10) = 0;
          local_f4 = (uint *)uVar20;
        }
        else {
          *(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 6;
LAB_001b66bd:
          bVar9 = (byte)uVar20;
          local_f4 = (uint *)(uVar20 & 0xff);
        }
        if (bVar9 < 3) {
          uVar20 = uVar20 & 0xff;
          goto LAB_001b6c5a;
        }
        iVar19 = Plat_MSTime();
        if (*(int *)(param_1 + 0x20) == 0) {
          iVar14 = 0;
        }
        else {
          iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                   *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
          if (*(int *)(param_1 + 8) < iVar14) {
            iVar14 = *(int *)(param_1 + 8);
          }
        }
        this_00 = (INetMessage *)FindMessage(*(CNetChan **)(this + 0x423c),uVar20 & 0xff);
        if (this_00 != (INetMessage *)0x0) {
          uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
          if (*(int *)(param_1 + 0x20) == 0) {
            iVar18 = 0;
          }
          else {
            iVar22 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                     *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
            iVar18 = *(int *)(param_1 + 8);
            if (iVar22 <= *(int *)(param_1 + 8)) {
              iVar18 = iVar22;
            }
          }
          CNetchanParanoidMode::AddMessage((CNetchanParanoidMode *)g_NetParanoid,this_00,iVar18);
          cVar8 = (**(code **)(*(int *)this_00 + 0x18))(this_00,param_1);
          if (cVar8 == '\0') {
                    /* try { // try from 001b73ee to 001b7427 has its CatchHandler @ 001b79c3 */
            netadr_s::ToString((netadr_s *)(this + 0x98),false);
            ConMsg("Netchannel: failed reading message %s from %s.\n",uVar11);
            CNetchanParanoidMode::Dump
                      ((CNetchanParanoidMode *)g_NetParanoid,this,"failed reading message");
            goto LAB_001b6c90;
          }
        }
        if (*(int *)(param_1 + 0x20) == 0) {
          iVar18 = 0;
        }
        else {
          iVar22 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                   *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
          iVar18 = *(int *)(param_1 + 8);
          if (iVar22 <= *(int *)(param_1 + 8)) {
            iVar18 = iVar22;
          }
        }
        _V_memset(&local_34,0,0x10);
        _V_memset(&local_3c,0,0x20);
        local_38 = 0;
        local_2c = 1;
        local_24 = this;
        local_30 = 0;
        iVar22 = (iVar18 - iVar14) + 7;
        if (iVar22 < 0) {
          iVar22 = (iVar18 - iVar14) + 0xe;
        }
        iVar22 = iVar22 >> 3;
        local_3c = (uint)local_f4;
        local_34 = iVar19 * 1000;
        local_28 = iVar22;
        if (this_00 == (INetMessage *)0x0) {
                    /* try { // try from 001b73a2 to 001b73d5 has its CatchHandler @ 001b7991 */
          netadr_s::ToString((netadr_s *)(this + 0x98),false);
          ConMsg("Netchannel: unknown net message (%i) from %s.\n",uVar20 & 0xff);
          CNetchanParanoidMode::Dump((CNetchanParanoidMode *)g_NetParanoid,this,"unknown message");
          goto LAB_001b70b0;
        }
                    /* try { // try from 001b686e to 001b6a48 has its CatchHandler @ 001b7991 */
        uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
        if (*(int *)(param_1 + 0x20) == 0) {
          iVar19 = 0;
        }
        else {
          iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
                   *(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
          iVar19 = *(int *)(param_1 + 8);
          if (iVar14 <= *(int *)(param_1 + 8)) {
            iVar19 = iVar14;
          }
        }
        CNetchanParanoidMode::UpdateMessage((CNetchanParanoidMode *)g_NetParanoid,this_00,iVar19);
        cVar8 = (**(code **)(*(int *)this_00 + 0x14))(this_00,net_time,iVar22,this_00);
        if (cVar8 == '\0') {
                    /* try { // try from 001b7037 to 001b70af has its CatchHandler @ 001b7991 */
          lVar26 = (longdouble)Plat_FloatTime();
          if ((double)lVar26 <= BShouldSpewNetChanOverflow()::s_flTimeLastBackPacketBatchStart + 5.0
             ) {
            if (4 < BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount) goto LAB_001b70b0;
            BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount =
                 BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount + 1;
          }
          else {
            BShouldSpewNetChanOverflow()::s_flTimeLastBackPacketBatchStart = (double)lVar26;
            BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount = 1;
          }
          uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
          uVar15 = (**(code **)(*(int *)this + 4))(this);
          Warning("Msg from %s: %s rejected by msg bind (%d bytes)\n",uVar15,uVar11,iVar22);
          goto LAB_001b70b0;
        }
        pcVar2 = *(code **)(*(int *)this + 0xe4);
        (**(code **)(*(int *)this_00 + 0x28))(this_00);
        (*pcVar2)(this);
        if (pcVar6 != (char *)0x0) {
          if (*pcVar6 != '1') {
            pcVar12 = (char *)(**(code **)(*(int *)this_00 + 0x2c))(this_00);
            iVar19 = _V_stricmp(pcVar6,pcVar12);
            if (iVar19 != 0) goto LAB_001b69af;
          }
          (**(code **)(*(int *)this_00 + 0x34))(this_00);
          netadr_s::ToString((netadr_s *)(this + 0x98),false);
          ConMsg("Msg from %s: %s\n");
        }
LAB_001b69af:
        if (pcVar10 == (char *)0x0) {
LAB_001b69ea:
          cVar8 = BContinueSocketProcessingFrameCheckpoint(this);
          if (cVar8 == '\0') {
            uVar11 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x14);
            uVar15 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x18);
                    /* try { // try from 001b7446 to 001b7664 has its CatchHandler @ 001b7991 */
            uVar16 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
            uVar17 = (**(code **)(*(int *)this + 4))(this);
            Msg("Msg from %s: %s after processing time exceeded (%d bytes), aborting connection after %llu usec tick\n"
                ,uVar17,uVar16,iVar22,uVar11,uVar15);
            if (((local_20 == '\0') &&
                (local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
               (g_pNetChannelProcessingActivePacket == local_24)) {
              iVar19 = Plat_MSTime();
              uVar11 = local_38;
              uVar20 = local_3c;
              pCVar7 = g_pNetChannelProcessingActivePacket;
              bVar24 = (uint)(iVar19 * 1000) < local_34;
              local_34 = iVar19 * 1000 - local_34;
              local_30 = -(uint)bVar24 - local_30;
              *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
                   *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
              pCVar1 = pCVar7 + 0x42a0;
              *(int *)pCVar1 = *(int *)pCVar1 + 1;
              iVar19 = **(int **)(pCVar7 + 0x425c);
              _V_memset(local_c4,0,0x10);
              pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         *)(iVar19 + 0x24);
              local_cc = uVar20;
              local_c8 = uVar11;
              iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_cc);
              if (iVar14 == -1) {
                _V_memset(local_ac,0,0x10);
                local_b4 = uVar20;
                local_b0 = uVar11;
                iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         ::Find(pCVar13,(Node_t *)&local_b4);
                if (iVar14 == -1) {
                  _V_memset(local_94,0,0x10);
                  local_9c = uVar20;
                  local_98 = uVar11;
                  puVar21 = &local_34;
                  puVar23 = local_94;
                  for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                  CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                  ::Insert(pCVar13,(Node_t *)&local_9c);
                }
                else {
                  puVar21 = &local_34;
                  puVar23 = (uint *)(iVar14 * 0x28 + *(int *)(iVar19 + 0x28) + 0x18);
                  for (iVar18 = 4; iVar18 != 0; iVar18 = iVar18 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                }
              }
              else {
                iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
                puVar21 = (uint *)(iVar19 + 0x18);
                uVar20 = *puVar21;
                *puVar21 = *puVar21 + local_34;
                *(int *)(iVar19 + 0x1c) =
                     *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
                *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
                *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
              }
              uVar11 = local_38;
              uVar20 = local_3c;
              pCVar1 = g_pNetChannelProcessingActivePacket;
              _V_memset(local_7c,0,0x10);
              pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         *)(pCVar1 + 0x42a8);
              local_84 = uVar20;
              local_80 = uVar11;
              iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_84);
              if (iVar19 == -1) {
                    /* try { // try from 001b79dd to 001b7b16 has its CatchHandler @ 001b7991 */
                _V_memset(local_64,0,0x10);
                local_6c = uVar20;
                local_68 = uVar11;
                iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         ::Find(pCVar13,(Node_t *)&local_6c);
                if (iVar19 == -1) {
                  _V_memset(&local_4c,0,0x10);
                  local_50 = uVar11;
                  local_54 = uVar20;
                  puVar21 = &local_34;
                  puVar23 = &local_4c;
                  for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                  CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                  ::Insert(pCVar13,(Node_t *)&local_54);
                }
                else {
                  puVar21 = &local_34;
                  puVar23 = (uint *)(iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac) + 0x18);
                  for (iVar14 = 4; iVar14 != 0; iVar14 = iVar14 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                }
              }
              else {
                iVar19 = *(int *)(pCVar1 + 0x42ac) + iVar19 * 0x28;
                puVar21 = (uint *)(iVar19 + 0x18);
                uVar20 = *puVar21;
                *puVar21 = *puVar21 + local_34;
                *(int *)(iVar19 + 0x1c) =
                     *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
                *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
                *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
              }
            }
            (**(code **)(*(int *)this_00 + 4))(this_00);
            (**(code **)(**(int **)(this + 0x4208) + 0x10))
                      (*(int **)(this + 0x4208),"Processing time exceeded");
LAB_001b70b0:
            if (((local_20 == '\0') &&
                (local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
               (g_pNetChannelProcessingActivePacket == local_24)) {
              iVar19 = Plat_MSTime();
              uVar11 = local_38;
              uVar20 = local_3c;
              pCVar7 = g_pNetChannelProcessingActivePacket;
              bVar24 = (uint)(iVar19 * 1000) < local_34;
              local_34 = iVar19 * 1000 - local_34;
              local_30 = -(uint)bVar24 - local_30;
              *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
                   *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
              pCVar1 = pCVar7 + 0x42a0;
              *(int *)pCVar1 = *(int *)pCVar1 + 1;
              iVar19 = **(int **)(pCVar7 + 0x425c);
              pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         *)(iVar19 + 0x24);
              _V_memset(&local_4c,0,0x10);
              local_54 = uVar20;
              local_50 = uVar11;
              iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_54);
              if (iVar14 == -1) {
                _V_memset(&local_4c,0,0x10);
                local_54 = uVar20;
                local_50 = uVar11;
                iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         ::Find(pCVar13,(Node_t *)&local_54);
                if (iVar14 == -1) {
                  _V_memset(&local_4c,0,0x10);
                  local_50 = uVar11;
                  local_54 = uVar20;
                  puVar21 = &local_34;
                  puVar23 = &local_4c;
                  for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                  CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                  ::Insert(pCVar13,(Node_t *)&local_54);
                }
                else {
                  iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
                  *(uint *)(iVar19 + 0x18) = local_34;
                  *(int *)(iVar19 + 0x1c) = local_30;
                  *(int *)(iVar19 + 0x20) = local_2c;
                  *(int *)(iVar19 + 0x24) = local_28;
                }
              }
              else {
                iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
                puVar21 = (uint *)(iVar19 + 0x18);
                uVar20 = *puVar21;
                *puVar21 = *puVar21 + local_34;
                *(int *)(iVar19 + 0x1c) =
                     *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
                *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
                *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
              }
              uVar11 = local_38;
              uVar20 = local_3c;
              pCVar1 = g_pNetChannelProcessingActivePacket;
              pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         *)(g_pNetChannelProcessingActivePacket + 0x42a8);
              _V_memset(&local_4c,0,0x10);
              local_54 = uVar20;
              local_50 = uVar11;
              iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_54);
              if (iVar19 == -1) {
                _V_memset(&local_4c,0,0x10);
                local_54 = uVar20;
                local_50 = uVar11;
                iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                         ::Find(pCVar13,(Node_t *)&local_54);
                if (iVar19 == -1) {
                  _V_memset(&local_4c,0,0x10);
                  local_50 = uVar11;
                  local_54 = uVar20;
                  puVar21 = &local_34;
                  puVar23 = &local_4c;
                  for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                    *puVar23 = *puVar21;
                    puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                    puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                  }
                  CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                  ::Insert(pCVar13,(Node_t *)&local_54);
                }
                else {
                  iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
                  *(uint *)(iVar19 + 0x18) = local_34;
                  *(int *)(iVar19 + 0x1c) = local_30;
                  *(int *)(iVar19 + 0x20) = local_2c;
                  *(int *)(iVar19 + 0x24) = local_28;
                }
              }
              else {
                iVar19 = *(int *)(pCVar1 + 0x42ac) + iVar19 * 0x28;
                puVar21 = (uint *)(iVar19 + 0x18);
                uVar20 = *puVar21;
                *puVar21 = *puVar21 + local_34;
                *(int *)(iVar19 + 0x1c) =
                     *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
                *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
                *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
              }
            }
            goto LAB_001b6c90;
          }
          this[4] = (CNetChan)0x1;
          cVar8 = (**(code **)(*(int *)this_00 + 0x10))();
          this[4] = (CNetChan)0x0;
          if (this[5] != (CNetChan)0x0) {
            _ProcessMessages(bf_read&)::CPerMessageStatsRecorder_t::RecordStats
                      ((CPerMessageStatsRecorder_t *)this_00);
            (**(code **)(*(int *)this + 0x70))(this);
            goto LAB_001b70b0;
          }
          if (this[6] != (CNetChan)0x0) goto LAB_001b70b0;
          if (cVar8 == '\0') {
            ConDMsg("Netchannel: failed processing message %s.\n",uVar11);
            CNetchanParanoidMode::Dump
                      ((CNetchanParanoidMode *)g_NetParanoid,this,"failed processing");
            goto LAB_001b70b0;
          }
          cVar8 = (**(code **)(*(int *)this + 0xec))(this);
          if (cVar8 != '\0') goto LAB_001b70b0;
          if (((local_20 == '\0') &&
              (local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
             (g_pNetChannelProcessingActivePacket == local_24)) {
            iVar19 = Plat_MSTime();
            uVar11 = local_38;
            uVar20 = local_3c;
            pCVar7 = g_pNetChannelProcessingActivePacket;
            bVar24 = (uint)(iVar19 * 1000) < local_34;
            local_34 = iVar19 * 1000 - local_34;
            local_30 = -(uint)bVar24 - local_30;
            *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
                 *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
            pCVar1 = pCVar7 + 0x42a0;
            *(int *)pCVar1 = *(int *)pCVar1 + 1;
            iVar19 = **(int **)(pCVar7 + 0x425c);
            _V_memset(&local_4c,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       *)(iVar19 + 0x24);
            iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                     ::Find(pCVar13,(Node_t *)&local_54);
            if (iVar14 == -1) {
              _V_memset(&local_4c,0,0x10);
              local_54 = uVar20;
              local_50 = uVar11;
              iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_54);
              if (iVar14 == -1) {
                _V_memset(&local_4c,0,0x10);
                local_54 = uVar20;
                local_50 = uVar11;
                local_4c = local_34;
                local_48 = local_30;
                local_44 = local_2c;
                local_40 = local_28;
                CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                ::Insert(pCVar13,(Node_t *)&local_54);
              }
              else {
                iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
                *(uint *)(iVar19 + 0x18) = local_34;
                *(int *)(iVar19 + 0x1c) = local_30;
                *(int *)(iVar19 + 0x20) = local_2c;
                *(int *)(iVar19 + 0x24) = local_28;
              }
            }
            else {
              iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
              puVar21 = (uint *)(iVar19 + 0x18);
              uVar20 = *puVar21;
              *puVar21 = *puVar21 + local_34;
              *(int *)(iVar19 + 0x1c) =
                   *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
              *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
              *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
            }
            uVar11 = local_38;
            uVar20 = local_3c;
            pCVar1 = g_pNetChannelProcessingActivePacket;
            local_10c = g_pNetChannelProcessingActivePacket;
            _V_memset(&local_4c,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       *)(pCVar1 + 0x42a8);
            iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                     ::Find(pCVar13,(Node_t *)&local_54);
            if (iVar19 != -1) goto LAB_001b6b9c;
            _V_memset(&local_4c,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                     ::Find(pCVar13,(Node_t *)&local_54);
            if (iVar19 != -1) {
              iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
              goto LAB_001b6ec0;
            }
            _V_memset(&local_4c,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            local_4c = local_34;
            local_48 = local_30;
            local_44 = local_2c;
            local_40 = local_28;
            CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
            ::Insert(pCVar13,(Node_t *)&local_54);
          }
        }
        else {
          if (*pcVar10 != '1') {
            pcVar12 = (char *)(**(code **)(*(int *)this_00 + 0x2c))(this_00);
            iVar19 = _V_stricmp(pcVar10,pcVar12);
            if (iVar19 != 0) goto LAB_001b69ea;
          }
                    /* try { // try from 001b6d0b to 001b6d1d has its CatchHandler @ 001b7991 */
          (**(code **)(*(int *)this_00 + 0x34))(this_00);
          ConMsg("Blocking message %s\n");
          if (((local_20 == '\0') &&
              (local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
             (g_pNetChannelProcessingActivePacket == local_24)) {
            iVar19 = Plat_MSTime();
            uVar11 = local_38;
            uVar20 = local_3c;
            pCVar7 = g_pNetChannelProcessingActivePacket;
            bVar24 = (uint)(iVar19 * 1000) < local_34;
            local_34 = iVar19 * 1000 - local_34;
            local_30 = -(uint)bVar24 - local_30;
            *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
                 *(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
            pCVar1 = pCVar7 + 0x42a0;
            *(int *)pCVar1 = *(int *)pCVar1 + 1;
            iVar19 = **(int **)(pCVar7 + 0x425c);
            _V_memset(&local_4c,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       *)(iVar19 + 0x24);
            iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                     ::Find(pCVar13,(Node_t *)&local_54);
            if (iVar14 == -1) {
              _V_memset(&local_4c,0,0x10);
              local_54 = uVar20;
              local_50 = uVar11;
              iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,(Node_t *)&local_54);
              if (iVar14 == -1) {
                _V_memset(&local_4c,0,0x10);
                local_50 = uVar11;
                local_54 = uVar20;
                puVar21 = &local_34;
                puVar23 = &local_4c;
                for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                  *puVar23 = *puVar21;
                  puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                  puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
                }
                CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                ::Insert(pCVar13,(Node_t *)&local_54);
              }
              else {
                iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
                *(uint *)(iVar19 + 0x18) = local_34;
                *(int *)(iVar19 + 0x1c) = local_30;
                *(int *)(iVar19 + 0x20) = local_2c;
                *(int *)(iVar19 + 0x24) = local_28;
              }
            }
            else {
              iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
              puVar21 = (uint *)(iVar19 + 0x18);
              uVar20 = *puVar21;
              *puVar21 = *puVar21 + local_34;
              *(int *)(iVar19 + 0x1c) =
                   *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
              *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
              *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
            }
            uVar11 = local_38;
            uVar20 = local_3c;
            pCVar1 = g_pNetChannelProcessingActivePacket;
            local_f0 = (Node_t *)&local_54;
            local_f4 = &local_4c;
            local_10c = g_pNetChannelProcessingActivePacket;
            _V_memset(local_f4,0,0x10);
            local_54 = uVar20;
            local_50 = uVar11;
            pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       *)(pCVar1 + 0x42a8);
            iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                     ::Find(pCVar13,local_f0);
            if (iVar19 == -1) {
              _V_memset(local_f4,0,0x10);
              local_54 = uVar20;
              local_50 = uVar11;
              iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                       ::Find(pCVar13,local_f0);
              if (iVar19 == -1) {
                _V_memset(local_f4,0,0x10);
                local_50 = uVar11;
                local_54 = uVar20;
                puVar21 = &local_34;
                for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
                  *local_f4 = *puVar21;
                  puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
                  local_f4 = local_f4 + (uint)bVar25 * -2 + 1;
                }
                CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
                ::Insert(pCVar13,local_f0);
              }
              else {
                iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
LAB_001b6ec0:
                *(uint *)(iVar19 + 0x18) = local_34;
                *(int *)(iVar19 + 0x1c) = local_30;
                *(int *)(iVar19 + 0x20) = local_2c;
                *(int *)(iVar19 + 0x24) = local_28;
              }
            }
            else {
LAB_001b6b9c:
              iVar19 = *(int *)(local_10c + 0x42ac) + iVar19 * 0x28;
              puVar21 = (uint *)(iVar19 + 0x18);
              uVar20 = *puVar21;
              *puVar21 = *puVar21 + local_34;
              *(int *)(iVar19 + 0x1c) =
                   *(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
              *(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
              *(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
            }
          }
        }
      }
      puVar21 = *(uint **)(param_1 + 0x18);
      uVar20 = *(uint *)(param_1 + 0x10);
      if (puVar21 == *(uint **)(param_1 + 0x1c)) {
        *(undefined4 *)(param_1 + 0x14) = 1;
        *(undefined4 *)(param_1 + 0x10) = 0;
        *(uint **)(param_1 + 0x18) = puVar21 + 1;
        param_1[4] = (bf_read)0x1;
      }
      else if (*(uint **)(param_1 + 0x1c) < puVar21) {
        param_1[4] = (bf_read)0x1;
        *(undefined4 *)(param_1 + 0x10) = 0;
      }
      else {
        *(uint **)(param_1 + 0x18) = puVar21 + 1;
        uVar4 = *puVar21;
        *(uint *)(param_1 + 0x10) = uVar4;
        if (param_1[4] == (bf_read)0x0) {
          uVar5 = (&CBitBuffer::s_nMaskTable)[6 - iVar19];
          *(int *)(param_1 + 0x14) = iVar19 + 0x1a;
          uVar20 = (uVar5 & uVar4) << ((byte)iVar19 & 0x1f) | uVar20;
          *(uint *)(param_1 + 0x10) = uVar4 >> ((byte)(6 - iVar19) & 0x1f);
          goto LAB_001b66bd;
        }
      }
      uVar20 = 0;
LAB_001b6c5a:
      this[4] = (CNetChan)0x1;
                    /* try { // try from 001b6c6c to 001b6c70 has its CatchHandler @ 001b79c3 */
      cVar8 = ProcessControlMessage(this,uVar20,param_1);
      this[4] = (CNetChan)0x0;
    } while (cVar8 != '\0');
    if (this[5] != (CNetChan)0x0) {
      (**(code **)(*(int *)this + 0x70))(this);
    }
  }
LAB_001b6c90:
  uVar11 = 0;
LAB_001b6c92:
  iVar19 = _DAT_0040b9d4;
  if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
     (iVar14 = ThreadGetCurrentId(), iVar19 == iVar14)) {
    cVar8 = CVProfNode::ExitScope();
    if (cVar8 != '\0') {
      _DAT_0040b030 = (int *)_DAT_0040b030[0x19];
    }
    DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
  }
  if (local_d0 != 0) {
    (**(code **)(local_d0 + 0x54))(local_d0,local_d8,local_d4,0,0,0);
  }
  return uVar11;
}

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)