/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14003e8e0 FUN_14003e8e0 * Pseudocode, not original source. */ void FUN_14003e8e0(undefined8 *param_1,longlong param_2,longlong param_3) { ulonglong uVar1; undefined8 *puVar2; longlong lVar3; undefined8 *puVar4; int iVar5; undefined8 *puVar6; longlong lVar7; if (param_2 < 0) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } if (-1 < param_3) { param_1[3] = param_3; } if (param_2 == 0) { if ((100 < (ulonglong)param_1[2]) && ((void *)*param_1 != (void *)0x0)) { operator_delete__((void *)*param_1); *param_1 = 0; } param_1[1] = 0; param_1[2] = 100; return; } uVar1 = param_1[2]; if ((longlong)uVar1 < param_2) { lVar3 = param_1[3]; if (lVar3 == 0) { lVar3 = (longlong)(param_1[1] + (ulonglong)((uint)((longlong)param_1[1] >> 0x3f) & 7)) >> 3; if (lVar3 < 4) { lVar3 = 4; } else if (0x400 < lVar3) { lVar3 = 0x400; } } lVar7 = param_2; if (param_2 < (longlong)(lVar3 + uVar1)) { lVar7 = lVar3 + uVar1; } if (lVar7 < (longlong)uVar1) { /* WARNING: Subroutine does not return */ FUN_14002f590(); } puVar4 = operator_new(lVar7 << 5); puVar2 = param_1 + 4; if (100 < (ulonglong)param_1[2]) { puVar2 = (undefined8 *)*param_1; } FUN_14003d310(puVar4,(longlong)puVar2,param_1[1]); memset(puVar4 + param_1[1] * 4,0,(param_2 - param_1[1]) * 0x20); iVar5 = 0; lVar3 = param_2 - param_1[1]; if (0 < lVar3) { puVar6 = puVar4 + param_1[1] * 4 + 3; do { if (puVar6 + -3 != (undefined8 *)0x0) { *(undefined4 *)(puVar6 + -3) = 0; puVar6[-2] = 0; *puVar6 = 0; puVar6[-1] = 0; } iVar5 = iVar5 + 1; puVar6 = puVar6 + 4; } while (iVar5 < lVar3); } if (100 < (ulonglong)param_1[2]) { operator_delete__(puVar2); } *param_1 = puVar4; param_1[2] = lVar7; } else { puVar2 = param_1 + 4; if (100 < uVar1) { puVar2 = (undefined8 *)*param_1; } lVar3 = param_1[1]; if (lVar3 < param_2) { iVar5 = 0; if (0 < param_2 - lVar3) { puVar2 = puVar2 + lVar3 * 4 + 3; do { if (puVar2 + -3 != (undefined8 *)0x0) { *(undefined4 *)(puVar2 + -3) = 0; puVar2[-2] = 0; *puVar2 = 0; puVar2[-1] = 0; } iVar5 = iVar5 + 1; puVar2 = puVar2 + 4; } while ((longlong)iVar5 < param_2 - lVar3); param_1[1] = param_2; return; } } } param_1[1] = param_2; return; }