	; Don't even think of reading this code
	; It was automatically generated by crypt586.pl
	; Which is a perl program used to generate the x86 assember for
	; any of ELF, a.out, COFF, Win32, ...
	; eric <eay@cryptsoft.com>
	; 
%ifdef __omf__
section	code	use32 class=code
%else
section	.text
%endif
extern	_DES_SPtrans
global	_fcrypt_body
_fcrypt_body:
	push	ebp
	push	ebx
	push	esi
	push	edi
	; 
	; Load the 2 words
	xor	edi,		edi
	xor	esi,		esi
	lea	edx,		[_DES_SPtrans]
	push	edx
	mov	ebp,		DWORD [28+esp]
	push	DWORD 25
@L000start:
	; 
	; Round 0
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [4+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 1
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [8+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [12+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 2
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [16+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [20+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 3
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [24+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [28+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 4
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [32+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [36+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 5
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [40+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [44+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 6
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [48+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [52+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 7
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [56+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [60+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 8
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [64+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [68+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 9
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [72+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [76+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 10
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [80+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [84+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 11
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [88+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [92+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 12
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [96+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [100+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 13
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [104+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [108+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 14
	mov	eax,		DWORD [36+esp]
	mov	edx,		esi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		esi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [112+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [116+ebp]
	xor	eax,		esi
	xor	edx,		esi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	edi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	edi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	edi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	edi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	edi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	edi,		ebx
	mov	ebp,		DWORD [32+esp]
	; 
	; Round 15
	mov	eax,		DWORD [36+esp]
	mov	edx,		edi
	shr	edx,		16
	mov	ecx,		DWORD [40+esp]
	xor	edx,		edi
	and	eax,		edx
	and	edx,		ecx
	mov	ebx,		eax
	shl	ebx,		16
	mov	ecx,		edx
	shl	ecx,		16
	xor	eax,		ebx
	xor	edx,		ecx
	mov	ebx,		DWORD [120+ebp]
	xor	eax,		ebx
	mov	ecx,		DWORD [124+ebp]
	xor	eax,		edi
	xor	edx,		edi
	xor	edx,		ecx
	and	eax,		0fcfcfcfch
	xor	ebx,		ebx
	and	edx,		0cfcfcfcfh
	xor	ecx,		ecx
	mov	bl,		al
	mov	cl,		ah
	ror	edx,		4
	mov	ebp,		DWORD [4+esp]
	xor	esi,		DWORD [ebx+ebp]
	mov	bl,		dl
	xor	esi,		DWORD [0200h+ecx+ebp]
	mov	cl,		dh
	shr	eax,		16
	xor	esi,		DWORD [0100h+ebx+ebp]
	mov	bl,		ah
	shr	edx,		16
	xor	esi,		DWORD [0300h+ecx+ebp]
	mov	cl,		dh
	and	eax,		0ffh
	and	edx,		0ffh
	mov	ebx,		DWORD [0600h+ebx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0700h+ecx+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0400h+eax+ebp]
	xor	esi,		ebx
	mov	ebx,		DWORD [0500h+edx+ebp]
	xor	esi,		ebx
	mov	ebp,		DWORD [32+esp]
	mov	ebx,		DWORD [esp]
	mov	eax,		edi
	dec	ebx
	mov	edi,		esi
	mov	esi,		eax
	mov	DWORD [esp],	ebx
	jnz NEAR	@L000start
	; 
	; FP
	mov	edx,		DWORD [28+esp]
	ror	edi,		1
	mov	eax,		esi
	xor	esi,		edi
	and	esi,		0aaaaaaaah
	xor	eax,		esi
	xor	edi,		esi
	; 
	rol	eax,		23
	mov	esi,		eax
	xor	eax,		edi
	and	eax,		003fc03fch
	xor	esi,		eax
	xor	edi,		eax
	; 
	rol	esi,		10
	mov	eax,		esi
	xor	esi,		edi
	and	esi,		033333333h
	xor	eax,		esi
	xor	edi,		esi
	; 
	rol	edi,		18
	mov	esi,		edi
	xor	edi,		eax
	and	edi,		0fff0000fh
	xor	esi,		edi
	xor	eax,		edi
	; 
	rol	esi,		12
	mov	edi,		esi
	xor	esi,		eax
	and	esi,		0f0f0f0f0h
	xor	edi,		esi
	xor	eax,		esi
	; 
	ror	eax,		4
	mov	DWORD [edx],	eax
	mov	DWORD [4+edx],	edi
	add	esp,		8
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
