/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14008bb70 FUN_14008bb70 * Pseudocode, not original source. */ void FUN_14008bb70(longlong param_1,longlong param_2,char *param_3,longlong param_4) { longlong *plVar1; int iVar2; ulonglong uVar3; undefined8 *puVar4; int *piVar5; int *piVar6; int *piVar7; int **ppiVar8; longlong lVar9; int iVar10; uint uVar11; char *pcVar12; int *local_res20; int *local_198; undefined1 local_190; undefined8 local_120; undefined1 local_118 [4]; undefined4 local_114; char *local_e0; exception local_70 [72]; local_120 = 0xfffffffffffffffe; pcVar12 = param_3; if ((int)(*(int *)(param_2 + 8) + (*(int *)(param_2 + 8) >> 0x1f & 7U)) >> 3 != 0) { param_4 = 2; pcVar12 = "Proud::CNetThreads_S::UserWorkerThread_FinalReceiveUserMessage"; FUN_14005ed30(*(longlong **)(param_1 + 0x148),(wchar_t *)0x0, "Proud::CNetThreads_S::UserWorkerThread_FinalReceiveUserMessage",2); } if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0) { FUN_14003b570(local_118); local_114 = *(undefined4 *)(param_2 + 0x30); local_118[0] = *(undefined1 *)(param_2 + 0x48); ppiVar8 = &local_res20; local_e0 = param_3; uVar3 = FUN_140080ca0((uint *)(param_2 + 8),ppiVar8,pcVar12,param_4); if ((char)uVar3 != '\0') { lVar9 = *(longlong *)(param_2 + 0x10); if (lVar9 == 0) { if (*(longlong *)(param_2 + 0x18) == 0) { /* WARNING: Subroutine does not return */ FUN_140095370(0,ppiVar8,pcVar12,param_4); } iVar10 = *(int *)(param_2 + 0x20); } else { iVar10 = *(int *)(lVar9 + 0x18); } iVar2 = (int)(*(int *)(param_2 + 8) + (*(int *)(param_2 + 8) >> 0x1f & 7U)) >> 3; ppiVar8 = (int **)(longlong)iVar2; uVar11 = iVar10 - iVar2; pcVar12 = (char *)(ulonglong)uVar11; if ((uint)local_res20 == uVar11) { if (*(longlong *)(param_2 + 0x18) == 0) { if (lVar9 == 0) { /* WARNING: Subroutine does not return */ FUN_140095370(0,ppiVar8,pcVar12,param_4); } if (*(int *)(lVar9 + 0x18) == 0) { lVar9 = 0; } else { lVar9 = *(longlong *)(lVar9 + 0x10); } } else { lVar9 = *(longlong *)(param_2 + 0x18); if (lVar9 == 0) { FUN_14002f1e0(local_70,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401569a0, pcVar12,param_4); /* WARNING: Subroutine does not return */ _CxxThrowException(local_70,(ThrowInfo *)&DAT_140151b88); } } plVar1 = *(longlong **)(*(longlong *)(param_1 + 0x148) + 0x758); param_4 = lVar9 + (longlong)ppiVar8; (**(code **)(*plVar1 + 0x30)) (plVar1,*(undefined4 *)(param_2 + 0x30),local_118,param_4,(uint)local_res20); goto LAB_14008be37; } } local_res20 = (int *)FUN_140030280(0x60); if (local_res20 == (int *)0x0) { puVar4 = (undefined8 *)0x0; } else { puVar4 = FUN_14003bef0((undefined8 *)local_res20,ppiVar8,pcVar12,param_4); } piVar7 = (int *)0x0; if (puVar4 == (undefined8 *)0x0) { local_res20 = (int *)0x0; piVar5 = piVar7; } else { piVar5 = (int *)FUN_140030280(0x48); local_198 = piVar5; if (piVar5 != (int *)0x0) { local_res20 = piVar5; uVar3 = FUN_14002e790(); pcVar12 = (char *)CONCAT71((int7)((ulonglong)pcVar12 >> 8),1); FUN_14002e600(piVar5,uVar3 & 0xffffffff,pcVar12,param_4); } local_res20 = piVar5; FUN_14002e6e0(piVar5); piVar5[0x10] = 1; piVar5[0x11] = 0; *(undefined8 **)(piVar5 + 0xe) = puVar4; FUN_14002e770((longlong)piVar5); } piVar6 = piVar7; if (piVar5 != (int *)0x0) { piVar6 = *(int **)(piVar5 + 0xe); } *piVar6 = 0x1f; if (piVar5 != (int *)0x0) { piVar7 = *(int **)(piVar5 + 0xe); } FUN_140006c60((longlong *)(piVar7 + 4),L"Invalid payload size in User Message!",pcVar12,param_4) ; local_198 = (int *)0x0; FUN_14003bff0((ulonglong *)&local_198,(ulonglong *)&local_res20,pcVar12,param_4); ppiVar8 = &local_198; (**(code **)(**(longlong **)(param_1 + 0x148) + 0x80))(); if (piVar5 != (int *)0x0) { local_190 = 0; local_198 = piVar5; FUN_14002e6e0(piVar5); local_190 = 1; plVar1 = (longlong *)(piVar5 + 0x10); *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { FUN_14002e770((longlong)piVar5); local_190 = 0; FUN_14002b500(piVar5,ppiVar8,pcVar12,param_4); } else { FUN_14002e770((longlong)piVar5); } } } LAB_14008be37: FUN_1400a2740((undefined8 *)(param_1 + 0x160),*(undefined4 *)(param_2 + 0x30),'\0',param_4); return; }