/*
* ImageDecodeMain at 0xffe723d9.
* Central formatted-image decode routine; decompiler-generated identifier
* artifacts are intentionally preserved for traceability.
*/
int __fastcall ImageDecodeMain(char *a1, int a2, char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, char *va)
{
char *v4; // ebx
int v5; // edi
char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; // esi
char *v7; // ecx
char *i_1; // edx
char n37; // al
char *v10; // esi
char *i_2; // edx
char *v12; // ecx
int m_2; // eax
char n97; // ah
char *k; // ecx
unsigned __int8 *v16; // edi
int v17; // ebx
int v18; // esi
int v19; // ecx
int v20; // eax
int v21; // eax
char *v22; // eax
char n105; // ah
unsigned int n10_1; // eax
char *v25; // ecx
unsigned int n10_3; // edx
char v27; // dl
unsigned int m; // eax
char *v29; // ecx
char *j; // eax
int v32; // [esp-1Ch] [ebp-6Ch]
int v33; // [esp-18h] [ebp-68h]
int v34; // [esp-14h] [ebp-64h]
int v35; // [esp-10h] [ebp-60h]
int v36; // [esp-Ch] [ebp-5Ch]
__int64 n0xA; // [esp-Ch] [ebp-5Ch]
int v38; // [esp-8h] [ebp-58h]
int v39; // [esp-4h] [ebp-54h]
int n10; // [esp-4h] [ebp-54h]
char v41; // [esp-4h] [ebp-54h]
char v42; // [esp+Eh] [ebp-42h]
char n32; // [esp+Fh] [ebp-41h]
char *v44; // [esp+10h] [ebp-40h]
char *v45; // [esp+14h] [ebp-3Ch]
char *i; // [esp+18h] [ebp-38h]
int v47; // [esp+1Ch] [ebp-34h]
int v49; // [esp+24h] [ebp-2Ch]
unsigned int n10_2; // [esp+24h] [ebp-2Ch]
unsigned int m_1; // [esp+28h] [ebp-28h]
char *v52; // [esp+28h] [ebp-28h]
unsigned int n2; // [esp+28h] [ebp-28h]
char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2; // [esp+2Ch] [ebp-24h] BYREF
char v55[32]; // [esp+30h] [ebp-20h] BYREF
char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3; // [esp+58h] [ebp+8h]
v4 = a1;
v44 = a1;
v5 = a2;
v47 = a2;
if ( !a1 )
return -1;
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x;
if ( !%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x )
return -1;
if ( a2 != 1 )
{
v7 = va - 4;
i_1 = va - 8;
v45 = va - 4;
for ( i = va - 8; ; i_1 = i )
{
n37 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
if ( !*%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 )
break;
if ( n37 != 37 )
{
*v4++ = n37;
++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
LABEL_8:
--v5;
v44 = v4;
v47 = v5;
goto LABEL_65;
}
v10 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 + 1;
if ( *v10 == 37 )
{
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1;
*v4++ = 37;
goto LABEL_8;
}
n32 = 32;
if ( *v10 == 48 )
{
n32 = 48;
++v10;
}
if ( *v10 == 42 )
{
i_2 = i_1 + 4;
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1;
v12 = v7 + 4;
i = i_2;
v45 = v12;
m_2 = *(_DWORD *)v12;
}
else
{
m_2 = ImageDecodeInit(v10, &%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2);
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2;
i_2 = i;
v12 = v45;
}
m_1 = m_2;
n97 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 115 || n97 == 97 )
{
i = i_2 + 4;
v45 = v12 + 4;
for ( j = (char *)*((_DWORD *)v12 + 1); *j; ++j )
{
v47 = --v5;
if ( !v5 )
goto LABEL_67;
*v4++ = *j;
v44 = v4;
}
goto LABEL_64;
}
if ( n97 == 83 )
{
i = i_2 + 4;
v45 = v12 + 4;
for ( k = (char *)*((_DWORD *)v12 + 1); *(_WORD *)k; k += 2 )
{
v47 = --v5;
if ( !v5 )
goto LABEL_69;
*v4++ = *k;
v44 = v4;
}
++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
}
else
{
if ( n97 == 99 )
{
i = i_2 + 4;
v45 = v12 + 4;
*v4++ = v12[4];
v44 = v4;
goto LABEL_64;
}
if ( (n97 & 0xDF) == 0x47 )
{
v52 = v4;
v45 = v12 + 4;
i = i_2 + 4;
v16 = (unsigned __int8 *)*((_DWORD *)v12 + 1);
v17 = DebugAssertPrint2(v16);
v18 = (unsigned __int16)DebugAssertPrint(v16 + 4);
v19 = (unsigned __int16)DebugAssertPrint(v16 + 6);
v39 = v16[15];
v38 = v16[14];
v36 = v16[13];
v35 = v16[12];
v34 = v16[11];
v33 = v16[10];
v32 = v16[9];
v20 = v16[8];
v5 = v47;
v21 = ImageDecodeDone(
v44,
v47,
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
v17,
v18,
v19,
v20,
v32,
v33,
v34,
v35,
v36,
v38,
v39);
%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3;
v4 = &v44[v21];
v49 = v21;
v44 += v21;
if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 == 71 )
{
ImageDecodeGetInfo(v52);
v21 = v49;
}
LABEL_29:
v5 -= v21;
v47 = v5;
goto LABEL_64;
}
if ( n97 == 114 )
{
v45 = v12 + 4;
i = i_2 + 4;
n2 = *((_DWORD *)v12 + 1);
v22 = ImageDecodePrintInfo(n2);
if ( v22 )
v21 = ImageDecodeDone(v4, v5, "%s", v22);
else
v21 = ImageDecodeDone(
v4,
v5,
"%s(%X)",
aStatusCode, // "Status Code"
n2);
v4 += v21;
v44 = v4;
goto LABEL_29;
}
if ( n97 == 108 )
{
++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
v42 = 1;
}
else
{
v42 = 0;
}
n105 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 100 || n105 == 105 )
{
n10 = 10;
LABEL_44:
n10_1 = n10;
n10_2 = n10;
if ( v42 )
{
v25 = v12 + 8;
v41 = 1;
i = i_2 + 8;
n0xA = *((_QWORD *)i_2 + 1);
n10_3 = n10_1;
}
else
{
v25 = v12 + 4;
i = i_2 + 4;
v41 = 0;
n0xA = *(int *)v25;
n10_3 = n10_2;
}
v45 = v25;
ZeroMem(v55, n10_3, n0xA, v41);
if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 88
|| *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 112 )
{
ImageDecodeGetInfo(v55);
}
v27 = v55[0];
for ( m = 0; v55[m]; ++m )
;
if ( m < m_1 )
{
while ( 1 )
{
++m;
v47 = --v5;
if ( !v5 )
goto LABEL_67;
*v4++ = n32;
v44 = v4;
if ( m >= m_1 )
{
v27 = v55[0];
break;
}
}
}
v29 = v55;
if ( v27 )
{
while ( 1 )
{
v47 = --v5;
if ( !v5 )
break;
*v4++ = *v29++;
v44 = v4;
if ( !*v29 )
goto LABEL_64;
}
LABEL_67:
*v4 = 0;
return v4 - a1;
}
LABEL_64:
++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1;
goto LABEL_65;
}
if ( (n105 & 0xDF) == 0x58 || n105 == 112 )
{
n10 = 16;
goto LABEL_44;
}
}
LABEL_65:
if ( v5 == 1 )
break;
v7 = v45;
}
}
LABEL_69:
*v4 = 0;
return v4 - a1;
}