server-re/decomp/AgentManager_Release_x64/full/functions/0x1400d6850.c
2026-10-15 09:58:24 -04:00

214 lines
7.8 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400d6850 FUN_1400d6850
* Pseudocode, not original source. */
ulonglong FUN_1400d6850(uint *param_1,uint *param_2,undefined8 *param_3,uint *param_4)
{
int *piVar1;
uint uVar2;
uint uVar3;
int iVar4;
undefined8 uVar5;
ulonglong uVar6;
undefined4 uVar7;
undefined4 uVar8;
ulonglong uVar9;
longlong lVar10;
longlong lVar11;
int iVar12;
longlong lVar13;
uint local_d8 [2];
uint local_d0;
longlong local_c8;
uint local_c0;
uint local_bc;
uint local_b8 [2];
undefined4 local_b0;
longlong local_a8;
uint local_a0 [4];
undefined4 *local_90;
int local_88 [4];
longlong local_78;
uint local_70;
int local_68 [4];
undefined4 *local_58;
if (*param_2 == 0) {
return 0xfffffffd;
}
uVar5 = FUN_1400ddd70((int *)param_1,(int *)param_2);
if ((int)uVar5 == -1) {
uVar6 = 0;
if (param_4 != (uint *)0x0) {
uVar6 = FUN_1400d5ca0(param_1,param_4);
uVar6 = uVar6 & 0xffffffff;
}
if (param_3 != (undefined8 *)0x0) {
FUN_1400ddd40((undefined4 *)param_3);
}
return uVar6;
}
uVar6 = FUN_1400dfd80(local_88,*param_1 + 2);
if ((int)uVar6 != 0) {
return uVar6;
}
local_88[0] = *param_1 + 2;
uVar6 = FUN_1400d5ba0(local_a0);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d59;
uVar6 = FUN_1400d5ba0(local_68);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 == 0) {
uVar3 = FUN_1400ddfa0(local_d8,param_1);
uVar9 = (ulonglong)uVar3;
if (uVar3 == 0) {
uVar3 = FUN_1400ddfa0(local_b8,param_2);
uVar9 = (ulonglong)uVar3;
if (uVar3 == 0) {
local_b0 = 0;
local_d0 = 0;
local_70 = (uint)(param_1[2] != param_2[2]);
iVar4 = FUN_1400d5e50((int *)local_b8);
if (iVar4 % 0x1c < 0x1b) {
uVar3 = 0x1b - iVar4 % 0x1c;
local_c0 = uVar3;
uVar6 = FUN_1400ddc40(local_d8,uVar3,local_d8);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 == 0) {
uVar6 = FUN_1400ddc40(local_b8,uVar3,local_b8);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 == 0) goto LAB_1400d69ca;
}
}
else {
local_c0 = 0;
LAB_1400d69ca:
iVar4 = local_b8[0] - 1;
iVar12 = local_d8[0] - 1;
uVar6 = FUN_1400dfcf0((int *)local_b8,iVar12 - iVar4);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 == 0) {
lVar11 = (longlong)iVar12;
lVar13 = (longlong)iVar4;
uVar5 = FUN_1400d5df0((int *)local_d8,(int *)local_b8);
if ((int)uVar5 != -1) {
do {
piVar1 = (int *)(local_78 + (lVar11 - lVar13) * 4);
*piVar1 = *piVar1 + 1;
uVar3 = FUN_1400d64a0(local_d8,local_b8,local_d8);
uVar9 = (ulonglong)uVar3;
if (uVar3 != 0) goto LAB_1400d6d35;
uVar5 = FUN_1400d5df0((int *)local_d8,(int *)local_b8);
} while ((int)uVar5 != -1);
}
FUN_1400dfc70((int *)local_b8,iVar12 - iVar4);
local_bc = local_b8[0];
uVar3 = local_b8[0];
if ((int)local_b8[0] <= iVar12) {
do {
if (iVar12 <= (int)local_d8[0]) {
uVar3 = *(uint *)(local_c8 + lVar11 * 4);
uVar2 = *(uint *)(local_a8 + lVar13 * 4);
if (uVar3 == uVar2) {
lVar10 = (lVar11 - lVar13) * 4 + -4;
*(undefined4 *)(lVar10 + local_78) = 0xfffffff;
}
else {
uVar6 = ((ulonglong)uVar3 << 0x1c |
(ulonglong)*(uint *)(local_c8 + -4 + lVar11 * 4)) / (ulonglong)uVar2;
if (0xfffffff < uVar6) {
uVar6 = 0xfffffff;
}
lVar10 = (lVar11 - lVar13) * 4 + -4;
*(uint *)(lVar10 + local_78) = (uint)uVar6 & 0xfffffff;
}
*(uint *)(lVar10 + local_78) = *(int *)(lVar10 + local_78) + 1U & 0xfffffff;
do {
*(uint *)(lVar10 + local_78) = *(int *)(lVar10 + local_78) - 1U & 0xfffffff;
FUN_1400ddd40(local_a0);
uVar7 = 0;
if (-1 < (int)(local_b8[0] - 2)) {
uVar7 = *(undefined4 *)(local_a8 + -4 + lVar13 * 4);
}
*local_90 = uVar7;
local_90[1] = *(undefined4 *)(local_a8 + lVar13 * 4);
local_a0[0] = 2;
uVar6 = FUN_1400d6710((int *)local_a0,*(uint *)(lVar10 + local_78),
(int *)local_a0);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d35;
uVar7 = 0;
uVar8 = uVar7;
if (-1 < iVar12 + -2) {
uVar8 = *(undefined4 *)(local_c8 + -8 + lVar11 * 4);
}
*local_58 = uVar8;
if (-1 < iVar12 + -1) {
uVar7 = *(undefined4 *)(local_c8 + -4 + lVar11 * 4);
}
local_58[1] = uVar7;
local_58[2] = *(undefined4 *)(local_c8 + lVar11 * 4);
local_68[0] = 3;
uVar5 = FUN_1400ddd70((int *)local_a0,local_68);
} while ((int)uVar5 == 1);
uVar6 = FUN_1400d6710((int *)local_b8,*(uint *)(lVar10 + local_78),(int *)local_a0
);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d35;
uVar6 = FUN_1400dfcf0((int *)local_a0,(iVar12 - iVar4) - 1);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d35;
uVar3 = FUN_1400d64a0(local_d8,local_a0,local_d8);
uVar9 = (ulonglong)uVar3;
if (uVar3 != 0) goto LAB_1400d6d35;
uVar3 = local_bc;
if (local_d0 == 1) {
uVar6 = FUN_1400d5ca0(local_b8,local_a0);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d35;
uVar6 = FUN_1400dfcf0((int *)local_a0,(iVar12 - iVar4) - 1);
uVar9 = uVar6 & 0xffffffff;
if ((int)uVar6 != 0) goto LAB_1400d6d35;
uVar3 = FUN_1400d62e0(local_d8,local_a0,local_d8);
uVar9 = (ulonglong)uVar3;
if (uVar3 != 0) goto LAB_1400d6d35;
*(uint *)(lVar10 + local_78) = *(int *)(lVar10 + local_78) - 1U & 0xfffffff;
uVar3 = local_bc;
}
}
iVar12 = iVar12 + -1;
lVar11 = lVar11 + -1;
} while ((int)uVar3 <= iVar12);
}
if (local_d8[0] == 0) {
local_d0 = 0;
}
else {
local_d0 = param_1[2];
}
if (param_3 != (undefined8 *)0x0) {
FUN_1400ddc00(local_88);
FUN_1400dfc40((undefined8 *)local_88,param_3);
*(uint *)(param_3 + 1) = local_70;
}
if (param_4 != (uint *)0x0) {
FUN_1400ddfd0(local_d8,local_c0,local_d8,(undefined8 *)0x0);
FUN_1400dfc40((undefined8 *)local_d8,(undefined8 *)param_4);
}
uVar9 = 0;
}
}
LAB_1400d6d35:
FUN_1400d5c00((int *)local_b8);
}
FUN_1400d5c00((int *)local_d8);
}
FUN_1400d5c00(local_68);
}
FUN_1400d5c00((int *)local_a0);
LAB_1400d6d59:
FUN_1400d5c00(local_88);
return uVar9;
}