int __fastcall sub_402988(int a1, _DWORD *a2) { unsigned int v4; // r0 int v5; // r6 unsigned int v6; // r7 unsigned int v7; // r10 unsigned int v8; // r2 int v9; // r8 int v10; // r11 int v11; // r3 char *v12; // r1 bool v14; // cc int v15; // r6 unsigned int v16; // r0 _BYTE *v17; // r0 int v18; // [sp+0h] [bp-4h] sub_405084(a1: 0, a2: sub_402AF4); v4 = a2[4]; if ( v4 >> 28 == 0 ) { v6 = a2[522]; v7 = a2[518]; v8 = a2[261]; v9 = a2[520]; v10 = a2[521]; v11 = a2[523]; if ( v6 > 0xFFFFFFFB || v6 + 4 <= v7 ) { if ( v9 != 1 ) { v15 = a1 + 80 * HIBYTE(v4); if ( *(_DWORD *)(v15 + 792) == 3 ) { v18 = v15 + 792; if ( sub_4052AC() == 0 ) { v16 = *((unsigned __int8 *)a2 + v10 + 20) | (*((unsigned __int8 *)a2 + v10 + 21) << 8) | ((*((unsigned __int8 *)a2 + v10 + 22) | (*((unsigned __int8 *)a2 + v10 + 23) << 8)) << 16); if ( v16 <= *(_DWORD *)(v15 + 840) ) { sub_405084(a1: 0, a2: aAmdTaGcpErrorI); v5 = 560; goto LABEL_7; } *(_DWORD *)(v15 + 840) = v16; if ( v9 != 2 ) { if ( v9 == 3 ) { v5 = sub_402B78(a1, a2); if ( v5 != 0 ) goto LABEL_7; } else if ( v9 != 4 ) { sub_405084(a1: 0, a2: off_402B68); v5 = 561; goto LABEL_7; } } v5 = 0; v17 = (char *)a2 + v6 + 1048; *v17 = 0; v17[3] = 0; v17[2] = 0; v17[1] = 0; sub_4011A4(a1: a2 + 1620); if ( sub_403678(a1: v18, a2: a2 + 1620, a3: v7) == 0 ) { v5 = 0; a2[1876] = v7; } goto LABEL_7; } sub_405084(a1: 0, a2: off_402B2C); v5 = 562; } else { sub_405084(a1: 0, a2: off_402B28[0]); v5 = 610; } LABEL_7: sub_405084(a1: 0, a2: off_402B74); return v5; } v14 = v11 + 4 > v8; if ( v11 + 4 <= v8 ) v14 = a2[524] + 4 > v8; if ( !v14 ) { v5 = sub_402D28(a1, a2); goto LABEL_7; } v12 = (char *)dword_402B6C; } else { v12 = off_402B70[0]; } sub_405084(a1: 0, a2: v12); v5 = 256; goto LABEL_7; } return 256; }