int __fastcall sub_401A90(_DWORD *a1) { _DWORD *v1; // r8 int v3; // r4 int *v4; // r7 int v5; // r6 unsigned __int8 *v6; // r9 int result; // r0 int v8; // r7 int *v9; // r11 int v10; // r0 int v11; // r10 bool v12; // zf int v13; // r3 int v14; // r6 int v15; // r7 _OWORD *v16; // r5 int v17; // r0 __int128 v18; // [sp+8h] [bp-14h] BYREF int v19; // [sp+18h] [bp-4h] v1 = (_DWORD *)off_401BD8; v19 = *(_DWORD *)off_401BD8; v3 = a1[4]; if ( (unsigned int)(v3 - 1) <= 0x3F && (v4 = (int *)off_401CE0, v5 = 257 * v3, *((_BYTE *)off_401CE0 + 257 * v3) != 0) ) { if ( sub_401338(a1: v3, a2: (int)(a1 + 5), a3: 0x1010u, a4: (int)(a1 + 5)) == nullptr ) goto LABEL_10; v6 = (unsigned __int8 *)v4 + v5 + 33; if ( a1[17] == (*v6 | (*((unsigned __int8 *)v4 + v5 + 34) << 8) | ((*((unsigned __int8 *)v4 + v5 + 35) | (*((unsigned __int8 *)v4 + v5 + 36) << 8)) << 16)) ) { if ( sub_401000(a1: (int *)off_401BDC, a2: a1 + 13, a3: 16) == 0 ) { v8 = a1[19]; v9 = (int *)off_401BE0; v10 = 0; while ( 1 ) { v11 = v10 + 16; if ( v10 == 128 ) break; v12 = sub_401000(a1: (char *)v9 + v10, a2: a1 + 20, a3: v8) == 0; v10 = v11; if ( v12 ) { v13 = a1[10]; v14 = a1[11]; v15 = a1[12]; a1[1038] = a1[9]; a1[1039] = v13; a1[1040] = v14; a1[1041] = v15; a1[1042] = dword_401BE4; a1[1037] = 20; sub_401124(a1: a1 + 1043, a2: 4056); v16 = a1 + 1033; if ( ((int (__fastcall *)(_OWORD *, int, __int128 *, int))loc_4012FC)(a1: v16, a2: 4096, a3: &v18, a4: v3) != 0 ) { result = 266; } else { *v16 = v18; v17 = ((*v6)++ | (v6[1] << 8) | ((v6[2] | (v6[3] << 8)) << 16)) + 1; v6[2] = BYTE2(v17); v6[3] = HIBYTE(v17); v6[1] = BYTE1(v17); result = 0; } goto LABEL_8; } } } result = 262; } else { result = 260; } } else { result = 259; } LABEL_8: while ( *v1 != v19 ) { ((void (__fastcall *)(int, int))loc_40202C)(a1: result, a2: *v1 - v19); LABEL_10: result = 261; } return result; }