/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401abb60 FUN_1401abb60 * Pseudocode, not original source. */ void FUN_1401abb60(longlong param_1,longlong param_2,longlong param_3,longlong param_4) { undefined *puVar1; int *piVar2; undefined4 uVar3; int iVar4; undefined8 uVar5; longlong lVar6; undefined8 uVar7; ulonglong uVar8; int iVar9; ulonglong uVar10; undefined *puVar11; undefined8 uVar12; undefined4 local_170 [2]; undefined *local_168; longlong local_160; undefined **local_158; undefined4 local_150; undefined2 local_14c; undefined **local_148; undefined4 local_140; undefined2 local_13c; undefined **local_138; undefined4 local_130; undefined2 local_12c; undefined **local_128; undefined4 local_120; undefined2 local_11c; undefined1 local_118 [8]; undefined **local_110; undefined4 local_108; undefined2 local_104; undefined **local_100; undefined4 local_f8; undefined2 local_f4; undefined **local_f0; undefined4 local_e8; undefined2 local_e4; longlong local_e0; undefined1 local_d8; undefined8 local_d0; undefined1 local_c8; undefined8 local_c0; undefined1 local_b8; ulonglong local_b0; undefined4 local_a8; longlong local_a0; undefined4 local_98; undefined4 local_94; undefined8 local_88; undefined1 local_80; longlong local_78; undefined1 local_70; longlong local_68; undefined1 local_60; undefined8 local_58; local_58 = 0xfffffffffffffffe; uVar10 = 0; uVar8 = param_3 + 0x40; if (param_3 == 0) { uVar8 = uVar10; } FUN_1401baa30(local_118,uVar8); if (*(int *)(param_2 + 8) < 1) { lVar6 = param_3 + 0xa8; local_68 = lVar6; FUN_14016db50(lVar6); local_60 = 1; *(undefined1 *)(param_3 + 0x140) = 0; FUN_1401bad20(param_3); FUN_14016dbe0(lVar6); goto LAB_1401ac16d; } local_158 = Proud::AddrPort::vftable; local_150 = 0; local_14c = 0; local_160 = 0; local_148 = Proud::AddrPort::vftable; local_140 = 0; local_13c = 0; FUN_14016d8c0(); local_168 = PTR_DAT_1403440a0; uVar5 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_c0 = uVar5; FUN_14016db50(uVar5); local_b8 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_UdpRecvCompletionCase"); } uVar12 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); local_f0 = Proud::AddrPort::vftable; local_e8 = *(undefined4 *)(param_2 + 0x30); local_e4 = *(undefined2 *)(param_2 + 0x34); lVar6 = FUN_140174750(*(undefined8 *)(param_1 + 0x148),&local_f0); local_100 = Proud::AddrPort::vftable; local_f8 = *(undefined4 *)(param_2 + 0x30); local_f4 = *(undefined2 *)(param_2 + 0x34); local_170[0] = FUN_1401754e0(*(undefined8 *)(param_1 + 0x148),&local_100); uVar3 = *(undefined4 *)(*(longlong *)(param_1 + 0x148) + 0x22c); if (lVar6 != 0) { FUN_1401baa10(lVar6 + 0xc0); local_140 = *(undefined4 *)(lVar6 + 0x710); local_13c = *(undefined2 *)(lVar6 + 0x714); } FUN_14016dbe0(uVar5); local_b8 = 0; local_e0 = param_3 + 0xa8; FUN_14016db50(local_e0); local_d8 = 1; local_128 = Proud::AddrPort::vftable; local_120 = *(undefined4 *)(param_2 + 0x30); local_11c = *(undefined2 *)(param_2 + 0x34); uVar8 = uVar10; if (*(ulonglong **)(param_3 + 0x150) != (ulonglong *)0x0) { uVar8 = **(ulonglong **)(param_3 + 0x150); } uVar5 = *(undefined8 *)(param_3 + 0x178); uVar7 = FUN_14019c8b0(uVar8); iVar4 = FUN_1401b8b00(uVar5,uVar7,*(undefined4 *)(param_2 + 8),&local_128,local_170[0],uVar12, &local_160,&local_168); FUN_14016dbe0(param_3 + 0xa8); local_d8 = 0; if (iVar4 == 0) { if (lVar6 != 0) { *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x600) = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x600) + 1; *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x640) = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x640) + (longlong)*(int *)(local_160 + 0x40); uVar5 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); *(undefined8 *)(lVar6 + 0x198) = uVar5; uVar5 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); *(undefined8 *)(lVar6 + 0x1b8) = uVar5; FUN_1401a7d90(param_4,0); if (*(int *)(local_160 + 0x40) != 0) { uVar10 = *(ulonglong *)(local_160 + 0x38); } FUN_1401b4090(lVar6,uVar10,*(int *)(local_160 + 0x40),&local_148,uVar3,param_4); FUN_1401abab0(param_1,lVar6,param_4,param_3); goto LAB_1401ac07c; } FUN_1401a7d90(param_4,0); FUN_1401becf0(&local_b0); local_b0 = uVar10; if (*(int *)(local_160 + 0x40) != 0) { local_b0 = *(ulonglong *)(local_160 + 0x38); } local_a8 = *(undefined4 *)(local_160 + 0x40); local_98 = 0; local_a0 = param_4; local_94 = uVar3; iVar4 = FUN_1401bf780(&local_b0,local_170); if (-1 < iVar4) { iVar4 = *(int *)(param_4 + 0x18); while (iVar9 = (int)uVar10, iVar9 != iVar4) { if ((iVar9 < 0) || (iVar4 <= iVar9)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar6 = *(longlong *)(param_4 + 0x10) + (longlong)iVar9 * 0x48; FUN_14016b040(lVar6,0); local_138 = Proud::AddrPort::vftable; local_130 = local_150; local_12c = local_14c; FUN_1401a8040(param_1,&local_138,lVar6,param_3); iVar4 = *(int *)(param_4 + 0x18); if (iVar4 <= iVar9) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } uVar10 = (ulonglong)(iVar9 + 1); } } } else { if (iVar4 == 2) { uVar5 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_d0 = uVar5; FUN_14016db50(uVar5); local_c8 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_UdpRecvCompletionCase"); } puVar11 = local_168; if (local_168 == (undefined *)0x0) { puVar11 = PTR_DAT_1403440a0; } local_110 = Proud::AddrPort::vftable; local_108 = *(undefined4 *)(param_2 + 0x30); local_104 = *(undefined2 *)(param_2 + 0x34); FUN_140186d60(*(undefined8 *)(param_1 + 0x148),&local_110,puVar11); FUN_14016dbe0(uVar5); local_c8 = 0; } LAB_1401ac07c: if (lVar6 != 0) { FUN_1401baa20(lVar6 + 0xc0); } } lVar6 = param_3 + 0xa8; local_78 = lVar6; FUN_14016db50(lVar6); local_70 = 1; *(undefined1 *)(param_3 + 0x140) = 0; FUN_1401bad20(param_3); FUN_14016dbe0(lVar6); puVar11 = local_168; if (((local_168 != (undefined *)0x0) && (local_168 != PTR_DAT_1403440a0)) && (puVar1 = local_168 + -8, puVar1 != (undefined *)0x0)) { uVar5 = FUN_14016d8c0(); local_88 = uVar5; FUN_14016db50(uVar5); local_80 = 1; piVar2 = (int *)(puVar11 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar5); } local_168 = PTR_DAT_1403440a0; if (local_160 != 0) { FUN_1401a4a90(); } LAB_1401ac16d: FUN_1401baa40(local_118); return; }