rendered paste bodyint __cdecl sub_4053E0()
{
int v0; // eax@1
unsigned int v1; // ecx@1
unsigned int v2; // ebx@6
int v3; // ecx@8
unsigned int v4; // esi@10
unsigned int v5; // eax@13
int v6; // ecx@13
int v7; // esi@14
int v8; // edi@18
unsigned int v9; // edi@23
unsigned int v10; // esi@23
unsigned int v11; // esi@31
unsigned int v12; // esi@44
signed int v13; // eax@47
char v14; // al@50
int v15; // ecx@57
int i; // eax@59
int v17; // esi@64
int v18; // edi@67
int v19; // eax@70
unsigned int v20; // ecx@70
char *v21; // esi@70
char v22; // bl@73
int v23; // esi@73
bool v24; // ST28_4@80
char v26; // al@6
char *v27; // ST14_4@17
int v28; // eax@17
char *v29; // ST14_4@19
int v30; // eax@19
char v31; // zf@22
char v32; // ST24_1@30
char *v33; // ST14_4@30
int v34; // eax@30
char *v35; // ST14_4@39
int v36; // eax@39
char v37; // cf@43
char *v38; // ST14_4@46
int v39; // eax@46
DWORD v40; // eax@52
int v41; // eax@52
int v42; // eax@52
int v43; // eax@67
int s; // [sp+458h] [bp+0h]@1
unsigned int v45; // [sp+454h] [bp-4h]@1
int v46; // [sp+18h] [bp-440h]@1
char *v47; // [sp+28h] [bp-430h]@4
char v48; // [sp+0h] [bp-458h]@6
unsigned int v49; // [sp+Ch] [bp-44Ch]@13
unsigned int v50; // [sp+2Ch] [bp-42Ch]@13
int v51; // [sp+24h] [bp-434h]@14
unsigned int v52; // [sp+1Ch] [bp-43Ch]@14
int v53; // [sp+4h] [bp-454h]@19
int v54; // [sp+10h] [bp-448h]@20
CHAR Buffer; // [sp+334h] [bp-124h]@38
int v56; // [sp+330h] [bp-128h]@38
char v57; // [sp+23h] [bp-435h]@49
char v58; // [sp+234h] [bp-224h]@52
char v59; // [sp+134h] [bp-324h]@52
char v60; // [sp+434h] [bp-24h]@68
char v61; // [sp+444h] [bp-14h]@69
v45 = (unsigned int)& s ^ dword_95E574;
v0 = ((unsigned __int8)sub_402260() != 0) + 1;
v46 = v0;
v1 = 0;
do
{
byte_95E16C[v1] = 0;
v1 += 16;
}
while ( v1 < 0x140 );
if ( v0 & 2 )
v47 = *(char **)(sub_5A2AF0("locale") + 32);
else
v47 = "----";
v26 = sub_4F9680();
sub_405160((int)&v48, (int)v47, v26);
v2 = 0;
if ( (unsigned int)dword_95E2D8 < 0x40 )
{
if ( (unsigned int)dword_95E2D4 < 0x40 )
{
v3 = dword_95E2E0;
if ( !dword_95E2E0 )
v3 = sub_80E080(64);
v4 = 64;
if ( 0x40u % v3 )
v4 = v3 - 0x40u % v3 + 64;
sub_538F00(v4);
}
}
v5 = v49;
v6 = 64;
dword_95E2D8 = 64;
v50 = 64;
if ( v49 )
{
v7 = v49 - 1;
v51 = 4 * v49 - 4;
v52 = v49;
while ( 1 )
{
if ( v2 >= v6 )
{
v27 = (char *)((int (__thiscall *)(int (***)()))*(off_95E2D0 + 1))(&off_95E2D0);
v28 = ((int (__thiscall *)(int (***)()))*off_95E2D0)(&off_95E2D0);
sub_5651D0(-2062548864, v28, v27, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
v5 = v49;
}
v8 = dword_95E2DC + 4 * v2;
if ( v7 >= v5 )
{
v29 = (char *)(*(int (__thiscall **)(int *))(v53 + 4))(&v53);
v30 = (*(int (__thiscall **)(int *))v53)(&v53);
sub_5651D0(-2062548864, v30, v29, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v7);
}
if ( sub_568A60(*(char **)(v54 + v51), v50, 0, v8) )
{
++v2;
++v50;
}
v51 -= 4;
--v7;
v31 = v52-- == 1;
if ( v31 )
break;
v5 = v49;
v6 = dword_95E2D8;
}
}
v9 = v50;
v52 = v2;
v10 = 0;
do
{
if ( *(int *)((char *)&dword_95E164 + v10) == 3 )
{
if ( (unsigned __int8)sub_4047A0(*(char (**)[14])((char *)&off_95E160 + v10), v9) )
{
++v2;
byte_95E16C[v10] = 1;
++v9;
}
}
v10 += 16;
}
while ( v10 < 0x140 );
v50 = 0;
if ( v52 )
{
do
{
if ( v50 >= dword_95E2D8 )
{
v32 = v50;
v33 = (char *)((int (__thiscall *)(int (***)()))*(off_95E2D0 + 1))(&off_95E2D0);
v34 = ((int (__thiscall *)(int (***)()))*off_95E2D0)(&off_95E2D0);
sub_5651D0(-2062548864, v34, v33, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v32);
}
v51 = *(_DWORD *)(dword_95E2DC + 4 * v50);
v11 = 0;
do
{
if ( *(int *)((char *)&dword_95E164 + v11) == 3 )
{
if ( byte_95E16C[v11]
|| !sub_565490(v47, "zhCN", 0x7FFFFFFFu)
|| !sub_565490(v47, "enCN", 0x7FFFFFFFu)
|| !sub_565490(v47, "zhTW", 0x7FFFFFFFu)
|| !sub_565490(v47, "enTW", 0x7FFFFFFFu) )
{
sub_5656E0(&Buffer, *(char (**)[14])((char *)&off_95E160 + v11), 256);
*((_BYTE *)&v56 + sub_565790(&Buffer)) = 0;
if ( v2 >= dword_95E2D8 )
{
v35 = (char *)((int (__thiscall *)(_DWORD))*(off_95E2D0 + 1))(&off_95E2D0);
v36 = ((int (__thiscall *)(_DWORD))*off_95E2D0)(&off_95E2D0);
sub_5651D0(-2062548864, v36, v35, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
}
if ( sub_568B10(v51, &Buffer, v9, 0, dword_95E2DC + 4 * v2) )
{
++v2;
++v9;
}
}
}
v11 += 16;
}
while ( v11 < 0x140 );
v37 = v50++ + 1 < v52;
}
while ( v37 );
}
v12 = 0;
dword_C2B94C = v2;
v50 = 63;
dword_C2B950 = v2;
v51 = 0;
do
{
if ( v2 >= dword_95E2D8 )
{
v38 = (char *)((int (__thiscall *)(_DWORD))*(off_95E2D0 + 1))(&off_95E2D0);
v39 = ((int (__thiscall *)(_DWORD))*off_95E2D0)(&off_95E2D0);
sub_5651D0(-2062548864, v39, v38, 1u, 1, (int)"index (0x%08X), array size (0x%08X)", v2);
}
*(_DWORD *)(dword_95E2DC + 4 * v2) = 0;
v13 = *(int *)((char *)&dword_95E164 + v12);
if ( v13 == 3 )
{
++v2;
}
else
{
v57 = v13 == 2;
if ( v46 & *(int *)((char *)&dword_95E168 + v12) )
{
v14 = sub_4047A0(*(char (**)[14])((char *)&off_95E160 + v12), v50);
if ( !v14 )
{
if ( v57 == v14 )
{
v40 = sub_563A70();
sub_564350(v40, &Buffer, 0x100u);
sub_402170(0);
sub_5659D0(&v58, 256, "Failed to open archive %s: %s", (char)*(char (**)[14])((char *)&off_95E160 + v51));
sub_5656E0(&v59, "Missing or corrupted data", 2147483647);
v41 = sub_42E9C0(2);
sub_42EA40(v41, 0, &v58, &v59);
v42 = sub_563A70();
loc_571320(v42);
v12 = v51;
}
}
}
++v2;
--v50;
byte_95E16C[v12] = 1;
}
v12 += 16;
v51 = v12;
}
while ( v12 < 0x140 );
if ( v2 > dword_95E2D8 )
{
if ( v2 > dword_95E2D4 )
{
v15 = dword_95E2E0;
if ( !dword_95E2E0 )
{
v15 = v2;
if ( v2 >= 0x40 )
{
dword_95E2E0 = 64;
v15 = 64;
}
else
{
for ( i = v2 & (v2 - 1); i; i &= i - 1 )
v15 = i;
if ( (unsigned int)v15 < 1 )
v15 = 1;
}
}
v17 = v2;
if ( v2 % v15 )
v17 = v2 + v15 - v2 % v15;
sub_538F00(v17);
}
}
dword_95E2D8 = v2;
byte_C2B92D = sub_404920(13) != 0;
v43 = sub_7B8CE0();
v18 = v43;
if ( sub_7B94E0(v43, "Wow.ini") )
{
sub_7B8EE0(v18, "WoW Config", "Region", &dword_C2B8EC, 0);
if ( sub_7B8FA0(v18, "WoW Config", "Language", &v60, 16, 0) )
{
if ( sub_7B8FA0(v18, "WoW Config", "Country", &v61, 16, 0) )
{
sub_5659D0(byte_C2B970, 5, "%s%s", (char)&v60);
v19 = 0;
v21 = byte_C2B970;
v20 = 0;
do
{
if ( !*v21 )
break;
++v20;
v19 = *v21++ + (v19 << 8);
}
while ( v20 < 4 );
dword_EDD3E4 = v19;
v22 = sub_565490("enGB", byte_C2B970, 0x7FFFFFFFu) == 0;
v23 = 0;
while ( sub_565490(byte_C2B970, (&off_98C5E0)[4 * v23], 0x7FFFFFFFu)
&& (!v22 || sub_565490("enUS", (&off_98C5E0)[4 * v23], 0x7FFFFFFFu)) )
{
++v23;
if ( v23 >= 9 )
goto LABEL_84;
}
dword_DA3BA0 = v23;
v24 = v23 == 8;
sub_4C96F0(v24);
if ( v46 & 1 )
{
sub_5A2AF0("locale");
sub_5A2580(byte_C2B970, 1, 0, 0, 1);
v47 = byte_C2B970;
}
}
}
}
LABEL_84:
sub_7B7C30(v18);
sub_402440(v47);
return sub_404510();
}