int
sub_56DE0F78(unsigned
int
* a1,
signed
int
a2, byte* a3)
{
unsigned
int
*v3;
unsigned
int
v4;
signed
int
v5;
int
v6;
unsigned
int
v7;
int
v8;
int
v9;
unsigned
int
v10;
int
v11;
signed
int
result;
signed
int
v13;
unsigned
int
v14;
int
v15;
int
v16;
int
v17;
bool
v18;
int
v19;
unsigned
int
v20;
unsigned
int
v21;
int
v22;
int
v23;
unsigned
int
v24;
signed
int
v25;
v3 = a1;
v4 = *a1;
v5 = a2;
v6 = 0;
v20 = *a1;
if
( a2 <= 1 )
{
if
( a2 >= -1 )
{
result = 1;
}
else
{
v13 = -a2;
v25 = v13;
v14 = -1640531527 * (52 / v13 + 6);
v24 = v14;
if
( v14 )
{
while
( 1 )
{
v15 = v13 - 1;
v22 = (v14 >> 2) & 3;
if
( v13 - 1 > 0 )
{
do
{
v16 = (4 * v4 ^ (v3[v15 - 1] >> 5)) + ((v4 >> 3) ^ 16 * v3[v15 - 1]);
v17 = v3[v15 - 1] ^ *(
DWORD
*)(a3 + 4 * (v22 ^ v15 & 3));
int
index=--v15 + 1;
int
arg1=v3[index];
int
arg2=((v20 ^ v24) + v17) ^ v16;
v3[index] =arg1- arg2;
v4 = v3[v15 + 1];
v20 = v3[v15 + 1];
}
while
( v15 > 0 );
v13 = v25;
}
*v3 -= ((v4 ^ v24) + (v3[v25 - 1] ^ *(
DWORD
*)(a3 + 4 * (v22 ^ v15 & 3)))) ^ ((4 * v4 ^ (v3[v13 - 1] >> 5))
+ (16 * v3[v13 - 1] ^ (v4 >> 3)));
v4 = *v3;
v18 = v24 == -1640531527;
v14 = v24 + 1640531527;
v20 = *v3;
v24 += 1640531527;
if
( v18 )
break
;
v13 = v25;
}
}
result = 0;
}
}
else
{
v7 = a1[a2 - 1];
v8 = 52 / a2 + 6;
if
( v8 > 0 )
{
do
{
v19 = v8 - 1;
v9 = 0;
v23 = v6 - 1640531527;
v21 = ((unsigned
int
)(v6 - 1640531527) >> 2) & 3;
if
( v5 - 1 > 0 )
{
do
{
v10 = v3[v9 + 1];
v11 = v7 ^ *(
DWORD
*)(a3 + 4 * (v21 ^ v9++ & 3));
v3[v9 - 1] += ((v10 ^ v23) + v11) ^ ((4 * v10 ^ (v7 >> 5)) + ((v10 >> 3) ^ 16 * v7));
v7 = v3[v9 - 1];
}
while
( v9 < a2 - 1 );
}
v6 -= 1640531527;
v5 = a2;
v3[v5 - 1] += ((*v3 ^ v23) + (v7 ^ *(
DWORD
*)(a3 + 4 * (v21 ^ v9 & 3)))) ^ ((4 * *v3 ^ (v7 >> 5))
+ ((*v3 >> 3) ^ 16 * v7));
v8 = v19;
v7 = v3[a2 - 1];
}
while
( v19 > 0 );
}
result = 0;
}
return
result;
}