/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14006bd20 FUN_14006bd20 * Pseudocode, not original source. */ exception * FUN_14006bd20(exception *param_1,longlong param_2,undefined8 param_3,undefined8 param_4) { undefined8 *puVar1; longlong *plVar2; LPSTR pCVar3; exception *peVar4; longlong lVar5; char *pcVar6; longlong *local_res10; peVar4 = param_1; lVar5 = param_2; std::exception::exception(param_1); *(undefined ***)param_1 = Proud::Exception::vftable; FUN_14006cb70(peVar4,lVar5,param_3,param_4); *(undefined **)(param_1 + 0x40) = PTR_DAT_1401ac008; plVar2 = FUN_14006b7c0(param_2,&local_res10,param_3,param_4); puVar1 = (undefined8 *)*plVar2; if (puVar1 == (undefined8 *)0x0) { pcVar6 = (char *)0x0; } else { if (puVar1[1] == 0) { pCVar3 = FUN_140077370((LPCWSTR)*puVar1); puVar1[1] = pCVar3; } pcVar6 = (char *)puVar1[1]; } FUN_14006b850((longlong *)(param_1 + 0x40),pcVar6); if (local_res10 != (longlong *)0x0) { LOCK(); plVar2 = local_res10 + 2; lVar5 = *plVar2; *(int *)plVar2 = (int)*plVar2 + -1; UNLOCK(); if (((int)lVar5 == 1) && (local_res10 != (longlong *)0x0)) { if (*local_res10 != 0) { Ordinal_6(); } if ((void *)local_res10[1] != (void *)0x0) { operator_delete__((void *)local_res10[1]); } operator_delete(local_res10); } } *(longlong *)(param_1 + 0x30) = param_2; *(undefined4 *)(param_1 + 0x18) = 0; *(undefined4 *)(param_1 + 0x38) = 3; return param_1; }