/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401e5d90 FUN_1401e5d90 * Pseudocode, not original source. */ uint FUN_1401e5d90(longlong param_1,uint param_2) { char *pcVar1; char *pcVar2; ushort uVar3; uint uVar4; longlong lVar5; char *pcVar6; uint uVar7; uint uVar8; char *pcVar9; char *pcVar10; int iVar11; uint uVar12; ulonglong uVar13; ulonglong uVar14; char cVar15; char cVar16; uint uVar17; uVar8 = *(uint *)(param_1 + 0x94); uVar7 = *(uint *)(param_1 + 0xa4); lVar5 = *(longlong *)(param_1 + 0x50); uVar13 = (ulonglong)(int)*(uint *)(param_1 + 0xa0); uVar14 = (ulonglong)param_2; pcVar2 = (char *)((ulonglong)uVar8 + lVar5); if (*(int *)(param_1 + 0x44) - 0x106U < uVar8) { uVar8 = (uVar8 - *(int *)(param_1 + 0x44)) + 0x106; } else { uVar8 = 0; } cVar15 = pcVar2[uVar13 - 1]; cVar16 = pcVar2[uVar13]; if (*(uint *)(param_1 + 0xb4) <= *(uint *)(param_1 + 0xa0)) { uVar7 = uVar7 >> 2; } uVar4 = *(uint *)(param_1 + 0x9c); uVar17 = *(uint *)(param_1 + 0xb8); if (uVar4 < *(uint *)(param_1 + 0xb8)) { uVar17 = uVar4; } do { iVar11 = (int)uVar13; pcVar6 = (char *)(lVar5 + uVar14); if ((((pcVar6[iVar11] == cVar16) && (pcVar6[(longlong)iVar11 + -1] == cVar15)) && (*pcVar6 == *pcVar2)) && (pcVar6[1] == pcVar2[1])) { pcVar6 = pcVar6 + 2; pcVar9 = pcVar2 + 2; while (((((pcVar10 = pcVar9 + 1, *pcVar10 == pcVar6[1] && (pcVar10 = pcVar9 + 2, *pcVar10 == pcVar6[2])) && ((pcVar10 = pcVar9 + 3, *pcVar10 == pcVar6[3] && ((pcVar10 = pcVar9 + 4, *pcVar10 == pcVar6[4] && (pcVar10 = pcVar9 + 5, *pcVar10 == pcVar6[5])))))) && (pcVar10 = pcVar9 + 6, *pcVar10 == pcVar6[6])) && (pcVar10 = pcVar9 + 7, *pcVar10 == pcVar6[7]))) { pcVar1 = pcVar6 + 8; pcVar6 = pcVar6 + 8; pcVar10 = pcVar9 + 8; if ((*pcVar10 != *pcVar1) || (pcVar9 = pcVar10, pcVar2 + 0x102 <= pcVar10)) break; } uVar12 = ((int)pcVar10 - (int)(pcVar2 + 0x102)) + 0x102; if (iVar11 < (int)uVar12) { *(int *)(param_1 + 0x98) = (int)uVar14; uVar13 = (ulonglong)uVar12; if ((int)uVar17 <= (int)uVar12) break; cVar15 = pcVar2[(longlong)(int)uVar12 + -1]; cVar16 = pcVar2[(int)uVar12]; } } uVar12 = (uint)uVar13; uVar3 = *(ushort *)(*(longlong *)(param_1 + 0x60) + (*(uint *)(param_1 + 0x4c) & uVar14) * 2); uVar14 = (ulonglong)uVar3; if (uVar3 <= uVar8) break; uVar7 = uVar7 - 1; lVar5 = *(longlong *)(param_1 + 0x50); } while (uVar7 != 0); if (uVar12 <= uVar4) { uVar4 = uVar12; } return uVar4; }