__int64
__fastcall sub_140002E70(unsigned
__int64
a1, _QWORD *a2)
{
char
*v3;
__int64
n256;
__int64
v6;
unsigned
__int64
n0x100;
char
*v8;
unsigned
__int64
v9;
__int64
v10;
__m128i si128;
int
n256_1;
__int64
v13;
__m128 v14;
unsigned
int
n8;
__int64
n8_1;
unsigned
int
v17;
__m128i v18;
__m128i v19;
__m128i v20;
__m128i v21;
__m128i v22;
__m128i v23;
__m128i v24;
__m128i v25;
__m128i v26;
__int64
v27;
unsigned
__int64
v28;
_QWORD *v29;
__int64
v30;
int
v31;
char
v32;
__int64
v33;
__int64
result;
v3 = *(
char
**)(a1 + 8);
n256 = 256LL;
v6 = *(_QWORD *)a1;
n0x100 = (unsigned
__int64
)&v3[-*(_QWORD *)a1];
if
( n0x100 <= 0x100 )
{
if
( n0x100 >= 0x100 )
goto
LABEL_8;
if
( (unsigned
__int64
)(*(_QWORD *)(a1 + 16) - v6) < 0x100 )
{
sub_140008E60(a1);
goto
LABEL_8;
}
v9 = 256 - n0x100;
memset
(v3, 0, 256 - n0x100);
v8 = &v3[v9];
}
else
{
v8 = (
char
*)(v6 + 256);
}
*(_QWORD *)(a1 + 8) = v8;
LABEL_8:
v10 = *(_QWORD *)a1;
si128 = _mm_load_si128((
const
__m128i *)&xmmword_14000D850);
n256_1 = 0;
if
( *(_QWORD *)a1 > a1 || *(_QWORD *)a1 + 255LL < a1 )
{
v14 = (__m128)_mm_load_si128((
const
__m128i *)&xmmword_14000D860);
n8 = 8;
n8_1 = 8LL;
do
{
n8_1 += 16LL;
v17 = n8 + 4;
v18 = (__m128i)_mm_and_ps((__m128)_mm_add_epi32(_mm_shuffle_epi32(_mm_cvtsi32_si128(n8 - 8), 0), si128), v14);
v19 = (__m128i)_mm_and_ps((__m128)_mm_add_epi32(_mm_shuffle_epi32(_mm_cvtsi32_si128(n8 - 4), 0), si128), v14);
v20 = _mm_packus_epi16(v18, v18);
v21 = _mm_packus_epi16(v19, v19);
*(_DWORD *)(v10 + n8_1 - 24) = _mm_cvtsi128_si32(_mm_packus_epi16(v20, v20));
*(_DWORD *)(v10 + n8_1 - 20) = _mm_cvtsi128_si32(_mm_packus_epi16(v21, v21));
v22 = _mm_cvtsi32_si128(n8);
n8 += 16;
v23 = (__m128i)_mm_and_ps((__m128)_mm_add_epi32(_mm_shuffle_epi32(v22, 0), si128), v14);
v24 = _mm_packus_epi16(v23, v23);
v25 = (__m128i)_mm_and_ps((__m128)_mm_add_epi32(_mm_shuffle_epi32(_mm_cvtsi32_si128(v17), 0), si128), v14);
*(_DWORD *)(n8_1 + v10 - 16) = _mm_cvtsi128_si32(_mm_packus_epi16(v24, v24));
v26 = _mm_packus_epi16(v25, v25);
*(_DWORD *)(v10 + n8_1 - 12) = _mm_cvtsi128_si32(_mm_packus_epi16(v26, v26));
}
while
( (
int
)(n8 - 8) < 256 );
}
else
{
v13 = 0LL;
do
*(_BYTE *)(++v13 + *(_QWORD *)a1 - 1) = n256_1++;
while
( n256_1 < 256 );
}
*(_DWORD *)(a1 + 28) = 0;
v27 = 0LL;
v28 = 0LL;
do
{
v29 = a2;
if
( a2[3] > 0xFuLL )
v29 = (_QWORD *)*a2;
v30 = *(_QWORD *)a1;
v31 = (*(_DWORD *)(a1 + 28) + *(unsigned
__int8
*)(*(_QWORD *)a1 + v27) + *((unsigned
__int8
*)v29 + v28 % a2[2]))
% 256;
*(_DWORD *)(a1 + 28) = v31;
++v28;
v32 = *(_BYTE *)(v30 + v27);
v33 = v31;
result = *(unsigned
__int8
*)(v31 + v30);
*(_BYTE *)(v30 + v27++) = result;
*(_BYTE *)(v33 + v30) = v32;
--n256;
}
while
( n256 );
*(_QWORD *)(a1 + 24) = 0LL;
return
result;
}