TITLE	sha512-586.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.686
.XMM
IF @Version LT 800
XMMWORD STRUCT 16
DQ	2 dup (?)
XMMWORD	ENDS
ENDIF

.MODEL	FLAT
OPTION	DOTNAME
IF @Version LT 800
.text$	SEGMENT PAGE 'CODE'
ELSE
.text$	SEGMENT ALIGN(64) 'CODE'
ENDIF
;EXTERN	_OPENSSL_ia32cap_P:NEAR
ALIGN	16
_sha256_block_data_order	PROC PUBLIC
$L_sha256_block_data_order_begin::
	push	ebp
	push	ebx
	push	esi
	push	edi
	mov	esi,DWORD PTR 20[esp]
	mov	edi,DWORD PTR 24[esp]
	mov	eax,DWORD PTR 28[esp]
	mov	ebx,esp
	call	$L000pic_point
$L000pic_point:
	pop	ebp
	lea	ebp,DWORD PTR ($L001K256-$L000pic_point)[ebp]
	sub	esp,16
	and	esp,-64
	shl	eax,6
	add	eax,edi
	mov	DWORD PTR [esp],esi
	mov	DWORD PTR 4[esp],edi
	mov	DWORD PTR 8[esp],eax
	mov	DWORD PTR 12[esp],ebx
	lea	edx,DWORD PTR _OPENSSL_ia32cap_P
	mov	ecx,DWORD PTR [edx]
	mov	ebx,DWORD PTR 4[edx]
	test	ecx,1048576
	jnz	$L002loop
	mov	edx,DWORD PTR 8[edx]
	test	ecx,16777216
	jz	$L003no_xmm
	and	ecx,1073741824
	and	ebx,268435968
	test	edx,536870912
	jnz	$L004shaext
	or	ecx,ebx
	and	ecx,1342177280
	cmp	ecx,1342177280
	je	$L005AVX
	test	ebx,512
	jnz	$L006SSSE3
$L003no_xmm:
	sub	eax,edi
	cmp	eax,256
	jae	$L007unrolled
	jmp	$L002loop
ALIGN	16
$L002loop:
	mov	eax,DWORD PTR [edi]
	mov	ebx,DWORD PTR 4[edi]
	mov	ecx,DWORD PTR 8[edi]
	bswap	eax
	mov	edx,DWORD PTR 12[edi]
	bswap	ebx
	push	eax
	bswap	ecx
	push	ebx
	bswap	edx
	push	ecx
	push	edx
	mov	eax,DWORD PTR 16[edi]
	mov	ebx,DWORD PTR 20[edi]
	mov	ecx,DWORD PTR 24[edi]
	bswap	eax
	mov	edx,DWORD PTR 28[edi]
	bswap	ebx
	push	eax
	bswap	ecx
	push	ebx
	bswap	edx
	push	ecx
	push	edx
	mov	eax,DWORD PTR 32[edi]
	mov	ebx,DWORD PTR 36[edi]
	mov	ecx,DWORD PTR 40[edi]
	bswap	eax
	mov	edx,DWORD PTR 44[edi]
	bswap	ebx
	push	eax
	bswap	ecx
	push	ebx
	bswap	edx
	push	ecx
	push	edx
	mov	eax,DWORD PTR 48[edi]
	mov	ebx,DWORD PTR 52[edi]
	mov	ecx,DWORD PTR 56[edi]
	bswap	eax
	mov	edx,DWORD PTR 60[edi]
	bswap	ebx
	push	eax
	bswap	ecx
	push	ebx
	bswap	edx
	push	ecx
	push	edx
	add	edi,64
	lea	esp,DWORD PTR [esp-36]
	mov	DWORD PTR 104[esp],edi
	mov	eax,DWORD PTR [esi]
	mov	ebx,DWORD PTR 4[esi]
	mov	ecx,DWORD PTR 8[esi]
	mov	edi,DWORD PTR 12[esi]
	mov	DWORD PTR 8[esp],ebx
	xor	ebx,ecx
	mov	DWORD PTR 12[esp],ecx
	mov	DWORD PTR 16[esp],edi
	mov	DWORD PTR [esp],ebx
	mov	edx,DWORD PTR 16[esi]
	mov	ebx,DWORD PTR 20[esi]
	mov	ecx,DWORD PTR 24[esi]
	mov	edi,DWORD PTR 28[esi]
	mov	DWORD PTR 24[esp],ebx
	mov	DWORD PTR 28[esp],ecx
	mov	DWORD PTR 32[esp],edi
ALIGN	16
$L00800_15:
	mov	ecx,edx
	mov	esi,DWORD PTR 24[esp]
	ror	ecx,14
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,edx
	xor	esi,edi
	mov	ebx,DWORD PTR 96[esp]
	ror	ecx,5
	and	esi,edx
	mov	DWORD PTR 20[esp],edx
	xor	edx,ecx
	add	ebx,DWORD PTR 32[esp]
	xor	esi,edi
	ror	edx,6
	mov	ecx,eax
	add	ebx,esi
	ror	ecx,9
	add	ebx,edx
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,eax
	mov	DWORD PTR 4[esp],eax
	lea	esp,DWORD PTR [esp-4]
	ror	ecx,11
	mov	esi,DWORD PTR [ebp]
	xor	ecx,eax
	mov	edx,DWORD PTR 20[esp]
	xor	eax,edi
	ror	ecx,2
	add	ebx,esi
	mov	DWORD PTR [esp],eax
	add	edx,ebx
	and	eax,DWORD PTR 4[esp]
	add	ebx,ecx
	xor	eax,edi
	add	ebp,4
	add	eax,ebx
	cmp	esi,3248222580
	jne	$L00800_15
	mov	ecx,DWORD PTR 156[esp]
	jmp	$L00916_63
ALIGN	16
$L00916_63:
	mov	ebx,ecx
	mov	esi,DWORD PTR 104[esp]
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 160[esp]
	shr	edi,10
	add	ebx,DWORD PTR 124[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 24[esp]
	ror	ecx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,edx
	xor	esi,edi
	mov	DWORD PTR 96[esp],ebx
	ror	ecx,5
	and	esi,edx
	mov	DWORD PTR 20[esp],edx
	xor	edx,ecx
	add	ebx,DWORD PTR 32[esp]
	xor	esi,edi
	ror	edx,6
	mov	ecx,eax
	add	ebx,esi
	ror	ecx,9
	add	ebx,edx
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,eax
	mov	DWORD PTR 4[esp],eax
	lea	esp,DWORD PTR [esp-4]
	ror	ecx,11
	mov	esi,DWORD PTR [ebp]
	xor	ecx,eax
	mov	edx,DWORD PTR 20[esp]
	xor	eax,edi
	ror	ecx,2
	add	ebx,esi
	mov	DWORD PTR [esp],eax
	add	edx,ebx
	and	eax,DWORD PTR 4[esp]
	add	ebx,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 156[esp]
	add	ebp,4
	add	eax,ebx
	cmp	esi,3329325298
	jne	$L00916_63
	mov	esi,DWORD PTR 356[esp]
	mov	ebx,DWORD PTR 8[esp]
	mov	ecx,DWORD PTR 16[esp]
	add	eax,DWORD PTR [esi]
	add	ebx,DWORD PTR 4[esi]
	add	edi,DWORD PTR 8[esi]
	add	ecx,DWORD PTR 12[esi]
	mov	DWORD PTR [esi],eax
	mov	DWORD PTR 4[esi],ebx
	mov	DWORD PTR 8[esi],edi
	mov	DWORD PTR 12[esi],ecx
	mov	eax,DWORD PTR 24[esp]
	mov	ebx,DWORD PTR 28[esp]
	mov	ecx,DWORD PTR 32[esp]
	mov	edi,DWORD PTR 360[esp]
	add	edx,DWORD PTR 16[esi]
	add	eax,DWORD PTR 20[esi]
	add	ebx,DWORD PTR 24[esi]
	add	ecx,DWORD PTR 28[esi]
	mov	DWORD PTR 16[esi],edx
	mov	DWORD PTR 20[esi],eax
	mov	DWORD PTR 24[esi],ebx
	mov	DWORD PTR 28[esi],ecx
	lea	esp,DWORD PTR 356[esp]
	sub	ebp,256
	cmp	edi,DWORD PTR 8[esp]
	jb	$L002loop
	mov	esp,DWORD PTR 12[esp]
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
ALIGN	64
$L001K256:
DD	1116352408,1899447441,3049323471,3921009573
DD	961987163,1508970993,2453635748,2870763221
DD	3624381080,310598401,607225278,1426881987
DD	1925078388,2162078206,2614888103,3248222580
DD	3835390401,4022224774,264347078,604807628
DD	770255983,1249150122,1555081692,1996064986
DD	2554220882,2821834349,2952996808,3210313671
DD	3336571891,3584528711,113926993,338241895
DD	666307205,773529912,1294757372,1396182291
DD	1695183700,1986661051,2177026350,2456956037
DD	2730485921,2820302411,3259730800,3345764771
DD	3516065817,3600352804,4094571909,275423344
DD	430227734,506948616,659060556,883997877
DD	958139571,1322822218,1537002063,1747873779
DD	1955562222,2024104815,2227730452,2361852424
DD	2428436474,2756734187,3204031479,3329325298
DD	66051,67438087,134810123,202182159
DB	83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
DB	110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
DB	62,0
ALIGN	16
$L007unrolled:
	lea	esp,DWORD PTR [esp-96]
	mov	eax,DWORD PTR [esi]
	mov	ebp,DWORD PTR 4[esi]
	mov	ecx,DWORD PTR 8[esi]
	mov	ebx,DWORD PTR 12[esi]
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,ecx
	mov	DWORD PTR 8[esp],ecx
	mov	DWORD PTR 12[esp],ebx
	mov	edx,DWORD PTR 16[esi]
	mov	ebx,DWORD PTR 20[esi]
	mov	ecx,DWORD PTR 24[esi]
	mov	esi,DWORD PTR 28[esi]
	mov	DWORD PTR 20[esp],ebx
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esp],esi
	jmp	$L010grand_loop
