/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400cd670 FUN_1400cd670 * Pseudocode, not original source. */ undefined8 FUN_1400cd670(uint *param_1,uint *param_2,uint *param_3,uint param_4) { uint uVar1; uint uVar2; uint uVar3; undefined8 uVar4; ulonglong uVar5; longlong lVar6; uint *puVar7; uint uVar8; ulonglong uVar9; uint uVar10; int iVar11; uint *puVar12; uint *puVar13; uint uVar14; ulonglong uVar15; uint local_48 [4]; longlong local_38; if ((int)param_4 < 0x200) { uVar14 = *param_2; if ((int)*param_1 < (int)*param_2) { uVar14 = *param_1; } if ((int)uVar14 < 0x100) { uVar4 = FUN_1400cd7d0((int *)param_1,(int *)param_2,param_3,param_4); return uVar4; } } uVar4 = FUN_1400cf070(local_48,param_4); if ((int)uVar4 == 0) { uVar14 = *param_1; iVar11 = 0; lVar6 = 0; uVar2 = param_4; if (0 < (longlong)(int)uVar14) { do { puVar7 = *(uint **)(param_2 + 4); uVar9 = 0; uVar8 = 0; uVar3 = uVar2; if ((int)*param_2 < (int)uVar2) { uVar3 = *param_2; } uVar15 = (ulonglong)uVar3; uVar1 = *(uint *)(*(longlong *)(param_1 + 4) + lVar6 * 4); puVar13 = (uint *)(local_38 + (longlong)iVar11 * 4); puVar12 = puVar13; uVar10 = 0; if (0 < (int)uVar3) { do { uVar8 = *puVar7; puVar13 = puVar12 + 1; puVar7 = puVar7 + 1; uVar5 = (ulonglong)uVar8 * (ulonglong)uVar1 + (ulonglong)*puVar12 + (uVar9 & 0xffffffff) ; uVar9 = uVar5 >> 0x1c; uVar8 = (uint)uVar9; uVar15 = uVar15 - 1; *puVar12 = (uint)uVar5 & 0xfffffff; puVar12 = puVar13; uVar10 = uVar3; } while (uVar15 != 0); } if ((int)(uVar10 + iVar11) < (int)param_4) { *puVar13 = uVar8; } lVar6 = lVar6 + 1; iVar11 = iVar11 + 1; uVar2 = uVar2 - 1; } while (lVar6 < (int)uVar14); } local_48[0] = param_4; FUN_1400ccef0((int *)local_48); FUN_1400cef30((undefined8 *)local_48,(undefined8 *)param_3); FUN_1400c6dd0((int *)local_48); uVar4 = 0; } return uVar4; }