689 lines
22 KiB
C
689 lines
22 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x14018a590 FUN_14018a590
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
undefined8 FUN_14018a590(longlong param_1,longlong *param_2,undefined ***param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
void *pvVar2;
|
|
bool bVar3;
|
|
bool bVar4;
|
|
undefined ***pppuVar5;
|
|
int iVar6;
|
|
char cVar7;
|
|
int iVar8;
|
|
uint uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
undefined4 uVar12;
|
|
uint *puVar13;
|
|
undefined8 uVar14;
|
|
longlong *plVar15;
|
|
undefined4 *puVar16;
|
|
undefined4 *puVar17;
|
|
undefined4 *puVar18;
|
|
uint uVar19;
|
|
undefined *puVar20;
|
|
undefined4 *puVar21;
|
|
ulonglong uVar22;
|
|
longlong lVar23;
|
|
uint *puVar24;
|
|
uint uVar25;
|
|
longlong lVar26;
|
|
double dVar27;
|
|
undefined1 auStack_488 [32];
|
|
undefined ***local_468;
|
|
uint *local_458;
|
|
undefined ***local_450;
|
|
undefined4 *local_448;
|
|
char *local_440;
|
|
undefined4 *local_438;
|
|
undefined **local_430;
|
|
longlong *local_428;
|
|
longlong local_420;
|
|
ulonglong local_418;
|
|
undefined8 local_410;
|
|
undefined *local_408;
|
|
undefined **local_400;
|
|
undefined8 local_3f8;
|
|
undefined4 *local_3f0;
|
|
undefined8 local_3e8;
|
|
undefined8 local_3e0;
|
|
undefined **local_3d8;
|
|
longlong *local_3d0;
|
|
undefined4 *local_3c8;
|
|
ulonglong local_3c0;
|
|
undefined4 local_3b8;
|
|
undefined4 local_3b4;
|
|
undefined **local_3b0;
|
|
undefined8 local_3a8;
|
|
undefined4 *local_3a0;
|
|
undefined8 local_398;
|
|
undefined8 local_390;
|
|
undefined **local_388;
|
|
longlong local_380;
|
|
undefined4 *local_378;
|
|
undefined8 local_370;
|
|
undefined4 local_368;
|
|
undefined4 local_364;
|
|
void *local_360;
|
|
char *local_358;
|
|
undefined **local_350;
|
|
undefined8 local_348;
|
|
undefined8 local_340;
|
|
undefined8 local_338;
|
|
undefined8 local_330;
|
|
undefined8 local_328;
|
|
undefined1 local_320;
|
|
undefined8 local_318;
|
|
undefined1 local_310;
|
|
undefined8 local_308;
|
|
undefined1 local_300;
|
|
undefined8 local_2f8;
|
|
undefined1 local_2f0;
|
|
undefined8 local_2e8;
|
|
longlong local_2e0;
|
|
undefined1 local_2d8;
|
|
exception local_2d0 [24];
|
|
exception local_2b8 [24];
|
|
undefined1 local_2a0 [72];
|
|
undefined1 local_258 [72];
|
|
undefined1 local_210 [72];
|
|
undefined1 local_1c8 [72];
|
|
undefined1 local_180 [24];
|
|
undefined1 *local_168;
|
|
undefined1 local_160 [136];
|
|
undefined1 *local_d8;
|
|
undefined1 local_d0 [136];
|
|
ulonglong local_48;
|
|
|
|
local_2e8 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1403463c0 ^ (ulonglong)auStack_488;
|
|
local_2e0 = param_1 + 0xb8;
|
|
local_450 = param_3;
|
|
FUN_14016db50(local_2e0);
|
|
local_2d8 = 1;
|
|
if ((*(longlong **)(param_1 + 0x6a0) != (longlong *)0x0) &&
|
|
(**(longlong **)(param_1 + 0x6a0) != 0)) goto LAB_14018b3c1;
|
|
iVar8 = *(int *)((longlong)param_2 + 0x54);
|
|
if (iVar8 == 0) {
|
|
iVar8 = FUN_14016eed0();
|
|
*(int *)((longlong)param_2 + 0x54) = iVar8;
|
|
}
|
|
if (iVar8 < 0) {
|
|
FUN_14016d300(local_210,L"Invalid thread count");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_210,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
bVar4 = false;
|
|
bVar3 = false;
|
|
puVar17 = (undefined4 *)0x0;
|
|
uVar11 = 0;
|
|
puVar18 = puVar17;
|
|
puVar16 = puVar17;
|
|
if (0 < (int)param_2[6]) {
|
|
do {
|
|
if (((longlong)puVar18 < 0) || ((int)param_2[6] <= (int)puVar16)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
if (*(int *)(param_2[5] + (longlong)puVar18 * 4) == 0) {
|
|
bVar3 = true;
|
|
}
|
|
else {
|
|
bVar4 = true;
|
|
}
|
|
uVar19 = (int)puVar16 + 1;
|
|
puVar16 = (undefined4 *)(ulonglong)uVar19;
|
|
puVar18 = (undefined4 *)((longlong)puVar18 + 1);
|
|
} while ((int)uVar19 < (int)param_2[6]);
|
|
if ((bVar3) && (bVar4)) {
|
|
FUN_14016d300(local_258,
|
|
L"Cannot assign non-zero UDP port number with zero UDP port number! All non-zero or all zero must be guaranteed!"
|
|
);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_258,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
}
|
|
iVar8 = *(int *)((longlong)param_2 + 0x5c);
|
|
if (((iVar8 != 0x80) && (iVar8 != 0xc0)) && (iVar8 != 0x100)) {
|
|
FUN_14016d300(local_1c8,L"Invalid key length!");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_1c8,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
local_3d8 = Proud::CFastArray<int,0>::vftable;
|
|
if (DAT_140344e08 != 5) {
|
|
FUN_14019a8d0();
|
|
}
|
|
local_3d0 = (longlong *)param_2[4];
|
|
local_3b4 = *(undefined4 *)((longlong)param_2 + 0x3c);
|
|
local_3c8 = (undefined4 *)0x0;
|
|
local_3c0 = 0;
|
|
local_3b8 = 0;
|
|
iVar8 = (int)param_2[6];
|
|
lVar26 = (longlong)iVar8;
|
|
if (iVar8 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_14015e670(&local_3d8,iVar8);
|
|
puVar18 = local_3c8;
|
|
iVar6 = (int)local_3c0;
|
|
puVar16 = local_3c8;
|
|
if ((int)local_3c0 == 0) {
|
|
puVar16 = puVar17;
|
|
}
|
|
puVar21 = puVar17;
|
|
if ((int)param_2[6] != 0) {
|
|
puVar21 = (undefined4 *)param_2[5];
|
|
}
|
|
if (0 < iVar8) {
|
|
lVar23 = (longlong)puVar21 - (longlong)puVar16;
|
|
do {
|
|
*puVar16 = *(undefined4 *)(lVar23 + (longlong)puVar16);
|
|
puVar16 = puVar16 + 1;
|
|
lVar26 = lVar26 + -1;
|
|
} while (lVar26 != 0);
|
|
}
|
|
puVar16 = local_3c8;
|
|
if ((int)local_3c0 == 0) {
|
|
puVar16 = puVar17;
|
|
}
|
|
FUN_140185270(puVar16,local_3c0 & 0xffffffff,0);
|
|
puVar16 = puVar17;
|
|
puVar21 = puVar17;
|
|
if (0 < iVar6 + -1) {
|
|
do {
|
|
if (((longlong)puVar16 < 0) || (iVar6 <= (int)puVar21)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
if ((longlong)puVar16 + 1 < 0) {
|
|
LAB_14018a80c:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
uVar19 = (int)puVar21 + 1;
|
|
puVar21 = (undefined4 *)(ulonglong)uVar19;
|
|
if (iVar6 <= (int)uVar19) goto LAB_14018a80c;
|
|
if ((puVar18[(longlong)puVar16] == puVar18[(longlong)puVar16 + 1]) &&
|
|
(puVar18[(longlong)puVar16] != 0)) {
|
|
FUN_14016d300(local_2a0,L"Cannot add duplicated UDP port number!");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2a0,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
puVar16 = (undefined4 *)((longlong)puVar16 + 1);
|
|
} while ((int)uVar19 < iVar6 + -1);
|
|
}
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
local_428 = (longlong *)0x0;
|
|
local_420 = 0;
|
|
local_418 = 0;
|
|
local_410 = 0;
|
|
FUN_140171180(&local_430);
|
|
if ((1 < (int)local_418) &&
|
|
(((puVar20 = (undefined *)param_2[1], puVar20 == (undefined *)0x0 ||
|
|
(puVar20 == PTR_DAT_1403440a0)) || (*(int *)(puVar20 + -8) == 0)))) {
|
|
FUN_14016d8c0();
|
|
local_458 = (uint *)PTR_DAT_1403440a0;
|
|
uVar19 = FUN_14016d740(
|
|
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
|
|
);
|
|
puVar16 = puVar17;
|
|
if ((local_458 != (uint *)0x0) &&
|
|
(puVar16 = (undefined4 *)0x0, local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
puVar16 = (undefined4 *)(ulonglong)local_458[-2];
|
|
}
|
|
uVar9 = uVar19;
|
|
if ((((int)uVar19 <= (int)puVar16) && (uVar9 = uVar11, local_458 != (uint *)0x0)) &&
|
|
(local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar9 = local_458[-2];
|
|
}
|
|
uVar25 = 1;
|
|
if (1 < (int)uVar9) {
|
|
uVar25 = uVar9;
|
|
}
|
|
uVar10 = 0;
|
|
uVar9 = uVar10;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar9 = local_458[-2];
|
|
}
|
|
if ((int)uVar9 < (int)uVar25) {
|
|
if (local_458 == (uint *)0x0) {
|
|
local_458 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
if ((int)uVar25 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (uVar25 == 0) {
|
|
FUN_14004eb70(&local_458);
|
|
}
|
|
else {
|
|
uVar9 = uVar10;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar9 = local_458[-2];
|
|
}
|
|
if (uVar25 != uVar9) {
|
|
puVar13 = (uint *)FUN_14016d940((longlong)(int)uVar25 * 2 + 10);
|
|
if (puVar13 != (uint *)0x0) {
|
|
*puVar13 = 0;
|
|
puVar13[1] = 1;
|
|
}
|
|
*puVar13 = uVar25;
|
|
uVar9 = uVar10;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar9 = local_458[-2];
|
|
}
|
|
puVar24 = (uint *)PTR_DAT_1403440a0;
|
|
if ((int)uVar25 < (int)uVar9) {
|
|
LAB_14018a971:
|
|
if (local_458 != (uint *)0x0) {
|
|
puVar24 = local_458;
|
|
}
|
|
}
|
|
else {
|
|
uVar25 = uVar11;
|
|
if (local_458 != (uint *)0x0) {
|
|
if (local_458 != (uint *)PTR_DAT_1403440a0) {
|
|
uVar25 = local_458[-2];
|
|
}
|
|
goto LAB_14018a971;
|
|
}
|
|
}
|
|
FUN_14016d770(puVar13 + 2,puVar24,uVar25);
|
|
FUN_14004eb70(&local_458);
|
|
local_458 = puVar13 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_14004e850(&local_458);
|
|
puVar13 = local_458;
|
|
if (local_458 == (uint *)0x0) {
|
|
puVar13 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14016d770(puVar13,
|
|
L"Server has multiple network devices, however, no device is specified for listening. Is it your intention?"
|
|
,uVar19);
|
|
puVar13 = local_458;
|
|
if (local_458 == (uint *)0x0) {
|
|
puVar13 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
uVar19 = FUN_14016d740(puVar13);
|
|
uVar11 = 0;
|
|
if (0 < (int)uVar19) {
|
|
uVar11 = uVar19;
|
|
}
|
|
uVar19 = uVar10;
|
|
if ((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar19 = local_458[-2];
|
|
}
|
|
if (((int)uVar11 < (int)uVar19) || (uVar11 = uVar10, local_458 == (uint *)0x0)) {
|
|
LAB_14018aa14:
|
|
if (((local_458 != (uint *)PTR_DAT_1403440a0) && (local_458 != (uint *)0x0)) &&
|
|
(local_458 + -2 != (uint *)0x0)) {
|
|
local_458[-2] = uVar11;
|
|
*(undefined2 *)((longlong)local_458 + (longlong)(int)uVar11 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_458 != (uint *)PTR_DAT_1403440a0) {
|
|
uVar11 = local_458[-2];
|
|
goto LAB_14018aa14;
|
|
}
|
|
local_348 = 0;
|
|
local_340 = 0;
|
|
local_338 = 0;
|
|
local_330 = 0;
|
|
local_350 = Proud::ByteArray::vftable;
|
|
local_468 = &local_350;
|
|
uVar14 = FUN_140198f80(&local_360,1,0,&local_458);
|
|
FUN_140186b80(param_1 + -0xa8,uVar14);
|
|
FUN_14019a9e0(&local_350);
|
|
puVar13 = local_458;
|
|
if (((local_458 != (uint *)0x0) && (local_458 != (uint *)PTR_DAT_1403440a0)) &&
|
|
(puVar24 = local_458 + -2, puVar24 != (uint *)0x0)) {
|
|
uVar14 = FUN_14016d8c0();
|
|
local_2f8 = uVar14;
|
|
FUN_14016db50(uVar14);
|
|
local_2f0 = 1;
|
|
puVar13 = puVar13 + -1;
|
|
*puVar13 = *puVar13 - 1;
|
|
if (*puVar13 == 0) {
|
|
FUN_14016d970(puVar24);
|
|
}
|
|
FUN_14016dbe0(uVar14);
|
|
local_2f0 = 0;
|
|
}
|
|
local_458 = (uint *)PTR_DAT_1403440a0;
|
|
FUN_14016d8c0();
|
|
local_438 = (undefined4 *)PTR_DAT_1403440a0;
|
|
plVar15 = (longlong *)FUN_14016f6b0(&local_408);
|
|
puVar20 = (undefined *)*plVar15;
|
|
if ((undefined *)*plVar15 == (undefined *)0x0) {
|
|
puVar20 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14004c020(&local_438,L"No NIC binding though multiple NIC detected##Process=%s",puVar20);
|
|
if (((local_408 != (undefined *)0x0) && (local_408 != PTR_DAT_1403440a0)) &&
|
|
(local_408 + -8 != (undefined *)0x0)) {
|
|
uVar14 = FUN_14016d8c0();
|
|
local_318 = uVar14;
|
|
FUN_14016db50(uVar14);
|
|
local_310 = 1;
|
|
piVar1 = (int *)(local_408 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(local_408 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar14);
|
|
local_310 = 0;
|
|
}
|
|
local_408 = PTR_DAT_1403440a0;
|
|
FUN_14016d8c0();
|
|
puVar16 = local_438;
|
|
local_448 = (undefined4 *)PTR_DAT_1403440a0;
|
|
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
|
|
local_448 = puVar17;
|
|
}
|
|
if (local_438 != (undefined4 *)PTR_DAT_1403440a0) {
|
|
uVar14 = FUN_14016d8c0();
|
|
local_308 = uVar14;
|
|
FUN_14016db50(uVar14);
|
|
local_300 = 1;
|
|
FUN_14004eb70(&local_448);
|
|
local_448 = puVar16;
|
|
if (((puVar16 != (undefined4 *)PTR_DAT_1403440a0) && (puVar16 != (undefined4 *)0x0)) &&
|
|
(puVar16 != (undefined4 *)0x8)) {
|
|
puVar16[-1] = puVar16[-1] + 1;
|
|
}
|
|
FUN_14016dbe0(uVar14);
|
|
local_300 = 0;
|
|
}
|
|
FUN_1401be230(&local_448);
|
|
if (((puVar16 != (undefined4 *)0x0) && (puVar16 != (undefined4 *)PTR_DAT_1403440a0)) &&
|
|
(puVar16 + -2 != (undefined4 *)0x0)) {
|
|
uVar14 = FUN_14016d8c0();
|
|
local_328 = uVar14;
|
|
FUN_14016db50(uVar14);
|
|
local_320 = 1;
|
|
piVar1 = puVar16 + -1;
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(puVar16 + -2);
|
|
}
|
|
FUN_14016dbe0(uVar14);
|
|
local_320 = 0;
|
|
}
|
|
local_438 = (undefined4 *)PTR_DAT_1403440a0;
|
|
}
|
|
dVar27 = (double)param_2[0x16];
|
|
if ((double)param_2[0x16] <= 0.0) {
|
|
dVar27 = DAT_140344dd0;
|
|
}
|
|
*(double *)(param_1 + 0x778) = dVar27;
|
|
*(undefined1 *)(param_1 + 0x1a4) = *(undefined1 *)((longlong)param_2 + 0x65);
|
|
*(undefined1 *)(param_1 + 0x1a5) = *(undefined1 *)((longlong)param_2 + 100);
|
|
*(undefined1 *)(param_1 + 0x1a6) = *(undefined1 *)((longlong)param_2 + 0x67);
|
|
*(char *)(param_1 + 0x198) = (char)param_2[0xf];
|
|
*(char *)(param_1 + 0x1c0) = (char)param_2[0xd];
|
|
iVar8 = *(int *)((longlong)param_2 + 0x5c);
|
|
*(int *)(param_1 + 0x19c) = iVar8;
|
|
if (((iVar8 != 0x80) && (iVar8 != 0xc0)) && (iVar8 != 0x100)) {
|
|
local_358 =
|
|
"CStartServerParameter::m_encryptedMessageKeyLength Incorrect key length, only 128,192,256";
|
|
std::exception::exception(local_2d0,&local_358);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2d0,(ThrowInfo *)&DAT_1403416b0);
|
|
}
|
|
iVar8 = (int)param_2[0xc];
|
|
*(int *)(param_1 + 0x1a0) = iVar8;
|
|
if ((((iVar8 != 0) && (iVar8 != 0x200)) && (iVar8 != 0x400)) && (iVar8 != 0x800)) {
|
|
local_440 =
|
|
"CStartServerParameter::m_fastEncryptedMessageKeyLength Incorrect key lengt, MaxSize is 2048, MinSize is 8"
|
|
;
|
|
std::exception::exception(local_2b8,&local_440);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_2b8,(ThrowInfo *)&DAT_1403416b0);
|
|
}
|
|
*(int *)(param_1 + 0x1a8) = (int)param_2[0x10];
|
|
*(undefined1 *)(param_1 + 0x1ac) = *(undefined1 *)((longlong)param_2 + 0x84);
|
|
*(undefined1 *)(param_1 + 0x1ad) = *(undefined1 *)((longlong)param_2 + 0x85);
|
|
FUN_1401c15d0(param_1 + 0xba0,param_1 + 0xba8);
|
|
local_3a8 = 0;
|
|
local_3a0 = (undefined4 *)0x0;
|
|
local_398 = 0;
|
|
local_390 = 0;
|
|
local_3b0 = Proud::ByteArray::vftable;
|
|
FUN_1401c14a0(&local_3b0,*(undefined4 *)(param_1 + 0x19c));
|
|
puVar16 = local_3a0;
|
|
if ((int)local_398 == 0) {
|
|
puVar16 = puVar17;
|
|
}
|
|
FUN_1401af310(param_1 + 0x798,puVar16,*(uint *)(param_1 + 0x19c) >> 3,0x10);
|
|
local_3f8 = 0;
|
|
local_3f0 = (undefined4 *)0x0;
|
|
local_3e8 = 0;
|
|
local_3e0 = 0;
|
|
local_400 = Proud::ByteArray::vftable;
|
|
FUN_1401c14a0(&local_400,*(undefined4 *)(param_1 + 0x1a0));
|
|
puVar16 = local_3f0;
|
|
if ((int)local_3e8 == 0) {
|
|
puVar16 = puVar17;
|
|
}
|
|
FUN_1401c0b90(param_1 + 0xb68,puVar16,*(uint *)(param_1 + 0x1a0) >> 3);
|
|
*(undefined4 *)(param_1 + 0xb98) = 0;
|
|
local_440 = operator_new(0xa8);
|
|
puVar16 = puVar17;
|
|
if (local_440 != (char *)0x0) {
|
|
puVar16 = (undefined4 *)(param_1 + -0x40);
|
|
if (param_1 == 0xa8) {
|
|
puVar16 = puVar17;
|
|
}
|
|
puVar16 = (undefined4 *)FUN_1401a2fe0(local_440,puVar16,1);
|
|
}
|
|
*(undefined4 **)(param_1 + 0x6e0) = puVar16;
|
|
local_440 = operator_new(0xa8);
|
|
puVar16 = puVar17;
|
|
if (local_440 != (char *)0x0) {
|
|
puVar16 = (undefined4 *)(param_1 + -0x40);
|
|
if (param_1 == 0xa8) {
|
|
puVar16 = puVar17;
|
|
}
|
|
puVar16 = (undefined4 *)FUN_1401a2fe0(local_440,puVar16,1);
|
|
}
|
|
*(undefined4 **)(param_1 + 0x6e8) = puVar16;
|
|
FUN_1401a1e20(param_1 + 0x6b8);
|
|
uVar14 = FUN_1401a1eb0(param_1 + 0x6b8);
|
|
*(undefined8 *)(param_1 + 0x158) = uVar14;
|
|
*(undefined8 *)(param_1 + 0x118) = 0;
|
|
puVar16 = (undefined4 *)FUN_140199840(local_180);
|
|
*(undefined4 *)(param_1 + 0x1c4) = *puVar16;
|
|
*(undefined4 *)(param_1 + 0x1c8) = puVar16[1];
|
|
*(undefined4 *)(param_1 + 0x1cc) = puVar16[2];
|
|
*(undefined4 *)(param_1 + 0x1d0) = puVar16[3];
|
|
*(int *)(param_1 + 0x179c) = (int)param_2[8];
|
|
*(undefined4 *)(param_1 + 0x340) = *(undefined4 *)((longlong)param_2 + 0x44);
|
|
*(int *)(param_1 + 0x344) = (int)param_2[9];
|
|
*(undefined4 *)(param_1 + 0x348) = *(undefined4 *)((longlong)param_2 + 0x4c);
|
|
*(int *)(param_1 + 0x34c) = (int)param_2[10];
|
|
puVar20 = (undefined *)*param_2;
|
|
if ((undefined *)*param_2 == (undefined *)0x0) {
|
|
puVar20 = PTR_DAT_1403440a0;
|
|
}
|
|
local_168 = local_160;
|
|
FUN_14016ac90(&local_168,puVar20,3);
|
|
FUN_14016bfb0(param_1 + 0x168,local_168);
|
|
if (local_168 != local_160) {
|
|
free(local_168);
|
|
}
|
|
puVar20 = (undefined *)param_2[1];
|
|
if ((undefined *)param_2[1] == (undefined *)0x0) {
|
|
puVar20 = PTR_DAT_1403440a0;
|
|
}
|
|
local_d8 = local_d0;
|
|
FUN_14016ac90(&local_d8,puVar20,3);
|
|
FUN_14016bfb0(param_1 + 0x170,local_d8);
|
|
if (local_d8 != local_d0) {
|
|
free(local_d8);
|
|
}
|
|
*(undefined4 *)(param_1 + 0x1b0) = *(undefined4 *)((longlong)param_2 + 0x6c);
|
|
*(longlong *)(param_1 + 0x1b8) = param_2[0xe];
|
|
local_388 = Proud::CFastArray<int,0>::vftable;
|
|
if (DAT_140344e08 != 5) {
|
|
FUN_14019a8d0();
|
|
}
|
|
local_380 = param_2[4];
|
|
local_364 = *(undefined4 *)((longlong)param_2 + 0x3c);
|
|
local_378 = (undefined4 *)0x0;
|
|
local_370 = 0;
|
|
local_368 = 0;
|
|
iVar8 = (int)param_2[6];
|
|
lVar26 = (longlong)iVar8;
|
|
if (iVar8 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
FUN_14015e670(&local_388,iVar8);
|
|
pppuVar5 = local_450;
|
|
puVar16 = local_378;
|
|
if ((int)local_370 == 0) {
|
|
puVar16 = puVar17;
|
|
}
|
|
puVar21 = puVar17;
|
|
if ((int)param_2[6] != 0) {
|
|
puVar21 = (undefined4 *)param_2[5];
|
|
}
|
|
if (0 < iVar8) {
|
|
lVar23 = (longlong)puVar21 - (longlong)puVar16;
|
|
do {
|
|
*puVar16 = *(undefined4 *)(lVar23 + (longlong)puVar16);
|
|
puVar16 = puVar16 + 1;
|
|
lVar26 = lVar26 + -1;
|
|
} while (lVar26 != 0);
|
|
}
|
|
local_468 = local_450;
|
|
cVar7 = FUN_140188240(param_1 + -0xa8,(int)param_2[8],&local_388,param_2 + 0x11);
|
|
if ((cVar7 != '\0') &&
|
|
(cVar7 = FUN_1401878c0(param_1 + -0xa8,(int)param_2[2],pppuVar5), cVar7 != '\0')) {
|
|
puVar16 = puVar17;
|
|
if (*(int *)((longlong)param_2 + 0x7c) == 0) {
|
|
local_450 = operator_new(0x10);
|
|
if (local_450 != (void *)0x0) {
|
|
puVar16 = (undefined4 *)FUN_1401bfde0(local_450);
|
|
}
|
|
}
|
|
else {
|
|
local_450 = operator_new(0x90);
|
|
if (local_450 != (void *)0x0) {
|
|
puVar16 = (undefined4 *)FUN_1401c0420(local_450,DAT_140344dd8);
|
|
}
|
|
}
|
|
*(undefined4 **)(param_1 + 0x3d0) = puVar16;
|
|
*(undefined4 *)(param_1 + 0x175c) = 0;
|
|
FUN_14004c050(param_1 + 0x1760,&DAT_1402a4aa0);
|
|
*(undefined8 *)(param_1 + 0x1768) = 0;
|
|
*(undefined4 *)(param_1 + 0x1798) = 0;
|
|
uVar11 = *(uint *)(param_2 + 0xb);
|
|
iVar8 = FUN_14016eed0();
|
|
if (iVar8 <= (int)uVar11) {
|
|
uVar11 = FUN_14016eed0();
|
|
}
|
|
puVar16 = puVar17;
|
|
if (0 < (int)uVar11) {
|
|
puVar16 = (undefined4 *)(ulonglong)uVar11;
|
|
}
|
|
*(int *)(param_2 + 0xb) = (int)puVar16;
|
|
if ((int)puVar16 == 0) {
|
|
uVar12 = FUN_14016eed0();
|
|
*(undefined4 *)(param_2 + 0xb) = uVar12;
|
|
}
|
|
local_360 = operator_new(0x280);
|
|
if (local_360 != (void *)0x0) {
|
|
puVar17 = (undefined4 *)FUN_1401a8bc0(local_360,param_1 + -0xa8);
|
|
}
|
|
*(undefined4 **)(param_1 + 0x338) = puVar17;
|
|
FUN_1401acc80(puVar17,*(undefined4 *)((longlong)param_2 + 0x54),(int)param_2[0xb]);
|
|
Sleep(100);
|
|
FUN_14019a9e0(&local_400);
|
|
FUN_14019a9e0(&local_3b0);
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
if (0 < (int)local_418) {
|
|
uVar22 = local_418 & 0xffffffff;
|
|
lVar26 = local_420;
|
|
do {
|
|
FUN_14004f5a0(lVar26);
|
|
lVar26 = lVar26 + 8;
|
|
uVar22 = uVar22 - 1;
|
|
} while (uVar22 != 0);
|
|
}
|
|
if (local_420 != 0) {
|
|
if (local_428 == (longlong *)0x0) {
|
|
FUN_14016d970();
|
|
}
|
|
else {
|
|
(**(code **)(*local_428 + 0x18))(local_428,local_420);
|
|
}
|
|
}
|
|
if (puVar18 != (undefined4 *)0x0) {
|
|
if (local_3d0 == (longlong *)0x0) {
|
|
FUN_14016d970(puVar18);
|
|
}
|
|
else {
|
|
(**(code **)(*local_3d0 + 0x18))(local_3d0,puVar18);
|
|
}
|
|
}
|
|
FUN_14016dbe0(param_1 + 0xb8);
|
|
return 1;
|
|
}
|
|
FUN_1401a1e70(param_1 + 0x6b8);
|
|
pvVar2 = *(void **)(param_1 + 0x6e0);
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_1401a31c0(pvVar2);
|
|
operator_delete(pvVar2);
|
|
}
|
|
*(undefined8 *)(param_1 + 0x6e0) = 0;
|
|
pvVar2 = *(void **)(param_1 + 0x6e8);
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_1401a31c0(pvVar2);
|
|
operator_delete(pvVar2);
|
|
}
|
|
*(undefined8 *)(param_1 + 0x6e8) = 0;
|
|
*(undefined4 *)(param_1 + 0x1c4) = 0;
|
|
*(undefined4 *)(param_1 + 0x1c8) = 0;
|
|
*(undefined4 *)(param_1 + 0x1cc) = 0;
|
|
*(undefined4 *)(param_1 + 0x1d0) = 0;
|
|
FUN_14019a9e0(&local_400);
|
|
FUN_14019a9e0(&local_3b0);
|
|
local_430 = Proud::CFastArray<Proud::StringT<char,Proud::AnsiStrTraits>,0>::vftable;
|
|
if (0 < (int)local_418) {
|
|
uVar22 = local_418 & 0xffffffff;
|
|
lVar26 = local_420;
|
|
do {
|
|
FUN_14004f5a0(lVar26);
|
|
lVar26 = lVar26 + 8;
|
|
uVar22 = uVar22 - 1;
|
|
} while (uVar22 != 0);
|
|
}
|
|
if (local_420 != 0) {
|
|
if (local_428 == (longlong *)0x0) {
|
|
FUN_14016d970();
|
|
}
|
|
else {
|
|
(**(code **)(*local_428 + 0x18))(local_428,local_420);
|
|
}
|
|
}
|
|
if (puVar18 != (undefined4 *)0x0) {
|
|
if (local_3d0 == (longlong *)0x0) {
|
|
FUN_14016d970(puVar18);
|
|
}
|
|
else {
|
|
(**(code **)(*local_3d0 + 0x18))(local_3d0,puVar18);
|
|
}
|
|
}
|
|
LAB_14018b3c1:
|
|
FUN_14016dbe0(param_1 + 0xb8);
|
|
return 0;
|
|
}
|
|
|