/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401acc80 FUN_1401acc80 * Pseudocode, not original source. */ void FUN_1401acc80(longlong param_1,int param_2,int param_3) { longlong *plVar1; uint uVar2; longlong *plVar3; void *pvVar4; longlong lVar5; longlong lVar6; longlong lVar7; longlong lVar8; undefined8 uVar9; undefined8 *puVar10; int iVar11; int iVar12; int iVar13; longlong lVar14; int local_res18; longlong *local_88; longlong *local_80; longlong *local_78; longlong *local_70; undefined8 local_68; longlong local_60; undefined1 local_58; local_68 = 0xfffffffffffffffe; uVar2 = *(uint *)(*(longlong *)(param_1 + 0x148) + 600); if (uVar2 != 0) { FUN_1401c59a0(param_1 + 0x1e8,(double)uVar2 * 0.001); } pvVar4 = operator_new(0x28); if (pvVar4 == (void *)0x0) { lVar5 = 0; } else { lVar5 = FUN_1401996b0(pvVar4,FUN_1401aadd0,param_1); } if (lVar5 == 0) { local_80 = (longlong *)0x0; } else { local_80 = (longlong *)FUN_14016d940(0x10); local_80[1] = 1; *local_80 = lVar5; } plVar1 = local_80; FUN_1401a4b40(param_1 + 0x88,&local_80); plVar3 = local_80; if (plVar1 != (longlong *)0x0) { plVar1 = plVar1 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { pvVar4 = (void *)*local_80; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(plVar3); } } pvVar4 = operator_new(0x28); if (pvVar4 == (void *)0x0) { lVar5 = 0; } else { lVar5 = FUN_1401996b0(pvVar4,FUN_1401a61b0,param_1); } if (lVar5 == 0) { local_78 = (longlong *)0x0; } else { local_78 = (longlong *)FUN_14016d940(0x10); local_78[1] = 1; *local_78 = lVar5; } plVar1 = local_78; FUN_1401a4b40(param_1 + 0x90,&local_78); plVar3 = local_78; if (plVar1 != (longlong *)0x0) { plVar1 = plVar1 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { pvVar4 = (void *)*local_78; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(plVar3); } } iVar13 = 0; if (0 < param_3) { lVar5 = param_1 + 0x38; do { local_70 = operator_new(0x28); if (local_70 == (longlong *)0x0) { lVar6 = 0; } else { lVar6 = FUN_1401996b0(local_70,FUN_1401acc50,param_1); } if (lVar6 == 0) { local_70 = (longlong *)0x0; } else { local_70 = (longlong *)FUN_14016d940(0x10); local_70[1] = 1; *local_70 = lVar6; } plVar1 = local_70; iVar11 = *(int *)(param_1 + 0x50); if (iVar11 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar12 = *(int *)(param_1 + 0x50); FUN_1401a8910(lVar5,iVar12 + 1); iVar12 = iVar12 - iVar11; if ((0 < iVar12) && (iVar12 = iVar12 + -1, -1 < iVar12)) { lVar6 = (longlong)(iVar12 + iVar11 + 1) << 3; lVar14 = (longlong)(iVar12 + iVar11) << 3; do { lVar7 = FUN_14016ab80(lVar5); lVar8 = FUN_14016ab80(lVar5); FUN_1401a4b40(lVar6 + lVar8,lVar14 + lVar7); lVar14 = lVar14 + -8; lVar6 = lVar6 + -8; iVar12 = iVar12 + -1; } while (-1 < iVar12); } lVar6 = FUN_14016ab80(lVar5); FUN_1401a4b40(lVar6 + (longlong)iVar11 * 8,&local_70); plVar3 = local_70; if (plVar1 != (longlong *)0x0) { plVar1 = plVar1 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { pvVar4 = (void *)*local_70; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(plVar3); } } iVar13 = iVar13 + 1; } while (iVar13 < param_3); } local_60 = param_1; FUN_14016db50(param_1); local_58 = 1; local_res18 = 0; if (0 < param_2) { do { pvVar4 = operator_new(0x28); if (pvVar4 == (void *)0x0) { lVar5 = 0; } else { lVar5 = FUN_1401996b0(pvVar4,FUN_1401aae00,param_1); } if (lVar5 == 0) { local_88 = (longlong *)0x0; } else { local_88 = (longlong *)FUN_14016d940(0x10); local_88[1] = 1; *local_88 = lVar5; } iVar13 = *(int *)(param_1 + 0x78); lVar5 = (longlong)iVar13; if (iVar13 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } iVar11 = *(int *)(param_1 + 0x78); FUN_1401a8910(param_1 + 0x60,iVar11 + 1); iVar11 = iVar11 - iVar13; if ((0 < iVar11) && (iVar11 = iVar11 + -1, lVar6 = (longlong)iVar11, -1 < iVar11)) { lVar14 = (lVar6 + lVar5) * 8 + 8; do { lVar8 = FUN_14016ab80(param_1 + 0x60); lVar7 = FUN_14016ab80(param_1 + 0x60); plVar1 = (longlong *)(lVar14 + lVar7); lVar7 = *(longlong *)(lVar8 + -8 + lVar14); if (lVar7 != *plVar1) { if (lVar7 != 0) { *(longlong *)(*(longlong *)(lVar8 + -8 + lVar14) + 8) = *(longlong *)(lVar7 + 8) + 1; } puVar10 = (undefined8 *)0x0; if ((*plVar1 != 0) && (*(longlong *)(*plVar1 + 8) = *(longlong *)(*plVar1 + 8) + -1, *(longlong *)(*plVar1 + 8) == 0)) { puVar10 = (undefined8 *)*plVar1; } *plVar1 = *(longlong *)(lVar8 + -8 + lVar14); if (puVar10 != (undefined8 *)0x0) { pvVar4 = (void *)*puVar10; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(puVar10); } } lVar14 = lVar14 + -8; lVar6 = lVar6 + -1; } while (-1 < lVar6); } lVar6 = FUN_14016ab80(param_1 + 0x60); if (local_88 != *(longlong **)(lVar6 + lVar5 * 8)) { if (local_88 != (longlong *)0x0) { local_88[1] = local_88[1] + 1; } puVar10 = (undefined8 *)0x0; lVar14 = *(longlong *)(lVar6 + lVar5 * 8); if ((lVar14 != 0) && (*(longlong *)(*(longlong *)(lVar6 + lVar5 * 8) + 8) = *(longlong *)(lVar14 + 8) + -1, *(longlong *)(*(longlong *)(lVar6 + lVar5 * 8) + 8) == 0)) { puVar10 = *(undefined8 **)(lVar6 + lVar5 * 8); } *(longlong **)(lVar6 + lVar5 * 8) = local_88; if (puVar10 != (undefined8 *)0x0) { pvVar4 = (void *)*puVar10; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(puVar10); } } if (local_88 != (longlong *)0x0) { plVar1 = local_88 + 1; *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { pvVar4 = (void *)*local_88; if (pvVar4 != (void *)0x0) { FUN_1401997c0(pvVar4); operator_delete(pvVar4); } FUN_14016d970(local_88); } } local_res18 = local_res18 + 1; } while (local_res18 < param_2); } FUN_14016dbe0(param_1); uVar9 = 0; if (*(undefined8 **)(param_1 + 0x88) != (undefined8 *)0x0) { uVar9 = **(undefined8 **)(param_1 + 0x88); } FUN_1401998a0(uVar9); uVar9 = 0; if (*(undefined8 **)(param_1 + 0x90) != (undefined8 *)0x0) { uVar9 = **(undefined8 **)(param_1 + 0x90); } FUN_1401998a0(uVar9); iVar13 = 0; lVar5 = 0; if (0 < *(int *)(param_1 + 0x50)) { do { if ((lVar5 < 0) || (*(int *)(param_1 + 0x50) <= iVar13)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar10 = *(undefined8 **)(*(longlong *)(param_1 + 0x48) + lVar5 * 8); uVar9 = 0; if (puVar10 != (undefined8 *)0x0) { uVar9 = *puVar10; } FUN_1401998a0(uVar9); iVar13 = iVar13 + 1; lVar5 = lVar5 + 1; } while (iVar13 < *(int *)(param_1 + 0x50)); } iVar13 = 0; lVar5 = 0; if (0 < *(int *)(param_1 + 0x78)) { do { if ((lVar5 < 0) || (*(int *)(param_1 + 0x78) <= iVar13)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } puVar10 = *(undefined8 **)(*(longlong *)(param_1 + 0x70) + lVar5 * 8); uVar9 = 0; if (puVar10 != (undefined8 *)0x0) { uVar9 = *puVar10; } FUN_1401998a0(uVar9); iVar13 = iVar13 + 1; lVar5 = lVar5 + 1; } while (iVar13 < *(int *)(param_1 + 0x78)); } return; }