int __cdecl sub_100404F0(int a1, size_t Count, char *Dest) { int result; // eax@1 char *v4; // ebx@2 unsigned int v5; // esi@2 int v6; // eax@8 int v7; // edx@8 int v8; // ecx@8 int v9; // ST04_4@8 char *v10; // ST08_4@8 unsigned int v11; // ST0C_4@8 size_t v12; // esi@9 char *v13; // eax@4 int v14; // eax@8 int v15; // eax@13 int v16; // edi@14 int Src; // [sp+10h] [bp-4B0h]@7 char Dst; // [sp+14h] [bp-4ACh]@7 char v19; // [sp+15h] [bp-4ABh]@7 __int16 v20; // [sp+4BDh] [bp-3h]@7 char v21; // [sp+4BFh] [bp-1h]@7 char v22; // [sp+1Ah] [bp-4A6h]@8 char v23; // [sp+18h] [bp-4A8h]@14 result = dword_100AB128; if ( dword_100AB128 ) { v4 = Dest; v5 = Count; if ( (unsigned int)dword_100AAB64 > 0xA ) { if ( (signed int)Count <= 15 ) return result; v13 = (char *)sub_10015170(); sub_10004BE0(v4, v5, v13, 84, 9006); v5 = strlen(v4) + 1; } if ( (signed int)v5 > 1100 ) v5 = 1100; Src = dword_1008934C; Dst = byte_10089350; memset(&v19, 0, 0x4A8u); v20 = 0; v21 = 0; if ( dword_100B66C8 ) { v14 = (dword_100AAD78 + 1940858520) ^ dword_100BB7E0[(dword_100AAD78 + 1940858520) ^ (dword_100AAD78 + 1940857420)] ^ (dword_100AAD78 - 1486054502); BYTE3(Src) = 69; ((int (__cdecl *)(char *, char *, unsigned int))v14)(&v22, v4, v5); v11 = v5; v10 = &Dst; v9 = dword_100B66C8; v8 = dword_100AAD78 + 380589220; v7 = (dword_100AAD78 + 380589220) ^ (dword_100AAD78 + 380589035); v6 = dword_100AAD78 - 1033049690; } else { if ( !dword_100AAF74 || !*(_BYTE *)(dword_100AAFA4 + dword_100AAF74) || *v4 == 74 ) { v16 = (dword_100AAD78 + 978067213) ^ dword_100BB7E0[(dword_100AAD78 + 978067213) ^ (dword_100AAD78 + 978066393)] ^ (dword_100AAD78 - 292576753); BYTE3(Src) = 80; ((int (__cdecl *)(char *, int *, signed int))v16)(&Dst, &dword_100AAD60, 4); ((int (__cdecl *)(char *, char *, unsigned int))v16)(&v23, v4, v5); v12 = v5 + 8; goto LABEL_15; } v15 = (dword_100AAD78 + 846030328) ^ dword_100BB7E0[(dword_100AAD78 + 846030328) ^ (dword_100AAD78 + 846029100)] ^ (dword_100AAD78 - 424748806); BYTE3(Src) = 69; ((int (__cdecl *)(char *, char *, unsigned int))v15)(&v22, v4, v5); v11 = v5; v10 = &Dst; v8 = dword_100AAD78 + 339877202; v7 = (dword_100AAD78 + 339877202) ^ (dword_100AAD78 + 339876382); v9 = dword_100AAF74 + dword_100AAFA4; v6 = dword_100AAD78 - 1065246640; } ((int (__cdecl *)(int, char *, unsigned int))(v8 ^ dword_100BB7E0[v7] ^ v6))(v9, v10, v11); v12 = v5 + 10; LABEL_15: if ( !dword_100AB15C ) dword_100AB15C = ((int (*)(void))((dword_100AAD78 + 1361977163) ^ dword_100BB7E0[(dword_100AAD78 + 1361977163) ^ (dword_100AAD78 + 1361976198)] ^ (dword_100AAD78 - 2048023991)))(); dword_100AB164 += v12; if ( (dword_100AB2E8 || !dword_100ADDC4) && byte_100ADD82 && word_100ADDC8 ) { if ( (signed int)v12 > 1196 ) v12 = 1196; memcpy(&Dst, &Src, v12); Src = -1; (*(int (__cdecl **)(char *, _DWORD, unsigned int, int *))(a1 + 400))( &byte_100ADD82, (unsigned __int16)word_100ADDC8, v12 + 4, &Src); result = dword_100AB124++ + 1; } else { (*(int (__cdecl **)(size_t, int *))(a1 + 388))(v12, &Src); result = dword_100AB124++ + 1; } } return result; }