/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401e73c0 FUN_1401e73c0 * Pseudocode, not original source. */ uint FUN_1401e73c0(longlong *param_1,uint param_2) { char cVar1; undefined2 uVar2; int iVar3; undefined8 *puVar4; int *piVar5; bool bVar6; undefined4 uVar7; int iVar8; uint uVar9; undefined1 uVar10; ulonglong uVar11; uint uVar12; int iVar13; ulonglong uVar14; if (((param_1 == (longlong *)0x0) || (puVar4 = (undefined8 *)param_1[5], puVar4 == (undefined8 *)0x0)) || (5 < param_2)) { return 0xfffffffe; } if (((param_1[2] == 0) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) || ((*(int *)(puVar4 + 1) == 0x29a && (param_2 != 4)))) { param_1[4] = (longlong)"stream error"; return 0xfffffffe; } if ((int)param_1[3] == 0) { param_1[4] = (longlong)"buffer error"; return 0xfffffffb; } iVar8 = *(int *)(puVar4 + 8); *(uint *)(puVar4 + 8) = param_2; *puVar4 = param_1; iVar13 = 0; if (*(int *)(puVar4 + 1) == 0x2a) { if (*(int *)((longlong)puVar4 + 0x2c) == 2) { uVar7 = FUN_1401c4210(0,0,0); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0x1f; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0x8b; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 8; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; piVar5 = (int *)puVar4[6]; uVar10 = 0; if (piVar5 == (int *)0x0) { *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; if (*(int *)((longlong)puVar4 + 0xac) == 9) { uVar10 = 2; } else if ((1 < *(int *)(puVar4 + 0x16)) || (*(int *)((longlong)puVar4 + 0xac) < 2)) { uVar10 = 4; } *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = uVar10; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = 0xb; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined4 *)(puVar4 + 1) = 0x71; } else { *(byte *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (-(*(longlong *)(piVar5 + 0xc) != 0) & 0x10U) + (-(piVar5[0xf] != 0) & 2U) + (-(*(longlong *)(piVar5 + 8) != 0) & 8U) + (-(*(longlong *)(piVar5 + 4) != 0) & 4U) + (*piVar5 != 0); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 4); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 5); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 6); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 7); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; if (*(int *)((longlong)puVar4 + 0xac) == 9) { uVar10 = 2; } else if ((1 < *(int *)(puVar4 + 0x16)) || (*(int *)((longlong)puVar4 + 0xac) < 2)) { uVar10 = 4; } *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = uVar10; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 0xc); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; uVar11 = (ulonglong)*(uint *)(puVar4 + 5); if (*(longlong *)(puVar4[6] + 0x10) != 0) { *(undefined1 *)(uVar11 + puVar4[2]) = *(undefined1 *)(puVar4[6] + 0x18); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)(puVar4[6] + 0x19); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; uVar11 = (ulonglong)*(uint *)(puVar4 + 5); } if (*(int *)(puVar4[6] + 0x3c) != 0) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c),puVar4[2],uVar11); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } *(undefined4 *)(puVar4 + 7) = 0; *(undefined4 *)(puVar4 + 1) = 0x45; } } else { if ((*(int *)(puVar4 + 0x16) < 2) && (iVar3 = *(int *)((longlong)puVar4 + 0xac), 1 < iVar3)) { if (iVar3 < 6) { iVar13 = 1; } else { iVar13 = (iVar3 != 6) + 2; } } uVar12 = (*(int *)(puVar4 + 9) + -8) * 0x1000 + 0x800U | iVar13 << 6; if (*(int *)((longlong)puVar4 + 0x94) != 0) { uVar12 = uVar12 | 0x20; } *(undefined4 *)(puVar4 + 1) = 0x71; iVar13 = (uVar12 / 0x1f + 1) * 0x1f; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)((uint)iVar13 >> 8); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)iVar13; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; if (*(int *)((longlong)puVar4 + 0x94) != 0) { uVar2 = *(undefined2 *)((longlong)param_1 + 0x4e); *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)uVar2; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; uVar2 = *(undefined2 *)((longlong)param_1 + 0x4c); *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)uVar2; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; } *(undefined4 *)((longlong)param_1 + 0x4c) = 1; } } if (*(int *)(puVar4 + 1) == 0x45) { if (*(longlong *)(puVar4[6] + 0x10) != 0) { uVar12 = *(uint *)(puVar4 + 5); if (*(uint *)(puVar4 + 7) < (uint)*(ushort *)(puVar4[6] + 0x18)) { do { uVar9 = *(uint *)(puVar4 + 5); if (uVar9 == *(uint *)(puVar4 + 3)) { if ((*(int *)(puVar4[6] + 0x3c) != 0) && (uVar12 < uVar9)) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c), (ulonglong)uVar12 + puVar4[2],uVar9 - uVar12); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } FUN_1401e5b90(param_1); uVar12 = *(uint *)(puVar4 + 5); uVar9 = uVar12; if (uVar12 == *(uint *)(puVar4 + 3)) break; } *(undefined1 *)((ulonglong)uVar9 + puVar4[2]) = *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 7) + *(longlong *)(puVar4[6] + 0x10)); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(int *)(puVar4 + 7) = *(int *)(puVar4 + 7) + 1; } while (*(uint *)(puVar4 + 7) < (uint)*(ushort *)(puVar4[6] + 0x18)); } if ((*(int *)(puVar4[6] + 0x3c) != 0) && (uVar12 < *(uint *)(puVar4 + 5))) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c), (ulonglong)uVar12 + puVar4[2],*(uint *)(puVar4 + 5) - uVar12); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } if (*(int *)(puVar4 + 7) != *(int *)(puVar4[6] + 0x18)) goto LAB_1401e7850; *(undefined4 *)(puVar4 + 7) = 0; } *(undefined4 *)(puVar4 + 1) = 0x49; } LAB_1401e7850: if (*(int *)(puVar4 + 1) == 0x49) { if (*(longlong *)(puVar4[6] + 0x20) != 0) { uVar11 = (ulonglong)*(uint *)(puVar4 + 5); do { uVar12 = *(uint *)(puVar4 + 5); uVar14 = (ulonglong)uVar12; if (uVar12 == *(uint *)(puVar4 + 3)) { if ((*(int *)(puVar4[6] + 0x3c) != 0) && ((uint)uVar11 < uVar12)) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c),uVar11 + puVar4[2], uVar12 - (uint)uVar11); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } FUN_1401e5b90(param_1); uVar11 = (ulonglong)*(uint *)(puVar4 + 5); uVar14 = uVar11; if (*(uint *)(puVar4 + 5) == *(uint *)(puVar4 + 3)) { bVar6 = true; goto LAB_1401e78e0; } } cVar1 = *(char *)(*(longlong *)(puVar4[6] + 0x20) + (ulonglong)*(uint *)(puVar4 + 7)); *(uint *)(puVar4 + 7) = *(uint *)(puVar4 + 7) + 1; *(char *)(uVar14 + puVar4[2]) = cVar1; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; } while (cVar1 != '\0'); bVar6 = false; LAB_1401e78e0: if (*(int *)(puVar4[6] + 0x3c) != 0) { if ((uint)uVar11 < *(uint *)(puVar4 + 5)) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c),uVar11 + puVar4[2], *(uint *)(puVar4 + 5) - (uint)uVar11); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } } if (bVar6) goto LAB_1401e7914; *(undefined4 *)(puVar4 + 7) = 0; } *(undefined4 *)(puVar4 + 1) = 0x5b; } LAB_1401e7914: if (*(int *)(puVar4 + 1) == 0x5b) { if (*(longlong *)(puVar4[6] + 0x30) != 0) { uVar11 = (ulonglong)*(uint *)(puVar4 + 5); do { uVar12 = *(uint *)(puVar4 + 5); uVar14 = (ulonglong)uVar12; if (uVar12 == *(uint *)(puVar4 + 3)) { if ((*(int *)(puVar4[6] + 0x3c) != 0) && ((uint)uVar11 < uVar12)) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c),uVar11 + puVar4[2], uVar12 - (uint)uVar11); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } FUN_1401e5b90(param_1); uVar11 = (ulonglong)*(uint *)(puVar4 + 5); uVar14 = uVar11; if (*(uint *)(puVar4 + 5) == *(uint *)(puVar4 + 3)) { bVar6 = true; goto LAB_1401e79a0; } } cVar1 = *(char *)(*(longlong *)(puVar4[6] + 0x30) + (ulonglong)*(uint *)(puVar4 + 7)); *(uint *)(puVar4 + 7) = *(uint *)(puVar4 + 7) + 1; *(char *)(uVar14 + puVar4[2]) = cVar1; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; } while (cVar1 != '\0'); bVar6 = false; LAB_1401e79a0: if (*(int *)(puVar4[6] + 0x3c) != 0) { if ((uint)uVar11 < *(uint *)(puVar4 + 5)) { uVar7 = FUN_1401c4210(*(undefined4 *)((longlong)param_1 + 0x4c),uVar11 + puVar4[2], *(uint *)(puVar4 + 5) - (uint)uVar11); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } } if (bVar6) goto LAB_1401e79d0; } *(undefined4 *)(puVar4 + 1) = 0x67; } LAB_1401e79d0: if (*(int *)(puVar4 + 1) == 0x67) { if (*(int *)(puVar4[6] + 0x3c) != 0) { if (*(uint *)(puVar4 + 3) < *(int *)(puVar4 + 5) + 2U) { FUN_1401e5b90(param_1); } if (*(uint *)(puVar4 + 3) < *(uint *)(puVar4 + 5) + 2) goto LAB_1401e7a3a; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; uVar7 = FUN_1401c4210(0,0,0); *(undefined4 *)((longlong)param_1 + 0x4c) = uVar7; } *(undefined4 *)(puVar4 + 1) = 0x71; } LAB_1401e7a3a: if (*(int *)(puVar4 + 5) == 0) { if ((((int)param_1[1] == 0) && ((int)param_2 <= iVar8)) && (param_2 != 4)) goto LAB_1401e7a89; LAB_1401e7a79: if (*(int *)(puVar4 + 1) == 0x29a) { if ((int)param_1[1] != 0) { LAB_1401e7a89: param_1[4] = (longlong)"buffer error"; return 0xfffffffb; } LAB_1401e7aa1: if ((*(int *)((longlong)puVar4 + 0x9c) != 0) || ((param_2 != 0 && (*(int *)(puVar4 + 1) != 0x29a)))) goto LAB_1401e7abd; } else { if ((int)param_1[1] == 0) goto LAB_1401e7aa1; LAB_1401e7abd: if (*(int *)(puVar4 + 0x16) == 2) { iVar8 = FUN_1401e7070(); } else if (*(int *)(puVar4 + 0x16) == 3) { iVar8 = FUN_1401e6cf0(); } else { iVar8 = (*(code *)(&PTR_FUN_140291928)[(longlong)*(int *)((longlong)puVar4 + 0xac) * 2]) (puVar4); } if ((iVar8 == 2) || (iVar8 == 3)) { *(undefined4 *)(puVar4 + 1) = 0x29a; } if ((iVar8 == 0) || (iVar8 == 2)) { if ((int)param_1[3] != 0) { return 0; } goto LAB_1401e7a4e; } if (iVar8 == 1) { if (param_2 == 1) { FUN_1401ea130(puVar4); } else if ((param_2 != 5) && (FUN_1401ea090(puVar4,0,0,0), param_2 == 3)) { *(undefined2 *)(puVar4[0xd] + (ulonglong)(*(int *)((longlong)puVar4 + 0x74) - 1) * 2) = 0; memset((void *)puVar4[0xd],0,(ulonglong)(*(int *)((longlong)puVar4 + 0x74) - 1) * 2); if (*(int *)((longlong)puVar4 + 0x9c) == 0) { *(undefined4 *)((longlong)puVar4 + 0x94) = 0; *(undefined4 *)((longlong)puVar4 + 0x84) = 0; } } FUN_1401e5b90(param_1); if ((int)param_1[3] == 0) goto LAB_1401e7a4e; } } if (param_2 == 4) { if (0 < *(int *)((longlong)puVar4 + 0x2c)) { if (*(int *)((longlong)puVar4 + 0x2c) == 2) { *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4e); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4f); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xc); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xd); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xe); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xf); } else { uVar2 = *(undefined2 *)((longlong)param_1 + 0x4e); *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)uVar2; *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; uVar2 = *(undefined2 *)((longlong)param_1 + 0x4c); *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; *(char *)((ulonglong)*(uint *)(puVar4 + 5) + puVar4[2]) = (char)uVar2; } *(int *)(puVar4 + 5) = *(int *)(puVar4 + 5) + 1; FUN_1401e5b90(param_1); if (0 < *(int *)((longlong)puVar4 + 0x2c)) { *(int *)((longlong)puVar4 + 0x2c) = -*(int *)((longlong)puVar4 + 0x2c); } return (uint)(*(int *)(puVar4 + 5) == 0); } return 1; } } else { FUN_1401e5b90(param_1); if ((int)param_1[3] != 0) goto LAB_1401e7a79; LAB_1401e7a4e: *(undefined4 *)(puVar4 + 8) = 0xffffffff; } return 0; }