/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x140021d50 FUN_140021d50 * Pseudocode, not original source. */ byte * FUN_140021d50(longlong *param_1,byte *param_2,longlong *param_3,int param_4) { ulonglong uVar1; byte bVar2; char cVar3; char cVar4; size_t sVar5; size_t sVar6; longlong *plVar7; undefined1 auVar8 [16]; undefined1 auVar9 [16]; byte *pbVar10; longlong lVar11; byte *pbVar12; __uint64 _Var13; size_t *psVar14; longlong *plVar15; char *pcVar16; size_t *psVar17; ulonglong uVar18; longlong lVar19; size_t *psVar20; size_t *local_res10; size_t *local_60; size_t *local_50; pbVar10 = FUN_140020ee0(param_2,param_4); for (plVar15 = param_1; plVar15 != (longlong *)0x0; plVar15 = (longlong *)plVar15[3]) { lVar11 = (**(code **)(*plVar15 + 0x20))(plVar15); if (lVar11 != 0) { lVar11 = (**(code **)(*plVar15 + 0x20))(plVar15); goto LAB_140021dca; } } lVar11 = 0; LAB_140021dca: if ((pbVar10 == (byte *)0x0) || (*pbVar10 == 0)) { if (lVar11 == 0) { return (byte *)0x0; } if (*(char *)(lVar11 + 0x58) != '\0') { return (byte *)0x0; } *(undefined1 *)(lVar11 + 0x58) = 1; *(undefined4 *)(lVar11 + 0x5c) = 4; uVar18 = 0xffffffffffffffff; pcVar16 = PTR_s_Error_parsing_Element__140174c50; do { if (uVar18 == 0) break; uVar18 = uVar18 - 1; cVar3 = *pcVar16; pcVar16 = pcVar16 + 1; } while (cVar3 != '\0'); FUN_14001e2c0((longlong *)(lVar11 + 0x60),PTR_s_Error_parsing_Element__140174c50,~uVar18 - 1); *(undefined4 *)(lVar11 + 0x78) = 0xffffffff; *(undefined4 *)(lVar11 + 0x74) = 0xffffffff; return (byte *)0x0; } if (param_3 != (longlong *)0x0) { FUN_140020d90((int *)param_3,pbVar10,param_4); param_1[1] = *param_3; } if (*pbVar10 != 0x3c) { if (lVar11 == 0) { return (byte *)0x0; } FUN_1400219a0(lVar11,4,pbVar10,(int *)param_3,param_4); return (byte *)0x0; } pbVar10 = FUN_140020ee0(pbVar10 + 1,param_4); pbVar12 = FUN_140020fc0(pbVar10,param_1 + 7); if ((pbVar12 == (byte *)0x0) || (*pbVar12 == 0)) { if (lVar11 == 0) { return (byte *)0x0; } FUN_1400219a0(lVar11,5,pbVar10,(int *)param_3,param_4); return (byte *)0x0; } _Var13 = SUB168(ZEXT816(4) * ZEXT816(7),0); if (SUB168(ZEXT816(4) * ZEXT816(7),8) != 0) { _Var13 = 0xffffffffffffffff; } psVar14 = operator_new(_Var13); *psVar14 = 2; *(undefined1 *)((longlong)psVar14 + 0x12) = 0; psVar14[1] = 2; memcpy(psVar14 + 2,&DAT_1401305e0,*psVar14); psVar20 = (size_t *)param_1[7]; sVar5 = *psVar20; uVar18 = *psVar14 + sVar5; local_res10 = psVar14; local_60 = psVar14; if ((psVar14[1] < uVar18) && (uVar1 = psVar14[1] + uVar18, psVar14[1] < uVar1)) { sVar6 = *psVar14; if (uVar1 == 0) { local_res10 = &DAT_14017ce88; local_60 = local_50; } else { auVar8._8_8_ = 0; auVar8._0_8_ = uVar1 + 0x1b >> 2; _Var13 = SUB168(ZEXT816(4) * auVar8,0); if (SUB168(ZEXT816(4) * auVar8,8) != 0) { _Var13 = 0xffffffffffffffff; } local_res10 = operator_new(_Var13); *local_res10 = sVar6; *(undefined1 *)((longlong)local_res10 + sVar6 + 0x10) = 0; local_res10[1] = uVar1; local_60 = local_res10; } memcpy(local_res10 + 2,psVar14 + 2,*psVar14); if (psVar14 != &DAT_14017ce88) { operator_delete__(psVar14); } } memmove((void *)(*local_res10 + 0x10 + (longlong)local_res10),psVar20 + 2,sVar5); *local_res10 = uVar18; *(undefined1 *)((longlong)local_res10 + uVar18 + 0x10) = 0; sVar5 = *local_res10; uVar18 = sVar5 + 1; psVar20 = local_60; psVar14 = local_res10; if ((local_res10[1] < uVar18) && (uVar1 = local_res10[1] + uVar18, local_res10[1] < uVar1)) { sVar6 = *local_res10; if (uVar1 == 0) { psVar14 = &DAT_14017ce88; } else { auVar9._8_8_ = 0; auVar9._0_8_ = uVar1 + 0x1b >> 2; _Var13 = SUB168(ZEXT816(4) * auVar9,0); if (SUB168(ZEXT816(4) * auVar9,8) != 0) { _Var13 = 0xffffffffffffffff; } psVar14 = operator_new(_Var13); *psVar14 = sVar6; *(undefined1 *)((longlong)psVar14 + sVar6 + 0x10) = 0; psVar14[1] = uVar1; local_50 = psVar14; } memcpy(psVar14 + 2,local_res10 + 2,*local_res10); psVar20 = local_50; if (local_res10 != &DAT_14017ce88) { operator_delete__(local_60); } } memmove((void *)(*psVar14 + 0x10 + (longlong)psVar14),&DAT_140132688,1); *psVar14 = uVar18; *(undefined1 *)(sVar5 + 0x11 + (longlong)psVar14) = 0; while( true ) { if (*pbVar12 == 0) { if (psVar14 != &DAT_14017ce88) { operator_delete__(psVar20); return pbVar12; } return pbVar12; } pbVar10 = FUN_140020ee0(pbVar12,param_4); if ((pbVar10 == (byte *)0x0) || (bVar2 = *pbVar10, bVar2 == 0)) { if (lVar11 != 0) { FUN_1400219a0(lVar11,7,pbVar12,(int *)param_3,param_4); } goto LAB_1400221f4; } if (bVar2 == 0x2f) { if (pbVar10[1] == 0x3e) { if (psVar14 != &DAT_14017ce88) { operator_delete__(psVar20); } return pbVar10 + 2; } if (lVar11 != 0) { FUN_1400219a0(lVar11,8,pbVar10 + 1,(int *)param_3,param_4); } goto LAB_1400221f4; } if (bVar2 == 0x3e) break; plVar15 = operator_new(0x50); if (plVar15 == (longlong *)0x0) { if (lVar11 != 0) { FUN_1400219a0(lVar11,3,pbVar12,(int *)param_3,param_4); } goto LAB_1400221f4; } *(undefined4 *)((longlong)plVar15 + 0xc) = 0xffffffff; *(undefined4 *)(plVar15 + 1) = 0xffffffff; plVar15[2] = 0; *plVar15 = (longlong)TiXmlAttribute::vftable; plVar15[4] = (longlong)&DAT_14017ce88; plVar15[6] = (longlong)&DAT_14017ce88; plVar15[9] = 0; plVar15[8] = 0; plVar15[3] = lVar11; pbVar12 = (byte *)(**(code **)(*plVar15 + 0x10))(plVar15,pbVar10,param_3,param_4); if ((pbVar12 == (byte *)0x0) || (*pbVar12 == 0)) { if (lVar11 != 0) { FUN_1400219a0(lVar11,4,pbVar10,(int *)param_3,param_4); } (**(code **)*plVar15)(plVar15,1); goto LAB_1400221f4; } for (plVar7 = (longlong *)param_1[0x14]; plVar7 != param_1 + 0xb; plVar7 = (longlong *)plVar7[9] ) { pcVar16 = (char *)(plVar7[4] + 0x10); lVar19 = (plVar15[4] + 0x10) - (longlong)pcVar16; do { cVar3 = *pcVar16; cVar4 = pcVar16[lVar19]; if (cVar3 != cVar4) break; pcVar16 = pcVar16 + 1; } while (cVar4 != '\0'); if (cVar3 == cVar4) { if (plVar7 != (longlong *)0x0) { uVar18 = 0xffffffffffffffff; pcVar16 = (char *)(plVar15[6] + 0x10); goto code_r0x0001400221d4; } break; } } plVar15[9] = (longlong)(param_1 + 0xb); plVar15[8] = param_1[0x13]; *(longlong **)(param_1[0x13] + 0x48) = plVar15; param_1[0x13] = (longlong)plVar15; } pbVar10 = (byte *)FUN_140022410(param_1,pbVar10 + 1,param_3,param_4); if ((pbVar10 == (byte *)0x0) || (*pbVar10 == 0)) { if (lVar11 != 0) { FUN_1400219a0(lVar11,9,pbVar10,(int *)param_3,param_4); } } else { psVar17 = psVar14 + 2; lVar19 = (longlong)pbVar10 - (longlong)psVar17; do { if ((char)*psVar17 == '\0') goto LAB_1400222c9; } while ((*(char *)(lVar19 + (longlong)psVar17) == (char)*psVar17) && (psVar17 = (size_t *)((longlong)psVar17 + 1), *(char *)(lVar19 + (longlong)psVar17) != '\0')); if ((char)*psVar17 == '\0') { LAB_1400222c9: sVar5 = *psVar14; if (psVar14 != &DAT_14017ce88) { operator_delete__(psVar20); return pbVar10 + sVar5; } return pbVar10 + sVar5; } if (lVar11 != 0) { FUN_1400219a0(lVar11,9,pbVar10,(int *)param_3,param_4); } } goto LAB_1400221f4; while( true ) { uVar18 = uVar18 - 1; cVar3 = *pcVar16; pcVar16 = pcVar16 + 1; if (cVar3 == '\0') break; code_r0x0001400221d4: if (uVar18 == 0) break; } FUN_14001e2c0(plVar7 + 6,(char *)(plVar15[6] + 0x10),~uVar18 - 1); (**(code **)*plVar15)(plVar15,1); LAB_1400221f4: if (psVar14 != &DAT_14017ce88) { operator_delete__(psVar20); } return (byte *)0x0; }