/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400bbeb0 FUN_1400bbeb0 * Pseudocode, not original source. */ uint FUN_1400bbeb0(longlong *param_1,uint param_2) { char cVar1; undefined2 uVar2; int iVar3; longlong *plVar4; int *piVar5; bool bVar6; longlong lVar7; uint uVar8; int iVar9; undefined8 uVar10; uint uVar11; undefined1 uVar12; ulonglong uVar13; ulonglong uVar14; if (((param_1 == (longlong *)0x0) || (plVar4 = (longlong *)param_1[5], plVar4 == (longlong *)0x0)) || (5 < param_2)) { return 0xfffffffe; } if (((param_1[2] == 0) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) || (((int)plVar4[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; } lVar7 = plVar4[8]; *(uint *)(plVar4 + 8) = param_2; *plVar4 = (longlong)param_1; iVar9 = 0; if ((int)plVar4[1] == 0x2a) { if (*(int *)((longlong)plVar4 + 0x2c) == 2) { uVar8 = FUN_140099230(0,(uint *)0x0,0); *(uint *)((longlong)param_1 + 0x4c) = uVar8; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0x1f; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0x8b; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 8; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; piVar5 = (int *)plVar4[6]; uVar12 = 0; if (piVar5 == (int *)0x0) { *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; if (*(int *)((longlong)plVar4 + 0xac) == 9) { uVar12 = 2; } else if ((1 < (int)plVar4[0x16]) || (*(int *)((longlong)plVar4 + 0xac) < 2)) { uVar12 = 4; } *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = uVar12; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = 0xb; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined4 *)(plVar4 + 1) = 0x71; } else { *(byte *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (-(*(longlong *)(piVar5 + 0xc) != 0) & 0x10U) + (-(piVar5[0xf] != 0) & 2U) + (-(*(longlong *)(piVar5 + 8) != 0) & 8U) + (-(*(longlong *)(piVar5 + 4) != 0) & 4U) + (*piVar5 != 0); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 4); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 5); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 6); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 7); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; if (*(int *)((longlong)plVar4 + 0xac) == 9) { uVar12 = 2; } else if ((1 < (int)plVar4[0x16]) || (*(int *)((longlong)plVar4 + 0xac) < 2)) { uVar12 = 4; } *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = uVar12; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 0xc); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; uVar8 = *(uint *)(plVar4 + 5); if (*(longlong *)(plVar4[6] + 0x10) != 0) { *(undefined1 *)((ulonglong)uVar8 + plVar4[2]) = *(undefined1 *)(plVar4[6] + 0x18); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)(plVar4[6] + 0x19); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; uVar8 = *(uint *)(plVar4 + 5); } if (*(int *)(plVar4[6] + 0x3c) != 0) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c),(uint *)plVar4[2],uVar8); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } *(undefined4 *)(plVar4 + 7) = 0; *(undefined4 *)(plVar4 + 1) = 0x45; } } else { if (((int)plVar4[0x16] < 2) && (iVar3 = *(int *)((longlong)plVar4 + 0xac), 1 < iVar3)) { if (iVar3 < 6) { iVar9 = 1; } else { iVar9 = (iVar3 != 6) + 2; } } uVar8 = ((int)plVar4[9] + -8) * 0x1000 + 0x800U | iVar9 << 6; if (*(int *)((longlong)plVar4 + 0x94) != 0) { uVar8 = uVar8 | 0x20; } *(undefined4 *)(plVar4 + 1) = 0x71; iVar9 = (uVar8 / 0x1f + 1) * 0x1f; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)((uint)iVar9 >> 8); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)iVar9; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; if (*(int *)((longlong)plVar4 + 0x94) != 0) { uVar2 = *(undefined2 *)((longlong)param_1 + 0x4e); *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)uVar2; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; uVar2 = *(undefined2 *)((longlong)param_1 + 0x4c); *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)uVar2; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; } *(undefined4 *)((longlong)param_1 + 0x4c) = 1; } } if ((int)plVar4[1] == 0x45) { if (*(longlong *)(plVar4[6] + 0x10) != 0) { uVar8 = *(uint *)(plVar4 + 5); if (*(uint *)(plVar4 + 7) < (uint)*(ushort *)(plVar4[6] + 0x18)) { do { uVar11 = *(uint *)(plVar4 + 5); if (uVar11 == *(uint *)(plVar4 + 3)) { if ((*(int *)(plVar4[6] + 0x3c) != 0) && (uVar8 < uVar11)) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c), (uint *)((ulonglong)uVar8 + plVar4[2]),uVar11 - uVar8); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } FUN_1400ba680((longlong)param_1); uVar8 = *(uint *)(plVar4 + 5); uVar11 = uVar8; if (uVar8 == *(uint *)(plVar4 + 3)) break; } *(undefined1 *)((ulonglong)uVar11 + plVar4[2]) = *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 7) + *(longlong *)(plVar4[6] + 0x10)); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(int *)(plVar4 + 7) = (int)plVar4[7] + 1; } while (*(uint *)(plVar4 + 7) < (uint)*(ushort *)(plVar4[6] + 0x18)); } if ((*(int *)(plVar4[6] + 0x3c) != 0) && (uVar8 < *(uint *)(plVar4 + 5))) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c), (uint *)((ulonglong)uVar8 + plVar4[2]),*(uint *)(plVar4 + 5) - uVar8); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } if ((int)plVar4[7] != *(int *)(plVar4[6] + 0x18)) goto LAB_1400bc340; *(undefined4 *)(plVar4 + 7) = 0; } *(undefined4 *)(plVar4 + 1) = 0x49; } LAB_1400bc340: if ((int)plVar4[1] == 0x49) { if (*(longlong *)(plVar4[6] + 0x20) != 0) { uVar13 = (ulonglong)*(uint *)(plVar4 + 5); do { uVar8 = *(uint *)(plVar4 + 5); uVar14 = (ulonglong)uVar8; if (uVar8 == *(uint *)(plVar4 + 3)) { if ((*(int *)(plVar4[6] + 0x3c) != 0) && ((uint)uVar13 < uVar8)) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar13 + plVar4[2]), uVar8 - (uint)uVar13); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } FUN_1400ba680((longlong)param_1); uVar13 = (ulonglong)*(uint *)(plVar4 + 5); uVar14 = uVar13; if (*(uint *)(plVar4 + 5) == *(uint *)(plVar4 + 3)) { bVar6 = true; goto LAB_1400bc3d0; } } cVar1 = *(char *)(*(longlong *)(plVar4[6] + 0x20) + (ulonglong)*(uint *)(plVar4 + 7)); *(uint *)(plVar4 + 7) = *(uint *)(plVar4 + 7) + 1; *(char *)(uVar14 + plVar4[2]) = cVar1; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; } while (cVar1 != '\0'); bVar6 = false; LAB_1400bc3d0: if (*(int *)(plVar4[6] + 0x3c) != 0) { if ((uint)uVar13 < *(uint *)(plVar4 + 5)) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar13 + plVar4[2]), *(uint *)(plVar4 + 5) - (uint)uVar13); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } } if (bVar6) goto LAB_1400bc404; *(undefined4 *)(plVar4 + 7) = 0; } *(undefined4 *)(plVar4 + 1) = 0x5b; } LAB_1400bc404: if ((int)plVar4[1] == 0x5b) { if (*(longlong *)(plVar4[6] + 0x30) != 0) { uVar13 = (ulonglong)*(uint *)(plVar4 + 5); do { uVar8 = *(uint *)(plVar4 + 5); uVar14 = (ulonglong)uVar8; if (uVar8 == *(uint *)(plVar4 + 3)) { if ((*(int *)(plVar4[6] + 0x3c) != 0) && ((uint)uVar13 < uVar8)) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar13 + plVar4[2]), uVar8 - (uint)uVar13); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } FUN_1400ba680((longlong)param_1); uVar13 = (ulonglong)*(uint *)(plVar4 + 5); uVar14 = uVar13; if (*(uint *)(plVar4 + 5) == *(uint *)(plVar4 + 3)) { bVar6 = true; goto LAB_1400bc490; } } cVar1 = *(char *)(*(longlong *)(plVar4[6] + 0x30) + (ulonglong)*(uint *)(plVar4 + 7)); *(uint *)(plVar4 + 7) = *(uint *)(plVar4 + 7) + 1; *(char *)(uVar14 + plVar4[2]) = cVar1; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; } while (cVar1 != '\0'); bVar6 = false; LAB_1400bc490: if (*(int *)(plVar4[6] + 0x3c) != 0) { if ((uint)uVar13 < *(uint *)(plVar4 + 5)) { uVar8 = FUN_140099230(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar13 + plVar4[2]), *(uint *)(plVar4 + 5) - (uint)uVar13); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } } if (bVar6) goto LAB_1400bc4c0; } *(undefined4 *)(plVar4 + 1) = 0x67; } LAB_1400bc4c0: if ((int)plVar4[1] == 0x67) { if (*(int *)(plVar4[6] + 0x3c) != 0) { if (*(uint *)(plVar4 + 3) < (int)plVar4[5] + 2U) { FUN_1400ba680((longlong)param_1); } if (*(uint *)(plVar4 + 3) < *(uint *)(plVar4 + 5) + 2) goto LAB_1400bc52a; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; uVar8 = FUN_140099230(0,(uint *)0x0,0); *(uint *)((longlong)param_1 + 0x4c) = uVar8; } *(undefined4 *)(plVar4 + 1) = 0x71; } LAB_1400bc52a: if ((int)plVar4[5] == 0) { if ((((int)param_1[1] == 0) && ((int)param_2 <= (int)lVar7)) && (param_2 != 4)) goto LAB_1400bc579; LAB_1400bc569: if ((int)plVar4[1] == 0x29a) { if ((int)param_1[1] != 0) { LAB_1400bc579: param_1[4] = (longlong)"buffer error"; return 0xfffffffb; } LAB_1400bc591: if ((*(int *)((longlong)plVar4 + 0x9c) != 0) || ((param_2 != 0 && ((int)plVar4[1] != 0x29a)))) goto LAB_1400bc5ad; } else { if ((int)param_1[1] == 0) goto LAB_1400bc591; LAB_1400bc5ad: if ((int)plVar4[0x16] == 2) { uVar10 = FUN_1400bbb60(plVar4,param_2); iVar9 = (int)uVar10; } else if ((int)plVar4[0x16] == 3) { iVar9 = FUN_1400bb7e0(plVar4,param_2); } else { iVar9 = (*(code *)(&PTR_FUN_140121e58)[(longlong)*(int *)((longlong)plVar4 + 0xac) * 2])(); } if ((iVar9 == 2) || (iVar9 == 3)) { *(undefined4 *)(plVar4 + 1) = 0x29a; } if ((iVar9 == 0) || (iVar9 == 2)) { if ((int)param_1[3] != 0) { return 0; } goto LAB_1400bc53e; } if (iVar9 == 1) { if (param_2 == 1) { FUN_1400bec20((longlong)plVar4); } else if ((param_2 != 5) && (FUN_1400beb80((longlong)plVar4,(undefined1 *)0x0,0,0), param_2 == 3)) { *(undefined2 *)(plVar4[0xd] + (ulonglong)(*(int *)((longlong)plVar4 + 0x74) - 1) * 2) = 0; memset((void *)plVar4[0xd],0,(ulonglong)(*(int *)((longlong)plVar4 + 0x74) - 1) * 2); if (*(int *)((longlong)plVar4 + 0x9c) == 0) { *(undefined4 *)((longlong)plVar4 + 0x94) = 0; *(undefined4 *)((longlong)plVar4 + 0x84) = 0; } } FUN_1400ba680((longlong)param_1); if ((int)param_1[3] == 0) goto LAB_1400bc53e; } } if (param_2 == 4) { if (0 < *(int *)((longlong)plVar4 + 0x2c)) { if (*(int *)((longlong)plVar4 + 0x2c) == 2) { *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4e); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0x4f); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xc); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xd); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xe); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(undefined1 *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = *(undefined1 *)((longlong)param_1 + 0xf); } else { uVar2 = *(undefined2 *)((longlong)param_1 + 0x4e); *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)uVar2; *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; uVar2 = *(undefined2 *)((longlong)param_1 + 0x4c); *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)((ushort)uVar2 >> 8); *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; *(char *)((ulonglong)*(uint *)(plVar4 + 5) + plVar4[2]) = (char)uVar2; } *(int *)(plVar4 + 5) = (int)plVar4[5] + 1; FUN_1400ba680((longlong)param_1); if (0 < *(int *)((longlong)plVar4 + 0x2c)) { *(int *)((longlong)plVar4 + 0x2c) = -*(int *)((longlong)plVar4 + 0x2c); } return (uint)((int)plVar4[5] == 0); } return 1; } } else { FUN_1400ba680((longlong)param_1); if ((int)param_1[3] != 0) goto LAB_1400bc569; LAB_1400bc53e: *(undefined4 *)(plVar4 + 8) = 0xffffffff; } return 0; }