/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400d2510 FUN_1400d2510 * Pseudocode, not original source. */ ulonglong FUN_1400d2510(longlong param_1,uint param_2,char *param_3,uint *param_4,int param_5) { uint *puVar1; undefined4 uVar2; int iVar3; undefined4 extraout_var; ulonglong uVar4; undefined4 extraout_var_00; undefined4 extraout_var_01; undefined4 extraout_var_02; uint uVar5; uint uVar6; undefined8 *puVar7; uint local_28; uint local_24; uint local_20; if (((param_1 == 0) || (param_3 == (char *)0x0)) || (param_4 == (uint *)0x0)) { return 0x10; } uVar5 = 0; local_20 = 0; if (param_2 != 0) { puVar7 = (undefined8 *)(param_1 + 8); do { uVar6 = *(uint *)(puVar7 + 1); puVar1 = (uint *)*puVar7; if (*(int *)(puVar7 + -1) == 0) break; switch(*(int *)(puVar7 + -1)) { case 1: uVar4 = FUN_1400d24b0(&local_28); break; case 2: uVar4 = FUN_1400d2220((longlong)puVar1,(int *)&local_28); break; case 3: uVar2 = FUN_1400d2170(*puVar1,(int *)&local_28); uVar4 = CONCAT44(extraout_var,uVar2); break; case 4: uVar4 = FUN_1400d1fc0((ulonglong)uVar6,(int *)&local_28); break; case 5: uVar4 = FUN_1400d1e70(uVar6,(int *)&local_28); break; case 6: uVar5 = uVar5 + 2; goto LAB_1400d265f; case 7: uVar4 = FUN_1400d1bc0(puVar1,uVar6,(int *)&local_28); break; case 8: uVar4 = FUN_1400d19e0((byte *)puVar1,uVar6,(int *)&local_28); break; case 9: uVar4 = FUN_1400d17a0((byte *)puVar1,uVar6,(int *)&local_28); break; case 10: uVar4 = FUN_1400d1490((ushort *)puVar1,uVar6,(int *)&local_28); break; case 0xb: uVar4 = FUN_1400d3490((longlong)puVar1,&local_28); break; default: goto LAB_1400d2987; case 0xd: case 0xe: case 0xf: uVar4 = FUN_1400d0f10((longlong)puVar1,uVar6,(int *)&local_28); } if ((int)uVar4 != 0) { return uVar4; } uVar5 = uVar5 + local_28; LAB_1400d265f: puVar7 = puVar7 + 7; local_20 = local_20 + 1; } while (local_20 < param_2); } if (uVar5 < 0x80) { uVar6 = uVar5 + 2; } else if (uVar5 < 0x100) { uVar6 = uVar5 + 3; } else if (uVar5 < 0x10000) { uVar6 = uVar5 + 4; } else { if (0xffffff < uVar5) { LAB_1400d2987: return 0x10; } uVar6 = uVar5 + 5; } if (*param_4 < uVar6) { *param_4 = uVar6; return 6; } *param_3 = (param_5 != 0xd) + '0'; uVar6 = 1; uVar4 = 1; local_28 = 1; if (uVar5 < 0x80) { param_3[1] = (char)uVar5; local_28 = uVar6; } else { if (uVar5 < 0x100) { param_3[1] = -0x7f; local_28 = uVar6; } else { if (uVar5 < 0x10000) { param_3[1] = -0x7e; local_28 = uVar6; } else { if (0xffffff < uVar5) goto LAB_1400d2764; param_3[1] = -0x7d; local_28 = 2; param_3[2] = (char)(uVar5 >> 0x10); } local_28 = local_28 + 1; param_3[local_28] = (char)(uVar5 >> 8); } local_28 = local_28 + 1; param_3[local_28] = (char)uVar5; } local_28 = local_28 + 1; uVar4 = (ulonglong)local_28; LAB_1400d2764: *param_4 = *param_4 - (int)uVar4; uVar5 = 0; if (param_2 != 0) { puVar7 = (undefined8 *)(param_1 + 8); do { iVar3 = *(int *)(puVar7 + -1); uVar6 = *(uint *)(puVar7 + 1); puVar1 = (uint *)*puVar7; if (iVar3 == 0) break; switch(iVar3) { case 1: local_24 = *param_4; uVar4 = FUN_1400d49f0(*puVar1,(undefined2 *)(param_3 + uVar4),&local_24); break; case 2: local_24 = *param_4; uVar4 = FUN_1400d4750((longlong)puVar1,param_3 + uVar4,&local_24); break; case 3: local_24 = *param_4; iVar3 = FUN_1400d4630(*puVar1,param_3 + uVar4,&local_24); uVar4 = CONCAT44(extraout_var_00,iVar3); break; case 4: local_24 = *param_4; uVar4 = FUN_1400d44c0((char *)puVar1,uVar6,param_3 + uVar4,&local_24); break; case 5: local_24 = *param_4; uVar4 = FUN_1400d4390((undefined1 *)puVar1,uVar6,param_3 + uVar4,&local_24); break; case 6: param_3[uVar4] = '\x05'; param_3[local_28 + 1] = '\0'; local_28 = local_28 + 2; *param_4 = *param_4 - 2; goto LAB_1400d2959; case 7: local_24 = *param_4; uVar4 = FUN_1400d4130(puVar1,uVar6,param_3 + uVar4,&local_24); break; case 8: local_24 = *param_4; uVar4 = FUN_1400d4000((byte *)puVar1,uVar6,param_3 + uVar4,&local_24); break; case 9: local_24 = *param_4; uVar4 = FUN_1400d3ed0((byte *)puVar1,uVar6,param_3 + uVar4,&local_24); break; case 10: local_24 = *param_4; uVar4 = FUN_1400d3cd0((ushort *)puVar1,uVar6,param_3 + uVar4,&local_24); break; case 0xb: local_24 = *param_4; uVar4 = FUN_1400d3940(puVar1,param_3 + uVar4,&local_24); break; default: goto LAB_1400d2987; case 0xd: local_24 = *param_4; uVar4 = FUN_1400d2510((longlong)puVar1,uVar6,param_3 + uVar4,&local_24,iVar3); break; case 0xe: local_24 = *param_4; uVar2 = FUN_1400d3840((undefined8 *)puVar1,uVar6,param_3 + uVar4,&local_24); uVar4 = CONCAT44(extraout_var_01,uVar2); break; case 0xf: local_24 = *param_4; iVar3 = FUN_1400d3550((int *)puVar1,uVar6,param_3 + uVar4,&local_24); uVar4 = CONCAT44(extraout_var_02,iVar3); } if ((int)uVar4 != 0) { return uVar4; } local_28 = local_28 + local_24; *param_4 = *param_4 - local_24; LAB_1400d2959: uVar4 = (ulonglong)local_28; puVar7 = puVar7 + 7; uVar5 = uVar5 + 1; } while (uVar5 < param_2); } *param_4 = (uint)uVar4; return 0; }