ALIGN	16
$L010grand_loop:
	mov	ebx,DWORD PTR [edi]
	mov	ecx,DWORD PTR 4[edi]
	bswap	ebx
	mov	esi,DWORD PTR 8[edi]
	bswap	ecx
	mov	DWORD PTR 32[esp],ebx
	bswap	esi
	mov	DWORD PTR 36[esp],ecx
	mov	DWORD PTR 40[esp],esi
	mov	ebx,DWORD PTR 12[edi]
	mov	ecx,DWORD PTR 16[edi]
	bswap	ebx
	mov	esi,DWORD PTR 20[edi]
	bswap	ecx
	mov	DWORD PTR 44[esp],ebx
	bswap	esi
	mov	DWORD PTR 48[esp],ecx
	mov	DWORD PTR 52[esp],esi
	mov	ebx,DWORD PTR 24[edi]
	mov	ecx,DWORD PTR 28[edi]
	bswap	ebx
	mov	esi,DWORD PTR 32[edi]
	bswap	ecx
	mov	DWORD PTR 56[esp],ebx
	bswap	esi
	mov	DWORD PTR 60[esp],ecx
	mov	DWORD PTR 64[esp],esi
	mov	ebx,DWORD PTR 36[edi]
	mov	ecx,DWORD PTR 40[edi]
	bswap	ebx
	mov	esi,DWORD PTR 44[edi]
	bswap	ecx
	mov	DWORD PTR 68[esp],ebx
	bswap	esi
	mov	DWORD PTR 72[esp],ecx
	mov	DWORD PTR 76[esp],esi
	mov	ebx,DWORD PTR 48[edi]
	mov	ecx,DWORD PTR 52[edi]
	bswap	ebx
	mov	esi,DWORD PTR 56[edi]
	bswap	ecx
	mov	DWORD PTR 80[esp],ebx
	bswap	esi
	mov	DWORD PTR 84[esp],ecx
	mov	DWORD PTR 88[esp],esi
	mov	ebx,DWORD PTR 60[edi]
	add	edi,64
	bswap	ebx
	mov	DWORD PTR 100[esp],edi
	mov	DWORD PTR 92[esp],ebx
	mov	ecx,edx
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 32[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1116352408[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 36[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1899447441[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 40[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3049323471[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 44[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3921009573[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 48[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 961987163[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 52[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1508970993[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 56[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2453635748[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 60[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2870763221[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 64[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3624381080[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 68[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 310598401[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 72[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 607225278[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 76[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1426881987[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 80[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1925078388[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 84[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2162078206[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	ecx,edx
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	ebx,DWORD PTR 88[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2614888103[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	esi,edx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	ebx,DWORD PTR 92[esp]
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3248222580[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 36[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 88[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 32[esp]
	shr	edi,10
	add	ebx,DWORD PTR 68[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 32[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3835390401[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 40[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 92[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 36[esp]
	shr	edi,10
	add	ebx,DWORD PTR 72[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 36[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 4022224774[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 44[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 32[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 40[esp]
	shr	edi,10
	add	ebx,DWORD PTR 76[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 40[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 264347078[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 48[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 36[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 44[esp]
	shr	edi,10
	add	ebx,DWORD PTR 80[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 44[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 604807628[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 52[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 40[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 48[esp]
	shr	edi,10
	add	ebx,DWORD PTR 84[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 48[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 770255983[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 56[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 44[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 52[esp]
	shr	edi,10
	add	ebx,DWORD PTR 88[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 52[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1249150122[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 60[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 48[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 56[esp]
	shr	edi,10
	add	ebx,DWORD PTR 92[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	DWORD PTR 56[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1555081692[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 64[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 52[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 60[esp]
	shr	edi,10
	add	ebx,DWORD PTR 32[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	DWORD PTR 60[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1996064986[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 68[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 56[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 64[esp]
	shr	edi,10
	add	ebx,DWORD PTR 36[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 64[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2554220882[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 72[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 60[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 68[esp]
	shr	edi,10
	add	ebx,DWORD PTR 40[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 68[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2821834349[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 76[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 64[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 72[esp]
	shr	edi,10
	add	ebx,DWORD PTR 44[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 72[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2952996808[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 80[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 68[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 76[esp]
	shr	edi,10
	add	ebx,DWORD PTR 48[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 76[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3210313671[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 84[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 72[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 80[esp]
	shr	edi,10
	add	ebx,DWORD PTR 52[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 80[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3336571891[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 88[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 76[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 84[esp]
	shr	edi,10
	add	ebx,DWORD PTR 56[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 84[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3584528711[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 92[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 80[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 88[esp]
	shr	edi,10
	add	ebx,DWORD PTR 60[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	DWORD PTR 88[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 113926993[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 32[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 84[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 92[esp]
	shr	edi,10
	add	ebx,DWORD PTR 64[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	DWORD PTR 92[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 338241895[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 36[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 88[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 32[esp]
	shr	edi,10
	add	ebx,DWORD PTR 68[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 32[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 666307205[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 40[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 92[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 36[esp]
	shr	edi,10
	add	ebx,DWORD PTR 72[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 36[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 773529912[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 44[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 32[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 40[esp]
	shr	edi,10
	add	ebx,DWORD PTR 76[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 40[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1294757372[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 48[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 36[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 44[esp]
	shr	edi,10
	add	ebx,DWORD PTR 80[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 44[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1396182291[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 52[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 40[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 48[esp]
	shr	edi,10
	add	ebx,DWORD PTR 84[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 48[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1695183700[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 56[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 44[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 52[esp]
	shr	edi,10
	add	ebx,DWORD PTR 88[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 52[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1986661051[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 60[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 48[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 56[esp]
	shr	edi,10
	add	ebx,DWORD PTR 92[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	DWORD PTR 56[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2177026350[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 64[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 52[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 60[esp]
	shr	edi,10
	add	ebx,DWORD PTR 32[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	DWORD PTR 60[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2456956037[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 68[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 56[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 64[esp]
	shr	edi,10
	add	ebx,DWORD PTR 36[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 64[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2730485921[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 72[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 60[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 68[esp]
	shr	edi,10
	add	ebx,DWORD PTR 40[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 68[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2820302411[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 76[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 64[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 72[esp]
	shr	edi,10
	add	ebx,DWORD PTR 44[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 72[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3259730800[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 80[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 68[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 76[esp]
	shr	edi,10
	add	ebx,DWORD PTR 48[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 76[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3345764771[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 84[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 72[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 80[esp]
	shr	edi,10
	add	ebx,DWORD PTR 52[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 80[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3516065817[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 88[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 76[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 84[esp]
	shr	edi,10
	add	ebx,DWORD PTR 56[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 84[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3600352804[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 92[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 80[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 88[esp]
	shr	edi,10
	add	ebx,DWORD PTR 60[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	DWORD PTR 88[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 4094571909[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 32[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 84[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 92[esp]
	shr	edi,10
	add	ebx,DWORD PTR 64[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	DWORD PTR 92[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 275423344[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 36[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 88[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 32[esp]
	shr	edi,10
	add	ebx,DWORD PTR 68[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 32[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 430227734[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 40[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 92[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 36[esp]
	shr	edi,10
	add	ebx,DWORD PTR 72[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 36[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 506948616[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 44[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 32[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 40[esp]
	shr	edi,10
	add	ebx,DWORD PTR 76[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 40[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 659060556[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 48[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 36[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 44[esp]
	shr	edi,10
	add	ebx,DWORD PTR 80[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 44[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 883997877[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 52[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 40[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 48[esp]
	shr	edi,10
	add	ebx,DWORD PTR 84[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 48[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 958139571[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 56[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 44[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 52[esp]
	shr	edi,10
	add	ebx,DWORD PTR 88[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 52[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1322822218[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 60[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 48[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 56[esp]
	shr	edi,10
	add	ebx,DWORD PTR 92[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	mov	DWORD PTR 56[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1537002063[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 64[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 52[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 60[esp]
	shr	edi,10
	add	ebx,DWORD PTR 32[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	mov	DWORD PTR 60[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 1747873779[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 68[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 56[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 64[esp]
	shr	edi,10
	add	ebx,DWORD PTR 36[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 20[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	DWORD PTR 64[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 28[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,eax
	mov	DWORD PTR [esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 1955562222[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 72[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 12[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 60[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 68[esp]
	shr	edi,10
	add	ebx,DWORD PTR 40[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 16[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 20[esp]
	xor	edx,esi
	mov	DWORD PTR 68[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 12[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 24[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR [esp]
	xor	esi,ebp
	mov	DWORD PTR 28[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2024104815[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 76[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,esi
	mov	esi,DWORD PTR 64[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 72[esp]
	shr	edi,10
	add	ebx,DWORD PTR 44[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 12[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	DWORD PTR 72[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 20[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,eax
	mov	DWORD PTR 24[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2227730452[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 80[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 4[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 68[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 76[esp]
	shr	edi,10
	add	ebx,DWORD PTR 48[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 8[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 12[esp]
	xor	edx,esi
	mov	DWORD PTR 76[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 4[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 16[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 24[esp]
	xor	esi,ebp
	mov	DWORD PTR 20[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2361852424[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 84[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,esi
	mov	esi,DWORD PTR 72[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 80[esp]
	shr	edi,10
	add	ebx,DWORD PTR 52[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 4[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	DWORD PTR 80[esp],ebx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 12[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,eax
	mov	DWORD PTR 16[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 2428436474[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 88[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 28[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 76[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 84[esp]
	shr	edi,10
	add	ebx,DWORD PTR 56[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR [esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 4[esp]
	xor	edx,esi
	mov	DWORD PTR 84[esp],ebx
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 28[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR 8[esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 16[esp]
	xor	esi,ebp
	mov	DWORD PTR 12[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 2756734187[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	mov	ecx,DWORD PTR 92[esp]
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,esi
	mov	esi,DWORD PTR 80[esp]
	mov	ebx,ecx
	ror	ecx,11
	mov	edi,esi
	ror	esi,2
	xor	ecx,ebx
	shr	ebx,3
	ror	ecx,7
	xor	esi,edi
	xor	ebx,ecx
	ror	esi,17
	add	ebx,DWORD PTR 88[esp]
	shr	edi,10
	add	ebx,DWORD PTR 60[esp]
	mov	ecx,edx
	xor	edi,esi
	mov	esi,DWORD PTR 28[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR [esp]
	xor	edx,ecx
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	add	ebx,DWORD PTR 4[esp]
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	ebx,edi
	ror	ecx,9
	mov	esi,eax
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,eax
	mov	DWORD PTR 8[esp],eax
	xor	eax,edi
	ror	ecx,11
	and	ebp,eax
	lea	edx,DWORD PTR 3204031479[edx*1+ebx]
	xor	ecx,esi
	xor	ebp,edi
	mov	esi,DWORD PTR 32[esp]
	ror	ecx,2
	add	ebp,edx
	add	edx,DWORD PTR 20[esp]
	add	ebp,ecx
	mov	ecx,DWORD PTR 84[esp]
	mov	ebx,esi
	ror	esi,11
	mov	edi,ecx
	ror	ecx,2
	xor	esi,ebx
	shr	ebx,3
	ror	esi,7
	xor	ecx,edi
	xor	ebx,esi
	ror	ecx,17
	add	ebx,DWORD PTR 92[esp]
	shr	edi,10
	add	ebx,DWORD PTR 64[esp]
	mov	esi,edx
	xor	edi,ecx
	mov	ecx,DWORD PTR 24[esp]
	ror	edx,14
	add	ebx,edi
	mov	edi,DWORD PTR 28[esp]
	xor	edx,esi
	xor	ecx,edi
	ror	edx,5
	and	ecx,esi
	mov	DWORD PTR 20[esp],esi
	xor	edx,esi
	add	ebx,DWORD PTR [esp]
	xor	edi,ecx
	ror	edx,6
	mov	esi,ebp
	add	ebx,edi
	ror	esi,9
	mov	ecx,ebp
	mov	edi,DWORD PTR 8[esp]
	xor	esi,ebp
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	ror	esi,11
	and	eax,ebp
	lea	edx,DWORD PTR 3329325298[edx*1+ebx]
	xor	esi,ecx
	xor	eax,edi
	ror	esi,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,esi
	mov	esi,DWORD PTR 96[esp]
	xor	ebp,edi
	mov	ecx,DWORD PTR 12[esp]
	add	eax,DWORD PTR [esi]
	add	ebp,DWORD PTR 4[esi]
	add	edi,DWORD PTR 8[esi]
	add	ecx,DWORD PTR 12[esi]
	mov	DWORD PTR [esi],eax
	mov	DWORD PTR 4[esi],ebp
	mov	DWORD PTR 8[esi],edi
	mov	DWORD PTR 12[esi],ecx
	mov	DWORD PTR 4[esp],ebp
	xor	ebp,edi
	mov	DWORD PTR 8[esp],edi
	mov	DWORD PTR 12[esp],ecx
	mov	edi,DWORD PTR 20[esp]
	mov	ebx,DWORD PTR 24[esp]
	mov	ecx,DWORD PTR 28[esp]
	add	edx,DWORD PTR 16[esi]
	add	edi,DWORD PTR 20[esi]
	add	ebx,DWORD PTR 24[esi]
	add	ecx,DWORD PTR 28[esi]
	mov	DWORD PTR 16[esi],edx
	mov	DWORD PTR 20[esi],edi
	mov	DWORD PTR 24[esi],ebx
	mov	DWORD PTR 28[esi],ecx
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 100[esp]
	mov	DWORD PTR 24[esp],ebx
	mov	DWORD PTR 28[esp],ecx
	cmp	edi,DWORD PTR 104[esp]
	jb	$L010grand_loop
	mov	esp,DWORD PTR 108[esp]
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
ALIGN	32
$L004shaext:
	sub	esp,32
	movdqu	xmm1,XMMWORD PTR [esi]
	lea	ebp,DWORD PTR 128[ebp]
	movdqu	xmm2,XMMWORD PTR 16[esi]
	movdqa	xmm7,XMMWORD PTR 128[ebp]
	pshufd	xmm0,xmm1,27
	pshufd	xmm1,xmm1,177
	pshufd	xmm2,xmm2,27
DB	102,15,58,15,202,8
	punpcklqdq	xmm2,xmm0
	jmp	$L011loop_shaext
ALIGN	16
$L011loop_shaext:
	movdqu	xmm3,XMMWORD PTR [edi]
	movdqu	xmm4,XMMWORD PTR 16[edi]
	movdqu	xmm5,XMMWORD PTR 32[edi]
DB	102,15,56,0,223
	movdqu	xmm6,XMMWORD PTR 48[edi]
	movdqa	XMMWORD PTR 16[esp],xmm2
	movdqa	xmm0,XMMWORD PTR [ebp-128]
	paddd	xmm0,xmm3
DB	102,15,56,0,231
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	nop
	movdqa	XMMWORD PTR [esp],xmm1
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-112]
	paddd	xmm0,xmm4
DB	102,15,56,0,239
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	lea	edi,DWORD PTR 64[edi]
DB	15,56,204,220
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-96]
	paddd	xmm0,xmm5
DB	102,15,56,0,247
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm6
DB	102,15,58,15,253,4
	nop
	paddd	xmm3,xmm7
DB	15,56,204,229
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-80]
	paddd	xmm0,xmm6
DB	15,56,205,222
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm3
DB	102,15,58,15,254,4
	nop
	paddd	xmm4,xmm7
DB	15,56,204,238
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-64]
	paddd	xmm0,xmm3
DB	15,56,205,227
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm4
DB	102,15,58,15,251,4
	nop
	paddd	xmm5,xmm7
DB	15,56,204,243
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-48]
	paddd	xmm0,xmm4
DB	15,56,205,236
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm5
DB	102,15,58,15,252,4
	nop
	paddd	xmm6,xmm7
DB	15,56,204,220
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-32]
	paddd	xmm0,xmm5
DB	15,56,205,245
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm6
DB	102,15,58,15,253,4
	nop
	paddd	xmm3,xmm7
DB	15,56,204,229
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp-16]
	paddd	xmm0,xmm6
DB	15,56,205,222
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm3
DB	102,15,58,15,254,4
	nop
	paddd	xmm4,xmm7
DB	15,56,204,238
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR [ebp]
	paddd	xmm0,xmm3
DB	15,56,205,227
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm4
DB	102,15,58,15,251,4
	nop
	paddd	xmm5,xmm7
DB	15,56,204,243
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 16[ebp]
	paddd	xmm0,xmm4
DB	15,56,205,236
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm5
DB	102,15,58,15,252,4
	nop
	paddd	xmm6,xmm7
DB	15,56,204,220
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 32[ebp]
	paddd	xmm0,xmm5
DB	15,56,205,245
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm6
DB	102,15,58,15,253,4
	nop
	paddd	xmm3,xmm7
DB	15,56,204,229
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 48[ebp]
	paddd	xmm0,xmm6
DB	15,56,205,222
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm3
DB	102,15,58,15,254,4
	nop
	paddd	xmm4,xmm7
DB	15,56,204,238
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 64[ebp]
	paddd	xmm0,xmm3
DB	15,56,205,227
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm4
DB	102,15,58,15,251,4
	nop
	paddd	xmm5,xmm7
DB	15,56,204,243
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 80[ebp]
	paddd	xmm0,xmm4
DB	15,56,205,236
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	movdqa	xmm7,xmm5
DB	102,15,58,15,252,4
DB	15,56,203,202
	paddd	xmm6,xmm7
	movdqa	xmm0,XMMWORD PTR 96[ebp]
	paddd	xmm0,xmm5
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
DB	15,56,205,245
	movdqa	xmm7,XMMWORD PTR 128[ebp]
DB	15,56,203,202
	movdqa	xmm0,XMMWORD PTR 112[ebp]
	paddd	xmm0,xmm6
	nop
DB	15,56,203,209
	pshufd	xmm0,xmm0,14
	cmp	eax,edi
	nop
DB	15,56,203,202
	paddd	xmm2,XMMWORD PTR 16[esp]
	paddd	xmm1,XMMWORD PTR [esp]
	jnz	$L011loop_shaext
	pshufd	xmm2,xmm2,177
	pshufd	xmm7,xmm1,27
	pshufd	xmm1,xmm1,177
	punpckhqdq	xmm1,xmm2
DB	102,15,58,15,215,8
	mov	esp,DWORD PTR 44[esp]
	movdqu	XMMWORD PTR [esi],xmm1
	movdqu	XMMWORD PTR 16[esi],xmm2
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
ALIGN	32
$L006SSSE3:
	lea	esp,DWORD PTR [esp-96]
	mov	eax,DWORD PTR [esi]
	mov	ebx,DWORD PTR 4[esi]
	mov	ecx,DWORD PTR 8[esi]
	mov	edi,DWORD PTR 12[esi]
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,ecx
	mov	DWORD PTR 8[esp],ecx
	mov	DWORD PTR 12[esp],edi
	mov	edx,DWORD PTR 16[esi]
	mov	edi,DWORD PTR 20[esi]
	mov	ecx,DWORD PTR 24[esi]
	mov	esi,DWORD PTR 28[esi]
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 100[esp]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esp],esi
	movdqa	xmm7,XMMWORD PTR 256[ebp]
	jmp	$L012grand_ssse3
ALIGN	16
$L012grand_ssse3:
	movdqu	xmm0,XMMWORD PTR [edi]
	movdqu	xmm1,XMMWORD PTR 16[edi]
	movdqu	xmm2,XMMWORD PTR 32[edi]
	movdqu	xmm3,XMMWORD PTR 48[edi]
	add	edi,64
DB	102,15,56,0,199
	mov	DWORD PTR 100[esp],edi
DB	102,15,56,0,207
	movdqa	xmm4,XMMWORD PTR [ebp]
DB	102,15,56,0,215
	movdqa	xmm5,XMMWORD PTR 16[ebp]
	paddd	xmm4,xmm0
DB	102,15,56,0,223
	movdqa	xmm6,XMMWORD PTR 32[ebp]
	paddd	xmm5,xmm1
	movdqa	xmm7,XMMWORD PTR 48[ebp]
	movdqa	XMMWORD PTR 32[esp],xmm4
	paddd	xmm6,xmm2
	movdqa	XMMWORD PTR 48[esp],xmm5
	paddd	xmm7,xmm3
	movdqa	XMMWORD PTR 64[esp],xmm6
	movdqa	XMMWORD PTR 80[esp],xmm7
	jmp	$L013ssse3_00_47
ALIGN	16
$L013ssse3_00_47:
	add	ebp,64
	mov	ecx,edx
	movdqa	xmm4,xmm1
	ror	edx,14
	mov	esi,DWORD PTR 20[esp]
	movdqa	xmm7,xmm3
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
DB	102,15,58,15,224,4
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
DB	102,15,58,15,250,4
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	movdqa	xmm5,xmm4
	ror	edx,6
	mov	ecx,eax
	movdqa	xmm6,xmm4
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	psrld	xmm4,3
	mov	esi,eax
	ror	ecx,9
	paddd	xmm0,xmm7
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	psrld	xmm6,7
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	ror	ecx,11
	and	ebx,eax
	pshufd	xmm7,xmm3,250
	xor	ecx,esi
	add	edx,DWORD PTR 32[esp]
	pslld	xmm5,14
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm4,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	psrld	xmm6,11
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm4,xmm5
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	pslld	xmm5,11
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	ror	edx,5
	pxor	xmm4,xmm6
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	movdqa	xmm6,xmm7
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	pxor	xmm4,xmm5
	mov	ecx,ebx
	add	edx,edi
	psrld	xmm7,10
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm0,xmm4
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	psrlq	xmm6,17
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	ror	ecx,11
	pxor	xmm7,xmm6
	and	eax,ebx
	xor	ecx,esi
	psrlq	xmm6,2
	add	edx,DWORD PTR 36[esp]
	xor	eax,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	pshufd	xmm7,xmm7,128
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	psrldq	xmm7,8
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	paddd	xmm0,xmm7
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 24[esp],eax
	pshufd	xmm7,xmm0,80
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	movdqa	xmm6,xmm7
	ror	ecx,11
	psrld	xmm7,10
	and	ebx,eax
	psrlq	xmm6,17
	xor	ecx,esi
	add	edx,DWORD PTR 40[esp]
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	psrlq	xmm6,2
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm7,xmm6
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	pshufd	xmm7,xmm7,8
	xor	esi,edi
	ror	edx,5
	movdqa	xmm6,XMMWORD PTR [ebp]
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	pslldq	xmm7,8
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm0,xmm7
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	paddd	xmm6,xmm0
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 44[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	movdqa	XMMWORD PTR 32[esp],xmm6
	mov	ecx,edx
	movdqa	xmm4,xmm2
	ror	edx,14
	mov	esi,DWORD PTR 4[esp]
	movdqa	xmm7,xmm0
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
DB	102,15,58,15,225,4
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
DB	102,15,58,15,251,4
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	movdqa	xmm5,xmm4
	ror	edx,6
	mov	ecx,eax
	movdqa	xmm6,xmm4
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	psrld	xmm4,3
	mov	esi,eax
	ror	ecx,9
	paddd	xmm1,xmm7
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	psrld	xmm6,7
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	ror	ecx,11
	and	ebx,eax
	pshufd	xmm7,xmm0,250
	xor	ecx,esi
	add	edx,DWORD PTR 48[esp]
	pslld	xmm5,14
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm4,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	psrld	xmm6,11
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm4,xmm5
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	pslld	xmm5,11
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	ror	edx,5
	pxor	xmm4,xmm6
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	movdqa	xmm6,xmm7
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	pxor	xmm4,xmm5
	mov	ecx,ebx
	add	edx,edi
	psrld	xmm7,10
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm1,xmm4
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	psrlq	xmm6,17
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	ror	ecx,11
	pxor	xmm7,xmm6
	and	eax,ebx
	xor	ecx,esi
	psrlq	xmm6,2
	add	edx,DWORD PTR 52[esp]
	xor	eax,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	pshufd	xmm7,xmm7,128
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	psrldq	xmm7,8
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	paddd	xmm1,xmm7
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 8[esp],eax
	pshufd	xmm7,xmm1,80
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	movdqa	xmm6,xmm7
	ror	ecx,11
	psrld	xmm7,10
	and	ebx,eax
	psrlq	xmm6,17
	xor	ecx,esi
	add	edx,DWORD PTR 56[esp]
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	psrlq	xmm6,2
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm7,xmm6
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	pshufd	xmm7,xmm7,8
	xor	esi,edi
	ror	edx,5
	movdqa	xmm6,XMMWORD PTR 16[ebp]
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	pslldq	xmm7,8
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm1,xmm7
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	paddd	xmm6,xmm1
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 60[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	movdqa	XMMWORD PTR 48[esp],xmm6
	mov	ecx,edx
	movdqa	xmm4,xmm3
	ror	edx,14
	mov	esi,DWORD PTR 20[esp]
	movdqa	xmm7,xmm1
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
DB	102,15,58,15,226,4
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
DB	102,15,58,15,248,4
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	movdqa	xmm5,xmm4
	ror	edx,6
	mov	ecx,eax
	movdqa	xmm6,xmm4
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	psrld	xmm4,3
	mov	esi,eax
	ror	ecx,9
	paddd	xmm2,xmm7
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	psrld	xmm6,7
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	ror	ecx,11
	and	ebx,eax
	pshufd	xmm7,xmm1,250
	xor	ecx,esi
	add	edx,DWORD PTR 64[esp]
	pslld	xmm5,14
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm4,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	psrld	xmm6,11
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm4,xmm5
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	pslld	xmm5,11
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	ror	edx,5
	pxor	xmm4,xmm6
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	movdqa	xmm6,xmm7
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	pxor	xmm4,xmm5
	mov	ecx,ebx
	add	edx,edi
	psrld	xmm7,10
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm2,xmm4
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	psrlq	xmm6,17
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	ror	ecx,11
	pxor	xmm7,xmm6
	and	eax,ebx
	xor	ecx,esi
	psrlq	xmm6,2
	add	edx,DWORD PTR 68[esp]
	xor	eax,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	pshufd	xmm7,xmm7,128
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	psrldq	xmm7,8
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	paddd	xmm2,xmm7
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 24[esp],eax
	pshufd	xmm7,xmm2,80
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	movdqa	xmm6,xmm7
	ror	ecx,11
	psrld	xmm7,10
	and	ebx,eax
	psrlq	xmm6,17
	xor	ecx,esi
	add	edx,DWORD PTR 72[esp]
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	psrlq	xmm6,2
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm7,xmm6
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	pshufd	xmm7,xmm7,8
	xor	esi,edi
	ror	edx,5
	movdqa	xmm6,XMMWORD PTR 32[ebp]
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	pslldq	xmm7,8
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm2,xmm7
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	paddd	xmm6,xmm2
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 76[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	movdqa	XMMWORD PTR 64[esp],xmm6
	mov	ecx,edx
	movdqa	xmm4,xmm0
	ror	edx,14
	mov	esi,DWORD PTR 4[esp]
	movdqa	xmm7,xmm2
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
DB	102,15,58,15,227,4
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
DB	102,15,58,15,249,4
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	movdqa	xmm5,xmm4
	ror	edx,6
	mov	ecx,eax
	movdqa	xmm6,xmm4
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	psrld	xmm4,3
	mov	esi,eax
	ror	ecx,9
	paddd	xmm3,xmm7
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	psrld	xmm6,7
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	ror	ecx,11
	and	ebx,eax
	pshufd	xmm7,xmm2,250
	xor	ecx,esi
	add	edx,DWORD PTR 80[esp]
	pslld	xmm5,14
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm4,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	psrld	xmm6,11
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm4,xmm5
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	pslld	xmm5,11
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	ror	edx,5
	pxor	xmm4,xmm6
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	movdqa	xmm6,xmm7
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	pxor	xmm4,xmm5
	mov	ecx,ebx
	add	edx,edi
	psrld	xmm7,10
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm3,xmm4
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	psrlq	xmm6,17
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	ror	ecx,11
	pxor	xmm7,xmm6
	and	eax,ebx
	xor	ecx,esi
	psrlq	xmm6,2
	add	edx,DWORD PTR 84[esp]
	xor	eax,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	pshufd	xmm7,xmm7,128
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	psrldq	xmm7,8
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	paddd	xmm3,xmm7
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 8[esp],eax
	pshufd	xmm7,xmm3,80
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	movdqa	xmm6,xmm7
	ror	ecx,11
	psrld	xmm7,10
	and	ebx,eax
	psrlq	xmm6,17
	xor	ecx,esi
	add	edx,DWORD PTR 88[esp]
	xor	ebx,edi
	ror	ecx,2
	pxor	xmm7,xmm6
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	psrlq	xmm6,2
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	pxor	xmm7,xmm6
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	pshufd	xmm7,xmm7,8
	xor	esi,edi
	ror	edx,5
	movdqa	xmm6,XMMWORD PTR 48[ebp]
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	pslldq	xmm7,8
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	ror	ecx,9
	paddd	xmm3,xmm7
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	paddd	xmm6,xmm3
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 92[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	movdqa	XMMWORD PTR 80[esp],xmm6
	cmp	DWORD PTR 64[ebp],66051
	jne	$L013ssse3_00_47
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 20[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 32[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 36[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 24[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 40[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 44[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 4[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 48[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 52[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 8[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 56[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 60[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 20[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 64[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 68[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 24[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 72[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 76[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 4[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 80[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 84[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	ror	ecx,9
	mov	DWORD PTR 8[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	ror	ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 88[esp]
	xor	ebx,edi
	ror	ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	mov	ecx,edx
	ror	edx,14
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	ror	edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	ror	edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	ror	ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	ror	ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 92[esp]
	xor	eax,edi
	ror	ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	mov	esi,DWORD PTR 96[esp]
	xor	ebx,edi
	mov	ecx,DWORD PTR 12[esp]
	add	eax,DWORD PTR [esi]
	add	ebx,DWORD PTR 4[esi]
	add	edi,DWORD PTR 8[esi]
	add	ecx,DWORD PTR 12[esi]
	mov	DWORD PTR [esi],eax
	mov	DWORD PTR 4[esi],ebx
	mov	DWORD PTR 8[esi],edi
	mov	DWORD PTR 12[esi],ecx
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,edi
	mov	DWORD PTR 8[esp],edi
	mov	DWORD PTR 12[esp],ecx
	mov	edi,DWORD PTR 20[esp]
	mov	ecx,DWORD PTR 24[esp]
	add	edx,DWORD PTR 16[esi]
	add	edi,DWORD PTR 20[esi]
	add	ecx,DWORD PTR 24[esi]
	mov	DWORD PTR 16[esi],edx
	mov	DWORD PTR 20[esi],edi
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 28[esp]
	mov	DWORD PTR 24[esi],ecx
	add	edi,DWORD PTR 28[esi]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esi],edi
	mov	DWORD PTR 28[esp],edi
	mov	edi,DWORD PTR 100[esp]
	movdqa	xmm7,XMMWORD PTR 64[ebp]
	sub	ebp,192
	cmp	edi,DWORD PTR 104[esp]
	jb	$L012grand_ssse3
	mov	esp,DWORD PTR 108[esp]
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
ALIGN	32
$L005AVX:
	and	edx,264
	cmp	edx,264
	je	$L014AVX_BMI
	lea	esp,DWORD PTR [esp-96]
	vzeroall
	mov	eax,DWORD PTR [esi]
	mov	ebx,DWORD PTR 4[esi]
	mov	ecx,DWORD PTR 8[esi]
	mov	edi,DWORD PTR 12[esi]
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,ecx
	mov	DWORD PTR 8[esp],ecx
	mov	DWORD PTR 12[esp],edi
	mov	edx,DWORD PTR 16[esi]
	mov	edi,DWORD PTR 20[esi]
	mov	ecx,DWORD PTR 24[esi]
	mov	esi,DWORD PTR 28[esi]
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 100[esp]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esp],esi
	vmovdqa	xmm7,XMMWORD PTR 256[ebp]
	jmp	$L015grand_avx
ALIGN	32
$L015grand_avx:
	vmovdqu	xmm0,XMMWORD PTR [edi]
	vmovdqu	xmm1,XMMWORD PTR 16[edi]
	vmovdqu	xmm2,XMMWORD PTR 32[edi]
	vmovdqu	xmm3,XMMWORD PTR 48[edi]
	add	edi,64
	vpshufb	xmm0,xmm0,xmm7
	mov	DWORD PTR 100[esp],edi
	vpshufb	xmm1,xmm1,xmm7
	vpshufb	xmm2,xmm2,xmm7
	vpaddd	xmm4,xmm0,XMMWORD PTR [ebp]
	vpshufb	xmm3,xmm3,xmm7
	vpaddd	xmm5,xmm1,XMMWORD PTR 16[ebp]
	vpaddd	xmm6,xmm2,XMMWORD PTR 32[ebp]
	vpaddd	xmm7,xmm3,XMMWORD PTR 48[ebp]
	vmovdqa	XMMWORD PTR 32[esp],xmm4
	vmovdqa	XMMWORD PTR 48[esp],xmm5
	vmovdqa	XMMWORD PTR 64[esp],xmm6
	vmovdqa	XMMWORD PTR 80[esp],xmm7
	jmp	$L016avx_00_47
ALIGN	16
$L016avx_00_47:
	add	ebp,64
	vpalignr	xmm4,xmm1,xmm0,4
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 20[esp]
	vpalignr	xmm7,xmm3,xmm2,4
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm4,7
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	vpaddd	xmm0,xmm0,xmm7
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrld	xmm7,xmm4,3
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	vpslld	xmm5,xmm4,14
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR [esp],eax
	vpxor	xmm4,xmm7,xmm6
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	vpshufd	xmm7,xmm3,250
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpsrld	xmm6,xmm6,11
	add	edx,DWORD PTR 32[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpxor	xmm4,xmm4,xmm5
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	vpslld	xmm5,xmm5,11
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 16[esp]
	vpxor	xmm4,xmm4,xmm6
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm7,10
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	vpxor	xmm4,xmm4,xmm5
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	vpaddd	xmm0,xmm0,xmm4
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 28[esp],ebx
	vpxor	xmm6,xmm6,xmm5
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	vpsrlq	xmm7,xmm7,19
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	add	edx,DWORD PTR 36[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	vpshufd	xmm7,xmm6,132
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	vpsrldq	xmm7,xmm7,8
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 12[esp]
	vpaddd	xmm0,xmm0,xmm7
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	vpshufd	xmm7,xmm0,80
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	vpsrld	xmm6,xmm7,10
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	vpxor	xmm6,xmm6,xmm5
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 24[esp],eax
	vpsrlq	xmm7,xmm7,19
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	vpxor	xmm6,xmm6,xmm7
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpshufd	xmm7,xmm6,232
	add	edx,DWORD PTR 40[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpslldq	xmm7,xmm7,8
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	vpaddd	xmm0,xmm0,xmm7
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 8[esp]
	vpaddd	xmm6,xmm0,XMMWORD PTR [ebp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 44[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	vmovdqa	XMMWORD PTR 32[esp],xmm6
	vpalignr	xmm4,xmm2,xmm1,4
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 4[esp]
	vpalignr	xmm7,xmm0,xmm3,4
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm4,7
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	vpaddd	xmm1,xmm1,xmm7
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrld	xmm7,xmm4,3
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	vpslld	xmm5,xmm4,14
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 16[esp],eax
	vpxor	xmm4,xmm7,xmm6
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	vpshufd	xmm7,xmm0,250
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpsrld	xmm6,xmm6,11
	add	edx,DWORD PTR 48[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpxor	xmm4,xmm4,xmm5
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	vpslld	xmm5,xmm5,11
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR [esp]
	vpxor	xmm4,xmm4,xmm6
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm7,10
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	vpxor	xmm4,xmm4,xmm5
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	vpaddd	xmm1,xmm1,xmm4
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 12[esp],ebx
	vpxor	xmm6,xmm6,xmm5
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	vpsrlq	xmm7,xmm7,19
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	add	edx,DWORD PTR 52[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	vpshufd	xmm7,xmm6,132
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	vpsrldq	xmm7,xmm7,8
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 28[esp]
	vpaddd	xmm1,xmm1,xmm7
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	vpshufd	xmm7,xmm1,80
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	vpsrld	xmm6,xmm7,10
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	vpxor	xmm6,xmm6,xmm5
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 8[esp],eax
	vpsrlq	xmm7,xmm7,19
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	vpxor	xmm6,xmm6,xmm7
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpshufd	xmm7,xmm6,232
	add	edx,DWORD PTR 56[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpslldq	xmm7,xmm7,8
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	vpaddd	xmm1,xmm1,xmm7
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 24[esp]
	vpaddd	xmm6,xmm1,XMMWORD PTR 16[ebp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 60[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	vmovdqa	XMMWORD PTR 48[esp],xmm6
	vpalignr	xmm4,xmm3,xmm2,4
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 20[esp]
	vpalignr	xmm7,xmm1,xmm0,4
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm4,7
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	vpaddd	xmm2,xmm2,xmm7
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrld	xmm7,xmm4,3
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	vpslld	xmm5,xmm4,14
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR [esp],eax
	vpxor	xmm4,xmm7,xmm6
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	vpshufd	xmm7,xmm1,250
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpsrld	xmm6,xmm6,11
	add	edx,DWORD PTR 64[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpxor	xmm4,xmm4,xmm5
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	vpslld	xmm5,xmm5,11
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 16[esp]
	vpxor	xmm4,xmm4,xmm6
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm7,10
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	vpxor	xmm4,xmm4,xmm5
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	vpaddd	xmm2,xmm2,xmm4
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 28[esp],ebx
	vpxor	xmm6,xmm6,xmm5
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	vpsrlq	xmm7,xmm7,19
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	add	edx,DWORD PTR 68[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	vpshufd	xmm7,xmm6,132
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	vpsrldq	xmm7,xmm7,8
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 12[esp]
	vpaddd	xmm2,xmm2,xmm7
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	vpshufd	xmm7,xmm2,80
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	vpsrld	xmm6,xmm7,10
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	vpxor	xmm6,xmm6,xmm5
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 24[esp],eax
	vpsrlq	xmm7,xmm7,19
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	vpxor	xmm6,xmm6,xmm7
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpshufd	xmm7,xmm6,232
	add	edx,DWORD PTR 72[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpslldq	xmm7,xmm7,8
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	vpaddd	xmm2,xmm2,xmm7
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 8[esp]
	vpaddd	xmm6,xmm2,XMMWORD PTR 32[ebp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 76[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	vmovdqa	XMMWORD PTR 64[esp],xmm6
	vpalignr	xmm4,xmm0,xmm3,4
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 4[esp]
	vpalignr	xmm7,xmm2,xmm1,4
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm4,7
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	vpaddd	xmm3,xmm3,xmm7
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrld	xmm7,xmm4,3
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	vpslld	xmm5,xmm4,14
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 16[esp],eax
	vpxor	xmm4,xmm7,xmm6
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	vpshufd	xmm7,xmm2,250
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpsrld	xmm6,xmm6,11
	add	edx,DWORD PTR 80[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpxor	xmm4,xmm4,xmm5
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	vpslld	xmm5,xmm5,11
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR [esp]
	vpxor	xmm4,xmm4,xmm6
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	vpsrld	xmm6,xmm7,10
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	vpxor	xmm4,xmm4,xmm5
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	vpaddd	xmm3,xmm3,xmm4
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 12[esp],ebx
	vpxor	xmm6,xmm6,xmm5
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	vpsrlq	xmm7,xmm7,19
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	add	edx,DWORD PTR 84[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	vpshufd	xmm7,xmm6,132
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	vpsrldq	xmm7,xmm7,8
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 28[esp]
	vpaddd	xmm3,xmm3,xmm7
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	vpshufd	xmm7,xmm3,80
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	vpsrld	xmm6,xmm7,10
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	vpsrlq	xmm5,xmm7,17
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	vpxor	xmm6,xmm6,xmm5
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 8[esp],eax
	vpsrlq	xmm7,xmm7,19
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	vpxor	xmm6,xmm6,xmm7
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	vpshufd	xmm7,xmm6,232
	add	edx,DWORD PTR 88[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	vpslldq	xmm7,xmm7,8
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	vpaddd	xmm3,xmm3,xmm7
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 24[esp]
	vpaddd	xmm6,xmm3,XMMWORD PTR 48[ebp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 92[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	vmovdqa	XMMWORD PTR 80[esp],xmm6
	cmp	DWORD PTR 64[ebp],66051
	jne	$L016avx_00_47
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 20[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 32[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 36[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 24[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 40[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 44[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 4[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 48[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 52[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 8[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 56[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 60[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 20[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 24[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 16[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 4[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR [esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 64[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 12[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 16[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 20[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 12[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR [esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 28[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 68[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 8[esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 12[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 16[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 8[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 28[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 24[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 72[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 4[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 8[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 12[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 4[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 24[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 20[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 76[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR [esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 4[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 8[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR [esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 20[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 16[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 80[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 28[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR [esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 4[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 28[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 16[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 12[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 84[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 24[esp]
	add	eax,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 28[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR [esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 24[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,eax
	add	edx,edi
	mov	edi,DWORD PTR 12[esp]
	mov	esi,eax
	shrd	ecx,ecx,9
	mov	DWORD PTR 8[esp],eax
	xor	ecx,eax
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	shrd	ecx,ecx,11
	and	ebx,eax
	xor	ecx,esi
	add	edx,DWORD PTR 88[esp]
	xor	ebx,edi
	shrd	ecx,ecx,2
	add	ebx,edx
	add	edx,DWORD PTR 20[esp]
	add	ebx,ecx
	mov	ecx,edx
	shrd	edx,edx,14
	mov	esi,DWORD PTR 24[esp]
	xor	edx,ecx
	mov	edi,DWORD PTR 28[esp]
	xor	esi,edi
	shrd	edx,edx,5
	and	esi,ecx
	mov	DWORD PTR 20[esp],ecx
	xor	edx,ecx
	xor	edi,esi
	shrd	edx,edx,6
	mov	ecx,ebx
	add	edx,edi
	mov	edi,DWORD PTR 8[esp]
	mov	esi,ebx
	shrd	ecx,ecx,9
	mov	DWORD PTR 4[esp],ebx
	xor	ecx,ebx
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	shrd	ecx,ecx,11
	and	eax,ebx
	xor	ecx,esi
	add	edx,DWORD PTR 92[esp]
	xor	eax,edi
	shrd	ecx,ecx,2
	add	eax,edx
	add	edx,DWORD PTR 16[esp]
	add	eax,ecx
	mov	esi,DWORD PTR 96[esp]
	xor	ebx,edi
	mov	ecx,DWORD PTR 12[esp]
	add	eax,DWORD PTR [esi]
	add	ebx,DWORD PTR 4[esi]
	add	edi,DWORD PTR 8[esi]
	add	ecx,DWORD PTR 12[esi]
	mov	DWORD PTR [esi],eax
	mov	DWORD PTR 4[esi],ebx
	mov	DWORD PTR 8[esi],edi
	mov	DWORD PTR 12[esi],ecx
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,edi
	mov	DWORD PTR 8[esp],edi
	mov	DWORD PTR 12[esp],ecx
	mov	edi,DWORD PTR 20[esp]
	mov	ecx,DWORD PTR 24[esp]
	add	edx,DWORD PTR 16[esi]
	add	edi,DWORD PTR 20[esi]
	add	ecx,DWORD PTR 24[esi]
	mov	DWORD PTR 16[esi],edx
	mov	DWORD PTR 20[esi],edi
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 28[esp]
	mov	DWORD PTR 24[esi],ecx
	add	edi,DWORD PTR 28[esi]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esi],edi
	mov	DWORD PTR 28[esp],edi
	mov	edi,DWORD PTR 100[esp]
	vmovdqa	xmm7,XMMWORD PTR 64[ebp]
	sub	ebp,192
	cmp	edi,DWORD PTR 104[esp]
	jb	$L015grand_avx
	mov	esp,DWORD PTR 108[esp]
	vzeroall
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
ALIGN	32
$L014AVX_BMI:
	lea	esp,DWORD PTR [esp-96]
	vzeroall
	mov	eax,DWORD PTR [esi]
	mov	ebx,DWORD PTR 4[esi]
	mov	ecx,DWORD PTR 8[esi]
	mov	edi,DWORD PTR 12[esi]
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,ecx
	mov	DWORD PTR 8[esp],ecx
	mov	DWORD PTR 12[esp],edi
	mov	edx,DWORD PTR 16[esi]
	mov	edi,DWORD PTR 20[esi]
	mov	ecx,DWORD PTR 24[esi]
	mov	esi,DWORD PTR 28[esi]
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 100[esp]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esp],esi
	vmovdqa	xmm7,XMMWORD PTR 256[ebp]
	jmp	$L017grand_avx_bmi
ALIGN	32
$L017grand_avx_bmi:
	vmovdqu	xmm0,XMMWORD PTR [edi]
	vmovdqu	xmm1,XMMWORD PTR 16[edi]
	vmovdqu	xmm2,XMMWORD PTR 32[edi]
	vmovdqu	xmm3,XMMWORD PTR 48[edi]
	add	edi,64
	vpshufb	xmm0,xmm0,xmm7
	mov	DWORD PTR 100[esp],edi
	vpshufb	xmm1,xmm1,xmm7
	vpshufb	xmm2,xmm2,xmm7
	vpaddd	xmm4,xmm0,XMMWORD PTR [ebp]
	vpshufb	xmm3,xmm3,xmm7
	vpaddd	xmm5,xmm1,XMMWORD PTR 16[ebp]
	vpaddd	xmm6,xmm2,XMMWORD PTR 32[ebp]
	vpaddd	xmm7,xmm3,XMMWORD PTR 48[ebp]
	vmovdqa	XMMWORD PTR 32[esp],xmm4
	vmovdqa	XMMWORD PTR 48[esp],xmm5
	vmovdqa	XMMWORD PTR 64[esp],xmm6
	vmovdqa	XMMWORD PTR 80[esp],xmm7
	jmp	$L018avx_bmi_00_47
ALIGN	16
$L018avx_bmi_00_47:
	add	ebp,64
	vpalignr	xmm4,xmm1,xmm0,4
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 16[esp],edx
	vpalignr	xmm7,xmm3,xmm2,4
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 24[esp]
	vpsrld	xmm6,xmm4,7
	xor	ecx,edi
	and	edx,DWORD PTR 20[esp]
	mov	DWORD PTR [esp],eax
	vpaddd	xmm0,xmm0,xmm7
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrld	xmm7,xmm4,3
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpslld	xmm5,xmm4,14
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,esi
	xor	eax,edi
	vpxor	xmm4,xmm7,xmm6
	add	edx,DWORD PTR 28[esp]
	and	ebx,eax
	add	edx,DWORD PTR 32[esp]
	vpshufd	xmm7,xmm3,250
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 12[esp]
	vpsrld	xmm6,xmm6,11
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm4,xmm4,xmm5
	mov	DWORD PTR 12[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpslld	xmm5,xmm5,11
	andn	esi,edx,DWORD PTR 20[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 16[esp]
	vpxor	xmm4,xmm4,xmm6
	mov	DWORD PTR 28[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpsrld	xmm6,xmm7,10
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpxor	xmm4,xmm4,xmm5
	mov	edi,DWORD PTR [esp]
	xor	ecx,esi
	xor	ebx,edi
	vpsrlq	xmm5,xmm7,17
	add	edx,DWORD PTR 24[esp]
	and	eax,ebx
	add	edx,DWORD PTR 36[esp]
	vpaddd	xmm0,xmm0,xmm4
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 8[esp]
	vpxor	xmm6,xmm6,xmm5
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpsrlq	xmm7,xmm7,19
	mov	DWORD PTR 8[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	andn	esi,edx,DWORD PTR 16[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 12[esp]
	vpshufd	xmm7,xmm6,132
	mov	DWORD PTR 24[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrldq	xmm7,xmm7,8
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpaddd	xmm0,xmm0,xmm7
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,esi
	xor	eax,edi
	vpshufd	xmm7,xmm0,80
	add	edx,DWORD PTR 20[esp]
	and	ebx,eax
	add	edx,DWORD PTR 40[esp]
	vpsrld	xmm6,xmm7,10
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 4[esp]
	vpsrlq	xmm5,xmm7,17
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm6,xmm6,xmm5
	mov	DWORD PTR 4[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpsrlq	xmm7,xmm7,19
	andn	esi,edx,DWORD PTR 12[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 8[esp]
	vpxor	xmm6,xmm6,xmm7
	mov	DWORD PTR 20[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpshufd	xmm7,xmm6,232
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpslldq	xmm7,xmm7,8
	mov	edi,DWORD PTR 24[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpaddd	xmm0,xmm0,xmm7
	add	edx,DWORD PTR 16[esp]
	and	eax,ebx
	add	edx,DWORD PTR 44[esp]
	vpaddd	xmm6,xmm0,XMMWORD PTR [ebp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR [esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	vmovdqa	XMMWORD PTR 32[esp],xmm6
	vpalignr	xmm4,xmm2,xmm1,4
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR [esp],edx
	vpalignr	xmm7,xmm0,xmm3,4
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 8[esp]
	vpsrld	xmm6,xmm4,7
	xor	ecx,edi
	and	edx,DWORD PTR 4[esp]
	mov	DWORD PTR 16[esp],eax
	vpaddd	xmm1,xmm1,xmm7
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrld	xmm7,xmm4,3
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpslld	xmm5,xmm4,14
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,esi
	xor	eax,edi
	vpxor	xmm4,xmm7,xmm6
	add	edx,DWORD PTR 12[esp]
	and	ebx,eax
	add	edx,DWORD PTR 48[esp]
	vpshufd	xmm7,xmm0,250
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 28[esp]
	vpsrld	xmm6,xmm6,11
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm4,xmm4,xmm5
	mov	DWORD PTR 28[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpslld	xmm5,xmm5,11
	andn	esi,edx,DWORD PTR 4[esp]
	xor	ecx,edi
	and	edx,DWORD PTR [esp]
	vpxor	xmm4,xmm4,xmm6
	mov	DWORD PTR 12[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpsrld	xmm6,xmm7,10
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpxor	xmm4,xmm4,xmm5
	mov	edi,DWORD PTR 16[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpsrlq	xmm5,xmm7,17
	add	edx,DWORD PTR 8[esp]
	and	eax,ebx
	add	edx,DWORD PTR 52[esp]
	vpaddd	xmm1,xmm1,xmm4
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 24[esp]
	vpxor	xmm6,xmm6,xmm5
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpsrlq	xmm7,xmm7,19
	mov	DWORD PTR 24[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	andn	esi,edx,DWORD PTR [esp]
	xor	ecx,edi
	and	edx,DWORD PTR 28[esp]
	vpshufd	xmm7,xmm6,132
	mov	DWORD PTR 8[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrldq	xmm7,xmm7,8
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpaddd	xmm1,xmm1,xmm7
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,esi
	xor	eax,edi
	vpshufd	xmm7,xmm1,80
	add	edx,DWORD PTR 4[esp]
	and	ebx,eax
	add	edx,DWORD PTR 56[esp]
	vpsrld	xmm6,xmm7,10
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 20[esp]
	vpsrlq	xmm5,xmm7,17
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm6,xmm6,xmm5
	mov	DWORD PTR 20[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpsrlq	xmm7,xmm7,19
	andn	esi,edx,DWORD PTR 28[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 24[esp]
	vpxor	xmm6,xmm6,xmm7
	mov	DWORD PTR 4[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpshufd	xmm7,xmm6,232
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpslldq	xmm7,xmm7,8
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpaddd	xmm1,xmm1,xmm7
	add	edx,DWORD PTR [esp]
	and	eax,ebx
	add	edx,DWORD PTR 60[esp]
	vpaddd	xmm6,xmm1,XMMWORD PTR 16[ebp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 16[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	vmovdqa	XMMWORD PTR 48[esp],xmm6
	vpalignr	xmm4,xmm3,xmm2,4
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 16[esp],edx
	vpalignr	xmm7,xmm1,xmm0,4
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 24[esp]
	vpsrld	xmm6,xmm4,7
	xor	ecx,edi
	and	edx,DWORD PTR 20[esp]
	mov	DWORD PTR [esp],eax
	vpaddd	xmm2,xmm2,xmm7
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrld	xmm7,xmm4,3
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpslld	xmm5,xmm4,14
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,esi
	xor	eax,edi
	vpxor	xmm4,xmm7,xmm6
	add	edx,DWORD PTR 28[esp]
	and	ebx,eax
	add	edx,DWORD PTR 64[esp]
	vpshufd	xmm7,xmm1,250
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 12[esp]
	vpsrld	xmm6,xmm6,11
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm4,xmm4,xmm5
	mov	DWORD PTR 12[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpslld	xmm5,xmm5,11
	andn	esi,edx,DWORD PTR 20[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 16[esp]
	vpxor	xmm4,xmm4,xmm6
	mov	DWORD PTR 28[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpsrld	xmm6,xmm7,10
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpxor	xmm4,xmm4,xmm5
	mov	edi,DWORD PTR [esp]
	xor	ecx,esi
	xor	ebx,edi
	vpsrlq	xmm5,xmm7,17
	add	edx,DWORD PTR 24[esp]
	and	eax,ebx
	add	edx,DWORD PTR 68[esp]
	vpaddd	xmm2,xmm2,xmm4
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 8[esp]
	vpxor	xmm6,xmm6,xmm5
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpsrlq	xmm7,xmm7,19
	mov	DWORD PTR 8[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	andn	esi,edx,DWORD PTR 16[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 12[esp]
	vpshufd	xmm7,xmm6,132
	mov	DWORD PTR 24[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrldq	xmm7,xmm7,8
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpaddd	xmm2,xmm2,xmm7
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,esi
	xor	eax,edi
	vpshufd	xmm7,xmm2,80
	add	edx,DWORD PTR 20[esp]
	and	ebx,eax
	add	edx,DWORD PTR 72[esp]
	vpsrld	xmm6,xmm7,10
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 4[esp]
	vpsrlq	xmm5,xmm7,17
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm6,xmm6,xmm5
	mov	DWORD PTR 4[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpsrlq	xmm7,xmm7,19
	andn	esi,edx,DWORD PTR 12[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 8[esp]
	vpxor	xmm6,xmm6,xmm7
	mov	DWORD PTR 20[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpshufd	xmm7,xmm6,232
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpslldq	xmm7,xmm7,8
	mov	edi,DWORD PTR 24[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpaddd	xmm2,xmm2,xmm7
	add	edx,DWORD PTR 16[esp]
	and	eax,ebx
	add	edx,DWORD PTR 76[esp]
	vpaddd	xmm6,xmm2,XMMWORD PTR 32[ebp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR [esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	vmovdqa	XMMWORD PTR 64[esp],xmm6
	vpalignr	xmm4,xmm0,xmm3,4
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR [esp],edx
	vpalignr	xmm7,xmm2,xmm1,4
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 8[esp]
	vpsrld	xmm6,xmm4,7
	xor	ecx,edi
	and	edx,DWORD PTR 4[esp]
	mov	DWORD PTR 16[esp],eax
	vpaddd	xmm3,xmm3,xmm7
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrld	xmm7,xmm4,3
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpslld	xmm5,xmm4,14
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,esi
	xor	eax,edi
	vpxor	xmm4,xmm7,xmm6
	add	edx,DWORD PTR 12[esp]
	and	ebx,eax
	add	edx,DWORD PTR 80[esp]
	vpshufd	xmm7,xmm2,250
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 28[esp]
	vpsrld	xmm6,xmm6,11
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm4,xmm4,xmm5
	mov	DWORD PTR 28[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpslld	xmm5,xmm5,11
	andn	esi,edx,DWORD PTR 4[esp]
	xor	ecx,edi
	and	edx,DWORD PTR [esp]
	vpxor	xmm4,xmm4,xmm6
	mov	DWORD PTR 12[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpsrld	xmm6,xmm7,10
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpxor	xmm4,xmm4,xmm5
	mov	edi,DWORD PTR 16[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpsrlq	xmm5,xmm7,17
	add	edx,DWORD PTR 8[esp]
	and	eax,ebx
	add	edx,DWORD PTR 84[esp]
	vpaddd	xmm3,xmm3,xmm4
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 24[esp]
	vpxor	xmm6,xmm6,xmm5
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpsrlq	xmm7,xmm7,19
	mov	DWORD PTR 24[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpxor	xmm6,xmm6,xmm7
	andn	esi,edx,DWORD PTR [esp]
	xor	ecx,edi
	and	edx,DWORD PTR 28[esp]
	vpshufd	xmm7,xmm6,132
	mov	DWORD PTR 8[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	vpsrldq	xmm7,xmm7,8
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	vpaddd	xmm3,xmm3,xmm7
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,esi
	xor	eax,edi
	vpshufd	xmm7,xmm3,80
	add	edx,DWORD PTR 4[esp]
	and	ebx,eax
	add	edx,DWORD PTR 88[esp]
	vpsrld	xmm6,xmm7,10
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 20[esp]
	vpsrlq	xmm5,xmm7,17
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	vpxor	xmm6,xmm6,xmm5
	mov	DWORD PTR 20[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	vpsrlq	xmm7,xmm7,19
	andn	esi,edx,DWORD PTR 28[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 24[esp]
	vpxor	xmm6,xmm6,xmm7
	mov	DWORD PTR 4[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	vpshufd	xmm7,xmm6,232
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	vpslldq	xmm7,xmm7,8
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,esi
	xor	ebx,edi
	vpaddd	xmm3,xmm3,xmm7
	add	edx,DWORD PTR [esp]
	and	eax,ebx
	add	edx,DWORD PTR 92[esp]
	vpaddd	xmm6,xmm3,XMMWORD PTR 48[ebp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 16[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	vmovdqa	XMMWORD PTR 80[esp],xmm6
	cmp	DWORD PTR 64[ebp],66051
	jne	$L018avx_bmi_00_47
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 16[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 24[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 20[esp]
	mov	DWORD PTR [esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	and	ebx,eax
	add	edx,DWORD PTR 32[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 12[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 12[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 20[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 16[esp]
	mov	DWORD PTR 28[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR [esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	and	eax,ebx
	add	edx,DWORD PTR 36[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 8[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 8[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 16[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 12[esp]
	mov	DWORD PTR 24[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	and	ebx,eax
	add	edx,DWORD PTR 40[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 4[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 4[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 12[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 8[esp]
	mov	DWORD PTR 20[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 24[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	and	eax,ebx
	add	edx,DWORD PTR 44[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR [esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR [esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 8[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 4[esp]
	mov	DWORD PTR 16[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	and	ebx,eax
	add	edx,DWORD PTR 48[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 28[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 28[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 4[esp]
	xor	ecx,edi
	and	edx,DWORD PTR [esp]
	mov	DWORD PTR 12[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 16[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	and	eax,ebx
	add	edx,DWORD PTR 52[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 24[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 24[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR [esp]
	xor	ecx,edi
	and	edx,DWORD PTR 28[esp]
	mov	DWORD PTR 8[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	and	ebx,eax
	add	edx,DWORD PTR 56[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 20[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 20[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 28[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 24[esp]
	mov	DWORD PTR 4[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	and	eax,ebx
	add	edx,DWORD PTR 60[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 16[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 16[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 24[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 20[esp]
	mov	DWORD PTR [esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 4[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 28[esp]
	and	ebx,eax
	add	edx,DWORD PTR 64[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 12[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 12[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 20[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 16[esp]
	mov	DWORD PTR 28[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR [esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 24[esp]
	and	eax,ebx
	add	edx,DWORD PTR 68[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 8[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 8[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 16[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 12[esp]
	mov	DWORD PTR 24[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 28[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 20[esp]
	and	ebx,eax
	add	edx,DWORD PTR 72[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 4[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 4[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 12[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 8[esp]
	mov	DWORD PTR 20[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 24[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 16[esp]
	and	eax,ebx
	add	edx,DWORD PTR 76[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR [esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR [esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 8[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 4[esp]
	mov	DWORD PTR 16[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 20[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 12[esp]
	and	ebx,eax
	add	edx,DWORD PTR 80[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 28[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 28[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 4[esp]
	xor	ecx,edi
	and	edx,DWORD PTR [esp]
	mov	DWORD PTR 12[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 16[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR 8[esp]
	and	eax,ebx
	add	edx,DWORD PTR 84[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 24[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 24[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR [esp]
	xor	ecx,edi
	and	edx,DWORD PTR 28[esp]
	mov	DWORD PTR 8[esp],eax
	or	edx,esi
	rorx	edi,eax,2
	rorx	esi,eax,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,eax,22
	xor	esi,edi
	mov	edi,DWORD PTR 12[esp]
	xor	ecx,esi
	xor	eax,edi
	add	edx,DWORD PTR 4[esp]
	and	ebx,eax
	add	edx,DWORD PTR 88[esp]
	xor	ebx,edi
	add	ecx,edx
	add	edx,DWORD PTR 20[esp]
	lea	ebx,DWORD PTR [ecx*1+ebx]
	rorx	ecx,edx,6
	rorx	esi,edx,11
	mov	DWORD PTR 20[esp],edx
	rorx	edi,edx,25
	xor	ecx,esi
	andn	esi,edx,DWORD PTR 28[esp]
	xor	ecx,edi
	and	edx,DWORD PTR 24[esp]
	mov	DWORD PTR 4[esp],ebx
	or	edx,esi
	rorx	edi,ebx,2
	rorx	esi,ebx,13
	lea	edx,DWORD PTR [ecx*1+edx]
	rorx	ecx,ebx,22
	xor	esi,edi
	mov	edi,DWORD PTR 8[esp]
	xor	ecx,esi
	xor	ebx,edi
	add	edx,DWORD PTR [esp]
	and	eax,ebx
	add	edx,DWORD PTR 92[esp]
	xor	eax,edi
	add	ecx,edx
	add	edx,DWORD PTR 16[esp]
	lea	eax,DWORD PTR [ecx*1+eax]
	mov	esi,DWORD PTR 96[esp]
	xor	ebx,edi
	mov	ecx,DWORD PTR 12[esp]
	add	eax,DWORD PTR [esi]
	add	ebx,DWORD PTR 4[esi]
	add	edi,DWORD PTR 8[esi]
	add	ecx,DWORD PTR 12[esi]
	mov	DWORD PTR [esi],eax
	mov	DWORD PTR 4[esi],ebx
	mov	DWORD PTR 8[esi],edi
	mov	DWORD PTR 12[esi],ecx
	mov	DWORD PTR 4[esp],ebx
	xor	ebx,edi
	mov	DWORD PTR 8[esp],edi
	mov	DWORD PTR 12[esp],ecx
	mov	edi,DWORD PTR 20[esp]
	mov	ecx,DWORD PTR 24[esp]
	add	edx,DWORD PTR 16[esi]
	add	edi,DWORD PTR 20[esi]
	add	ecx,DWORD PTR 24[esi]
	mov	DWORD PTR 16[esi],edx
	mov	DWORD PTR 20[esi],edi
	mov	DWORD PTR 20[esp],edi
	mov	edi,DWORD PTR 28[esp]
	mov	DWORD PTR 24[esi],ecx
	add	edi,DWORD PTR 28[esi]
	mov	DWORD PTR 24[esp],ecx
	mov	DWORD PTR 28[esi],edi
	mov	DWORD PTR 28[esp],edi
	mov	edi,DWORD PTR 100[esp]
	vmovdqa	xmm7,XMMWORD PTR 64[ebp]
	sub	ebp,192
	cmp	edi,DWORD PTR 104[esp]
	jb	$L017grand_avx_bmi
	mov	esp,DWORD PTR 108[esp]
	vzeroall
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
_sha256_block_data_order ENDP
.text$	ENDS
.bss	SEGMENT 'BSS'
COMM	_OPENSSL_ia32cap_P:DWORD:4
.bss	ENDS
END
